Tham khảo tài liệu mới nhất được xác thực
https://www.jianshu.com/p/531c959b8cf8
Các vấn đề thường gặp trong quá trình gỡ lỗi có thể xem ở phần sau của tài liệu dưới đây
https://www.jianshu.com/p/68a19f28c51a
Cách người khác truy cập địa chỉ Jenkins
https://blog.csdn.net/sinat_37865456/article/details/123844525
/Users/hzs/Library/LaunchAgents/ Tìm đến thư mục ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist không tìm thấy
Lưu ý http://localhost:8080/restart khởi động lại Jenkins không được, phải sử dụng lệnh sau để khởi động lại
brew services restart jenkins
Cần cài đặt plugin này để chọn nhánh Git Parameter
Tệp Fastfile
# Tệp này chứa cấu hình fastlane.tools
# Bạn có thể tìm thấy tài liệu tại https://docs.fastlane.tools
#
# Để xem danh sách tất cả các hành động có sẵn, hãy kiểm tra
#
# https://docs.fastlane.tools/actions
#
# Để xem danh sách tất cả các plugin có sẵn, hãy kiểm tra
#
# https://docs.fastlane.tools/plugins/available-plugins
#
# Bỏ ghi chú dòng nếu bạn muốn fastlane tự động cập nhật chính nó
# update_fastlane
default_platform(:iOS)
# api_key và user_key của Pgyer
api_key = "9e10d6552c7bfac5f3c48196058a732e"
#user_key = "23ad8dc66ff14718fb55897eae138c55"
configuration = "Debug"#Debug_Production_Server
platform :iOS do
desc "🚀🚀🚀🚀🚀Đóng gói và tải lên Pgyer🚀🚀🚀🚀🚀"
lane :debug do
# Chỉ định tên scheme của dự án
scheme = "QuFangApp"
gym(
# Tên ipa đầu ra
output_name:"#{scheme}",
# Có xóa thông tin biên dịch trước đó không true: có
clean:true,
scheme:scheme,
# Chỉ định phương thức đóng gói, Release hoặc Debug
configuration:"#{configuration}",
# Chỉ định phương thức xuất ra được sử dụng, hiện hỗ trợ app-store, package, ad-hoc, enterprise, development
export_method:"development",
# Chỉ định thư mục đầu ra
output_directory:"./build/pgy",
)
pgyer(api_key: "#{api_key}")
end
end
Script Jenkins
#!/bin/bash
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
set -e
# Xuất lỗi
function echo_error() {
echo "$1"
}
# Xuất thông tin
function echo_info() {
echo "$1"
}
# Đóng gói
function packaging() {
echo_info "====================Bắt đầu===================="
# Kiểm tra tham số $# số lượng tham số được thêm vào Shell
if [ $# != "1" ] || ([ $1 != "debug" ] && [ $1 != "release" ] && [ $1 != "appStore" ]); then
echo_error 'Vui lòng chỉ định loại đóng gói: debug, release, appStore'
exit 1
fi
# Cấu hình tham số
fastlane_output_path="./build/pgy"
# API Key của tài khoản Pgyer của bạn
PGY_API_KEY="9e10d6552c7bfac5f3c48196058a732e"
# Định nghĩa một số biến
export v_env=$1
export v_project_name="QuFangApp"
export v_build_number="${BUILD_NUMBER}"
export v_git_branch="${GIT_BRANCH}"
export v_commit_node="$(git log -n 1 --pretty=format:"%h")"
export v_download_URL="https://www.pgyer.com/ckcj"
export v_QRCode_URL="https://www.pgyer.com/ckcj"
export v_last_10_logs="$(git log -n 10 --pretty=format:"%h %ci %cn%n%s%n")"
echo_info "====================Cài đặt phụ thuộc pod===================="
# Cài đặt phụ thuộc pod
#rm -rf './Pods/Local Podspecs'
#pod update
cd ${WORKSPACE}/QuFang-App/QuFangApp
pod install
# Xóa đầu ra xây dựng
rm -rf "${fastlane_output_path}"
# Cài đặt nhiều target trong một dự án
target="QuFangApp"
if [ $1 == "debug" ]; then
target="QuFangApp"
fi
# Số phiên bản
export v_app_version=$(echo "$(fastlane run get_version_number xcodeproj:QuFangApp.xcodeproj target:${target}))" | tr -d '\n' | sed -E 's/.*Result: ([0-9\.]*).*/\1/g')
# Xây dựng
echo_info "====================Xây dựng===================="
ipa_name="QuFangApp"
# Đóng gói fastlane
fastlane ${v_env}
# Tải lên gói nhị phân lên Pgyer
if [ $1 != "appStore" ]; then
echo_info "====================Tải lên gói nhị phân lên Pgyer===================="
resp=$(curl -F "file=@${fastlane_output_path}/${ipa_name}.ipa" -F "_api_key=${PGY_API_KEY}" -F "buildInstallType=1" https://www.pgyer.com/apiv2/app/upload)
echo "pgy_resp=${resp}"
# Phân tích dữ liệu, tạo địa chỉ tải xuống
build_key=$(echo "$resp" | tr "\n" " " | sed -E 's/.*"buildKey" *: *"([^"]*)".*/\1/g')
v_QRCode_URL=$(echo "$resp" | tr "\n" " " | sed -E 's/.*"buildQRCodeURL" *: *"([^"]*)".*/\1/g' | sed -E 's/\\\//\//g')
v_download_URL="https://www.pgyer.com/apiv2/app/install?_api_key=${PGY_API_KEY}&buildKey=${build_key}"
v_download_URL="https://www.pgyer.com/${build_key}"
echo_info "Địa chỉ mã QR: ${v_QRCode_URL}"
echo_info "Địa chỉ tải ứng dụng: ${v_download_URL}"
fi
}
export FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT=120
# Thực thi đóng gói
packaging ${BuildType}
=================================================
Phần dưới không cần xem, tài liệu từ vài năm trước
=================================================
Toàn bộ quá trình chi tiết: https://www.jianshu.com/p/91e8f571fc2b
Dưới đây là các vấn đề gặp phải và quá trình giải quyết
Một、Cài đặt homebrew (Tốc độ mạng rất chậm... bị chặn)
| /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
|---|
Kiểm tra phiên bản Homebrew
brew -v |
|---|
Chi tiết: https://www.jianshu.com/p/117424d09d4c
Thay đổi nguồn homebrew, nếu không sẽ chậm chết người
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core" git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git |
|---|
cd "$(brew --repo)"/Library/Taps/caskroom/homebrew-cask git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-cask.git |
|---|
echo 'export HOMEBREW\_BOTTLE\_DOMAIN=\[https://mirrors.ustc.edu.cn/homebrew-bottles'\](https://mirrors.ustc.edu.cn/homebrew-bottles' rel=) >> ~/.zshrc source ~/.zshrc |
|---|
Chi tiết: https://www.jianshu.com/p/766c047f625f
Hai、Cài đặt jenkins (Tốc độ mạng rất chậm... bị chặn, xem cách thay đổi nguồn homebrew ở trên)
brew install jenkins |
|---|
A. Nếu có vấn đề
Updating Homebrew... jenkins: Java 1.8 is required to install this formula. JavaRequirement unsatisfied! You can install with Homebrew-Cask: brew cask install homebrew/cask-versions/java8 You can download from: https://www.oracle.com/technetwork/java/javase/downloads/index.html Error: An unsatisfied requirement failed this build. |
|---|
Cài đặt Java theo hướng dẫn
brew cask install homebrew/cask-versions/java8 |
|---|
Sau khi cài đặt, thực thi lại
brew install jenkins |
|---|
B. Nếu có vấn đề
| jenkins: Java 1.8 is required to install this formula. Install AdoptOpenJDK 8 with Homebrew Cask: brew cask install homebrew/cask-versions/adoptopenjdk8 Error: An unsatisfied requirement failed this build. |
|---|
Cài đặt theo hướng dẫn
brew cask install homebrew/cask-versions/adoptopenjdk8 |
|---|
Sau khi cài đặt, thực thi lại
brew install jenkins |
|---|
Ba、Khởi động jenkins
jenkins |
|---|
Mở http://localhost:8080 trong trình duyệt, nếu trang có nội dung thì cài đặt thành công
Bốn、Lấy tài khoản và mật khẩu
Tài khoản admin
1.Tìm đến thư mục /Users/Shared/Jenkins/Home trong Finder;
2.Chuột phải vào thư mục secrets, chọn Hiển thị thông tin;
3.Kéo xuống cuối, sau đó nhấp vào hình ảnh khóa ở góc dưới bên phải>nhập mật khẩu của bạn>xác nhận;
4.Nhấp vào dấu "+" ở góc dưới bên trái của cửa sổ bật lên, thêm người dùng máy tính hiện tại vào Chia sẻ và Quyền, đặt thành Chỉ đọc hoặc Đọc và Ghi;
5.Mở thư mục secrets, tìm tệp initialAdminPassword để lấy mật khẩu quản trị viên ban đầu. Nếu bạn không có quyền cho tệp này, bạn cần chuột phải vào tệp và chọn Hiển thị thông tin, sau đó lặp lại các bước 3 và 4 để truy cập tệp.Chi tiết: https://www.jianshu.com/p/0d6db1789382Cũng có thể hiển thị tệp ẩn trên Mac để tìm thư mục secrets
| defaults write com.apple.finder AppleShowAllFiles -boolean true |
|---|
| killall Finder |
|---|
Năm、Cài đặt plugin jenkins
Hiện tại các plugin được cài đặt như sau (Khi cài đặt plugin, đôi khi sẽ báo lỗi, khi phụ thuộc vào các plugin khác, hãy cài đặt các plugin cần thiết theo gợi ý trước, sau đó cài đặt lại):
branch-api.hpi
build-token-root.hpi
git-client.hpi
git-parameter.hpi
git.hpi
gitlab-api.hpi
gitlab-branch-source.hpi
gitlab-hook.hpi
gitlab-logo.hpi
gitlab-oauth.hpi
gitlab-plugin.hpi
locale.hpi
publish-over-ssh.hpi
ruby-runtime.hpi
xcode-plugin.hpi
A.Quản lý hệ thống Jenkins>>Quản lý plugin>>Menu Nâng cao
Trong menu Nâng cao, đặt URL của trang cập nhật trong phần Cập nhật trang web thành http://mirror.xmission.com/jenkins/updates/current/update-center.json Lưu và khởi động lại Jenkins
Vào Quản lý hệ thống>Quản lý plugin>Plugin tùy chọn, nhập tên plugin cần thiết vào hộp tìm kiếm ở góc trên bên phải, chọn và nhấp vào Cài đặt. Thường xuyên tải xuống thất bại. Bạn có thể giải quyết bằng cách B bên dưới, tải xuống trước rồi tải lên.
B.Nếu A tải xuống trực tuyến thất bại, bạn có thể tìm plugin cần thiết tại http://updates.jenkins-ci.org/download/plugins, tải xuống rồi thực hiện các thao tác sau
Quản lý hệ thống>Quản lý plugin>Nâng cao>Tải plugin (chọn tệp để tải lên)
Chi tiết: https://blog.csdn.net/ZNWhahaha/article/details/81269041
Vì phiên bản jenkins quá thấp dẫn đến cài đặt plugin thất bại
Chi tiết: https://www.cnblogs.com/sxdcgaq8080/p/10489326.html
Chi tiết: Tải xuống và thay thế thủ công tệp jenkins.war https://www.cnblogs.com/huangzs/p/11719581.html
Sáu、Thay đổi ngôn ngữ hiển thị của jenkins thành tiếng Trung
Tải xuống plugin Localization: Chinese (Simplified)
Cài đặt sau đó Quản lý hệ thống -> Cài đặt hệ thống -> Locale
Đặt thành zh_cn Tiếng Trung giản thể
Khởi động lại jenkins
Chi tiết: https://www.cnblogs.com/ycyzharry/p/11664654.html
Bảy、Tạo dự án mới
Tạo Item, nhập tên dự án, xây dựng một dự án phần mềm theo phong cách tự do
Tám、Cấu hình git
Nếu cấu hình Repository URL là kết nối http và báo lỗi sau, kho git luôn không kết nối được, bạn có thể cấu hình xác thực SSH trong gitlab, sau đó thay đổi địa chỉ kho git trong jenkins thành địa chỉ SSH, nhập tài khoản và mật khẩu git, đặt nhánh để giải quyết.
Failed to connect to repository : Command "/usr/local/git/git-2.12.2/git ls-remote -h https://github.com/Frodez/jenkinsTest.git HEAD" returned status code 128: stdout: stderr: fatal: unable to access '/root/etc/gitconfig':
Cách giải quyết:
Git - Tạo khóa SSH công khai
ssh-keygen |
|---|
cd ~/.ssh |
|---|
| open ~/.ssh |
|---|
Mở thư mục, bạn sẽ tìm thấy tệp id_rsa.pub, nội dung bên trong là khóa công khai.
Trong gitlab, nhấp vào hình đại diện tài khoản>Settings>SSH Keys>Add an SSH key (Viết email vào Title, viết nội dung id_rsa.pub vào Key)
Chín、Cấu hình Xcode
1.Cấu hình Xcode Schema File thành tên Target trong dự án
2.Cấu hình Configuration thành Release hoặc Debug
3.Chọn Pack application, build and sign .ipa?
Cấu hình Export method thành phương thức chứng chỉ ad-hoc
Cấu hình .ipa filename pattern thành tên Target, thuận tiện để tìm vị trí ipa khi tải lên Pgyer
4.Code signing & OS X keychain options
Chọn Manual signing
Sau đó cấu hình Bundle ID và UUID của tệp cấu hình (Tìm tệp cấu hình, chuột phải vào Hiển thị thông tin để xem UUID)
4.Advanced Xcode build options
Cấu hình Xcode Workspace File thành ${WORKSPACE}/Tên Target/Tên Target
Mười、Tải lên Pgyer
uKey và apiKey lấy từ địa chỉ sau
Trong đường dẫn IPA_PATH, thay *** bằng tên đường dẫn ipa được tạo trong jenkins
| \#User Key trên Pgyer uKey="\*\*\*\*\*\*" \#API Key trên Pgyer apiKey="\*\*\*\*\*\*\*" \#Đường dẫn tệp ipa cần tải lên IPA_PATH="${WORKSPACE}/build/Release-iphoneos/\*\*\*.ipa" \#Mật khẩu MSG="${commitMsg}" \#Thực thi lệnh tải lên Pgyer echo "++++++++++++++upload+++++++++++++" curl -F "file=@${IPA_PATH}" -F "uKey=${uKey}" -F "\_api\_key=${apiKey}" -F "updateDescription=${MSG}" -F "password=${PASSWORD}" https://qiniu-storage.pgyer.com/apiv1/app/upload |
|---|
Mười Một、Bắt đầu xây dựng Build Now
Trong lịch sử xây dựng, màu xanh dương là thành công, màu đỏ là thất bại, màu xám là hủy