Tự động hóa Quy trình Đóng gói Jenkins (Gitlab) và Tải lên Pgyer

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)

Chi tiết: https://git-scm.com/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E7%94%9F%E6%88%90-SSH-%E5%85%AC%E9%92%A5

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

http://www.pgyer.com/doc/api

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

Thẻ: Jenkins gitlab Pgyer fastlane iOS

Đăng vào ngày 9 tháng 6 lúc 00:40