1. 安裝JAVA環(huán)境
Jenkins 是一個用Java編寫的持續(xù)集成工具,依賴于Java,所以在安裝Jenkins前,需要先安裝Java環(huán)境。
首先,檢查電腦是否已經(jīng)安裝有環(huán)境。
在終端輸入命令:java -version。
如果已經(jīng)安裝,則會打印java版本。
否則,會說沒有安裝
如果沒有安裝Java環(huán)境的話,需要去官網(wǎng)下載JAVA JDK(注意是JDK,不是JRE)。在下載前注意勾選上方的 Accept License Agreement。否則,無法下載。

2. 安裝Jenkins
1. 使用Homebrew的命令行進行安裝
在終端輸入命令:
brew install jenkins如果沒有安裝Homebrew,則需要先安裝。
【Homebrew 安裝方法】:前往Homebrew官網(wǎng),直接拷貝官網(wǎng)頁面上的命令,在終端運行即可。
2. 啟動jenkins,等待其安裝完畢。
在終端輸入命令:jenkins
3. 瀏覽器輸入http://localhost:8080并進行訪問。
4. 安裝插件
Xcode integration
GIT plugin
GitLab Plugin
Gitlab Hook Plugin
Keychains and Provisioning Profiles Management
- 首頁的左側(cè),點擊系統(tǒng)管理
- 在系統(tǒng)管理界面找到插件管理
- 在管理插件界面,切換到可選插件選項卡,在右上角的過濾搜索里面輸入我們要安裝的插件名稱,回車。找到我們需要的插件,打勾,點擊直接安裝。
3. 項目新建和設(shè)置
- 點擊首頁的創(chuàng)建一個新任務(wù)
- 選擇構(gòu)建一個自由風格的軟件項目。PS:這里的任務(wù)名稱還是寫我們的APP項目名比較好。后面的配置會用到這個任務(wù)名稱。

4. 配置項目
1. General 參數(shù)。
切換到General選項。勾選“丟棄舊的構(gòu)建”。
設(shè)置包(即構(gòu)建)的保留天數(shù),以及最大保留個數(shù)。這個主要按照需要做設(shè)置
“丟棄舊的構(gòu)建”不勾選也可以。

2. 源碼管理
切換到源碼管理選項。
輸入我們要打包的項目的Git地址。最好SSH的。
填寫我們要打包的分支(branch)。
點擊Add按鈕,Add按鈕會彈出一個按鈕Jenkins,點擊它,進行添加SSH key

3. 構(gòu)建觸發(fā)器
切換到“構(gòu)建觸發(fā)器”選項。
這里只設(shè)置最常用的Poll SCM。切換到“構(gòu)建觸發(fā)器”,勾選“Poll SCM”。
H/20 * * * *表示:每20分支構(gòu)建一次。
4. 構(gòu)建環(huán)境

5. Excute shell
切換到“構(gòu)建”選項
勾選“增加構(gòu)建步驟”里面的Excute shell。
添加命令到Comman上。
打包
#!/bin/bash -l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
pod install --verbose --no-repo-update
# 打包環(huán)境
#config="Release"
config="Debug"
#構(gòu)建
#!/bin/bash -l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
pod install --verbose --no-repo-update
# 打包環(huán)境 (核心)
#config="Release"
config="Debug"
#構(gòu)建
xcodebuild -archivePath "/Users/(用戶名)/.jenkins/workspace/iOS-lighthouse-ci_beta/build/Debug-iphoneos/(項目名稱).xcarchive" -workspace (項目名稱).xcworkspace -sdk iphoneos -scheme "(項目名稱)" -configuration ${config} archive
xcodebuild -exportArchive -archivePath "/Users/(用戶名)/.jenkins/workspace/iOS-lighthouse-ci_beta/build/Debug-iphoneos/(項目名稱).xcarchive" -configuration ${config} -exportPath "/Users/(用戶名)/.jenkins/workspace/iOS-lighthouse-ci_beta/build/(項目名稱)_debug" -exportOptionsPlist '/Users/(用戶名)/.jenkins/workspace/iOS-lighthouse-ci_beta/build/ExportOptions.plist' -allowProvisioningUpdates
上傳至蒲公英平臺
# 通過api上傳到蒲公英當中
echo "===上傳至蒲公英平臺==="
# 蒲公英userkey
pgyerUserKey="userkey"
# 蒲公英apiKey
pgyerApiKey="apiKey"
#指定ipa輸出地址
project_path=$(pwd)
#指定項目名
project_name="項目名"
#描述信息
des=`cat ci-beta-description.txt`
echo "des:+$des"
packageTime="打包時間:【`date \"+%Y-%m-%d %H:%M:%S\"`】---"
echo $packageTime
ipa_path="${project_path}/build/(項目名稱)_debug"
if [ -e ${ipa_path}/${project_name}.ipa ]; then
RESULT=$(curl -F "_api_key=${pgyerApiKey}" \
-F "file=@${ipa_path}/${project_name}.ipa" \
-F "buildInstallType=2" \
-F "buildPassword=1230" \
-F "buildUpdateDescription=${packageTime}${des}" \
https://www.pgyer.com/apiv2/app/upload)
# echo ${RESULT}
if [ "${RESULT}" ]; then
echo "===完成蒲公英平臺上傳==="
else
echo "===上傳蒲公英平臺失敗==="
fi
# open ${ipa_path}
else
echo "===上傳蒲公英平臺失敗==="
fi
5. Keychains and Provisioning Profiles Management
login.keychain 文件路徑 /Users/(用戶名)/Library/Keychains
問題
error: Couldn't load -exportOptionsPlist: The file “ExportOptions.plist” couldn’t be opened because there is no such file.
Error Domain=NSCocoaErrorDomain Code=260 "The file “ExportOptions.plist” couldn’t be opened because there is no such file." UserInfo={NSFilePath=/Users/ageren/.jenkins/workspace/Vol_Chat/build/ExportOptions.plist, NSUnderlyingError=0x7fb479178710 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}
解決
在/Users/(用戶名)/.jenkins/workspace/(項目名稱)/build/路徑新建ExportOptions.plist文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>compileBitcode</key>
<false/>
<key>method</key>
<string>development</string>
<key>provisioningProfiles</key>
<dict>
<key>(APP bundle ID)</key>
<string>(描述文件名稱)</string>
</dict>
<key>signingCertificate</key>
<string>iPhone Developer</string>
<key>signingStyle</key>
<string>manual</string>
<key>stripSwiftSymbols</key>
<true/>
<key>teamID</key>
<string>(組織編號)</string>
<key>thinning</key>
<string><none></string>
</dict>
</plist>