1 Jenkins安裝
1.1 JDK安裝
略。
1.2 Jenkins安裝
1.2.1 下載安裝包
1.2.2 編寫運(yùn)行腳本
#! /bin/sh
# chkconfig: 2345 10 90
# description: jenkins ....
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
# prefix=/Users/madp/Public/env/jenkins
# @auth: Joe
JENKINS_ROOT=/Users/teana/Public/self/env/jenkins
JENKINSFILENAME=jenkins.war
#停止方法
stop(){
echo "Stoping $JENKINSFILENAME "
ps -ef|grep $JENKINSFILENAME |awk '{print $2}'|while read pid
do
kill -9 $pid
echo " $pid kill"
done
}
mecho(){
words="啟,動(dòng),中,.,.,."
array=(`echo $words | tr ',' ' '`)
for word in ${array[@]}
do
echo "$word\c"
sleep 1
done
}
case "$1" in
start)
echo "Starting $JENKINSFILENAME "
nohup java -jar $JENKINS_ROOT/$JENKINSFILENAME --httpPort=8080 >> $JENKINS_ROOT/jenkins.log 2>&1 &
mecho
open 'http://127.0.0.1:8080'
tail -f $JENKINS_ROOT/jenkins.log
;;
stop)
stop
;;
restart)
stop
start
;;
status)
ps -ef|grep $JENKINSFILENAME
;;
*)
printf 'Usage: %s {start|stop|restart|status}\n' "$prog"
exit 1
;;
Esac
注意事項(xiàng):
注意替換[JENKINS_ROOT]****變量,(即:****jenkins.war****的位置)
啟動(dòng):sh jenkins.sh start
停止:sh jenkins.sh stop
重啟:sh jenkins.sh restart
檢查:sh jenkins.sh status
2Android配置
2.1 工具設(shè)置
- 點(diǎn)擊Manage Jenkins,點(diǎn)擊第四項(xiàng)Global Tool Configuration,本次項(xiàng)目這個(gè)里面會(huì)配置JDK和GRADLE。

- 點(diǎn)擊新增JDK,將項(xiàng)目的jdk版本環(huán)境配置。本次使用的是jdk1.8.0,別名可以自己取,自己能區(qū)別就行。

- 點(diǎn)擊新增Gragle,這里一定要和工程的gradle 一樣。(后面gradle有個(gè)選項(xiàng)會(huì)使用到,但是本次項(xiàng)目我是上傳了.gradle文件,正常是要忽略的,所以沒有用到這個(gè);如果項(xiàng)目沒有上傳.gradle文件,這里就得配置和項(xiàng)目一樣的.gradle )

- 點(diǎn)擊保存,重啟jenkins 生效
2.2 環(huán)境配置
- 點(diǎn)擊Manage Jenkins,點(diǎn)擊第一項(xiàng)Configure System,本次項(xiàng)目這個(gè)里面會(huì)配置ANDROID_HOME, ANDROID_NDK_HOME, GRADLE_USER_HOME.。

- 找到全局屬性,點(diǎn)擊Environment variables,會(huì)彈出新增按鈕,點(diǎn)擊新增按鈕,配置3個(gè)鍵值對(duì)。配置SDK,NDK(本次項(xiàng)目有使用到NDK,項(xiàng)目沒有用到可以不配),Gradle(這個(gè)必須配置,否則打包會(huì)報(bào)資源錯(cuò)誤);鍵名分別是ANDROID_HOME, ANDROID_NDK_HOME, GRADLE_USER_HOME.

- 點(diǎn)擊保存,重啟jenkins 生效
2.3 工程構(gòu)建
- 在配置好工具和環(huán)境后,我們現(xiàn)在就可以來構(gòu)建工程了。

- 選擇自由風(fēng)格的項(xiàng)目。

- 配置工作空間使其拉取項(xiàng)目到指定文件夾。如果這里不配置的話,會(huì)默認(rèn)拉取到j(luò)enkins 的workspace文件夾里面。


- 配置svn項(xiàng)目地址,注意:Local module directory面有個(gè)點(diǎn)。沒有點(diǎn)會(huì)拉取到上一次目錄文件夾,導(dǎo)致無法gradle 。

- 打包環(huán)節(jié):點(diǎn)擊增加步驟,選擇Invoke Gradle script

- 本次項(xiàng)目我上傳了gradlew文件,所以可以直接選擇Use Gradle Wrapper,勾選Make gradlew executable.
Tasks 操作:
app:clean
app:assemble
- 如果項(xiàng)目沒有上傳gradlew,可以使用之前工具配置的gradle,注意要和項(xiàng)目一致,最好直接從項(xiàng)目gradle文件夾拷貝出來。

- 點(diǎn)擊save,我們可以來到主頁,點(diǎn)擊Build Now,首次build 會(huì)拉取項(xiàng)目,時(shí)間較長(zhǎng)。

- 成功之后,apk文件在apk\app\build\outputs\apk里面打的debug 和release里面(具體看工程怎么配置的)。
2.4 配置自定義參數(shù)
- 目前設(shè)置了一個(gè)版本參數(shù),看自己需要什么,自己進(jìn)行配置

- 配置里面的下面點(diǎn)Advanced…展開Pass all job parameters as Project properties還需要勾選,否則不生效,如圖:

- 保存之后可以看到主界面出現(xiàn)了你的配置

2.5 自動(dòng)上傳蒲公英并生成二維碼
- 安裝upload to pyger,在Post-build Actions里面選擇Upload to pgyer with apiV2,填寫api_key,api_key 獲取key地址:https://www.pgyer.com/doc/api。

- 設(shè)置顯示二維碼

- 二維碼默認(rèn)展示位文本,設(shè)置如下可顯示圖片:


- 點(diǎn)擊save .成功展示

2.6 使用痛點(diǎn)
- 打包成功,上傳蒲公英失?。?/li>

解決方法:打包目錄文件夾設(shè)置準(zhǔn)確,看Android gradle配置,apk名字要相同。
image.png
- 打包成功,上傳蒲公英失敗:

解決辦法:選擇api2,api1不行
image.png
- 項(xiàng)目編譯打包失?。哼@個(gè)是遇到最多的坑。

解決方法:
gradle 地址配置錯(cuò)誤。
gradle 全局環(huán)境沒有配置,詳情見3.7.2環(huán)境配置中的GRADLE_USER_HOME。
gradle 與項(xiàng)目不一致。
網(wǎng)絡(luò)錯(cuò)誤。
目標(biāo)文件目錄包含中文
有時(shí)目標(biāo)文件夾目錄過長(zhǎng)也會(huì)引發(fā)這個(gè)問題
- 編譯出來的項(xiàng)目沒有二維碼,只顯示標(biāo)簽:
解決方法:只需要在Jenkins系統(tǒng)設(shè)置里Configure Global Security的標(biāo)記格式器由Plain text改為Safe HTML把顯示修改下即可,切記:重啟jenkins.
- 二維碼圖片顯示空白,沒有邊框,沒有圖片
解決方法:原因:【Upload to pgyer with apiV2】的選項(xiàng)默認(rèn)在【Set build desription】之后了,把這兩選項(xiàng)順序?qū)Q一下即可,因?yàn)椤維et build desription里的appQRCodeURL值依賴【Upload to pgyer with apiV2】的執(zhí)行結(jié)果。
- 網(wǎng)絡(luò)問題編譯失敗,重新編譯即可

- 執(zhí)行打包命令失敗

解決方法:Local module directory面有個(gè)點(diǎn)。詳情見2.3.
3iOS配置
iOS基于Jenkins的自動(dòng)打包配置。
3.1必要插件下載
3.1.1證書管理插件
Keychains and Provisioning Profiles Management
3.1.2 Xcode構(gòu)建插件
Xcode integration
3.1.3插件下載管理圖示
進(jìn)入Jenkins主界面:打開Manage Jenkins -> Manage Plugins,搜索上述兩個(gè)插件下載安裝即可。


3.2系統(tǒng)及插件配置
3.2.1系統(tǒng)配置
系統(tǒng)需要配置開發(fā)者信息:開發(fā)者團(tuán)隊(duì)名稱和開發(fā)者團(tuán)隊(duì)ID(具體名稱和ID見蘋果開發(fā)者網(wǎng)站內(nèi)開發(fā)者信息查看)。
管理Jenkins -> Configure System -> Xcode Builder。


3.2.2鑰匙串插件配置(Keychains and Provisioning Profiles Management****)
-
此處需要上傳兩個(gè)文件
login.keychain文件,為了獲取鑰匙串的讀取權(quán)限;
Provisioning Profiles文件,為了讀取生成ipa包的描述文件;
設(shè)置路徑:描述文件的讀取路徑
-
生成login.keychain文件:
- 在終端輸入:cd ~/Library/Keychains,鍵入 ls命令,如下圖

- 如何找到login.keychain文件

注意:macOS10.12以及以后的系統(tǒng)生成的是login.keychain-db文件,拷貝出來,去掉-db即可。
- 開始配置


Provisioning Profiles Directory Path 這 項(xiàng) 填寫 /Users/用戶名/Library/ MobileDevice/Provisioning Profiles
自此系統(tǒng)和鑰匙串插件已配置好,開始構(gòu)建iOS自動(dòng)打包工程。
3.3工程構(gòu)建
3.3.1創(chuàng)建工程
- 沒有工程情況

- 存在工程情況

- 新建工程

3.3.2配置工程
- General

- 源碼管理
源碼管理一般有本地源碼、git、SVN三種選擇
以本項(xiàng)目為例,選擇SVN

添加SVN賬號(hào)


- 構(gòu)建觸發(fā)器
出發(fā)器可以定制Jenkins定時(shí)為項(xiàng)目自動(dòng)打包,本項(xiàng)目需求是按需手動(dòng)選擇打包,此處可以不設(shè)置觸發(fā)器內(nèi)容。

- 構(gòu)建環(huán)境
環(huán)境構(gòu)建主要涉及兩個(gè)步驟:
- 配置 Keychains and Code Signing Identities,主要是用于Jenkins打包時(shí),獲取訪問鑰匙串的權(quán)限,拿到相應(yīng)打包的證書;

注意:Variables不用手動(dòng)輸入,選擇好證書之后,保存,再次打開時(shí)會(huì)自動(dòng)填充。
- 配置Mobile Provisioning Profiles,主要是配置正在打包所需的描述文件。

注意:Variables不用手動(dòng)輸入,選擇好證書之后,保存,再次打開時(shí)會(huì)自動(dòng)填充。
- 構(gòu)建
5.1、增加構(gòu)建步驟,選擇Xcode

5.2、配置General build settings
下列選項(xiàng)必須配置,其他選項(xiàng)默認(rèn)即可。
5.2.1、選擇Development Team

5.2.2、設(shè)置Configuration:確定打出包的類型:Release或Debug
5.2.3、填寫Xcode Schema File:一般是工程名稱(TARGETS下所需要打包的工程名)

5.2.4、選擇Pack application, build and sign .ipa?
5.2.4.1、配置Export method:即導(dǎo)出包方式,development、ad-hoc、enterprise、或者app-store
5.2.4.2、填寫.ipa filename pattern:即導(dǎo)出.ipa包的名稱,如XXX.ipa

5.3、配置Code signing & OS X keychain options
5.3.1、選擇Manual signing選項(xiàng),填寫Provisioning Profiles中的Bundle ID和Provisioning profile UUID。

那么這兩個(gè)值如何設(shè)置呢?請(qǐng)看下列步驟:
正常使用Xcode打包時(shí),生成一個(gè)打包文件,里面包含:DistributionSummary.plist、ExportOptions.plist、Packaging.log和XXXXX.ipa。
此時(shí)打開ExportOptions.plist,點(diǎn)開provisioningProfiles選項(xiàng),里面分別就是Bundle ID和Provisioning profile UUID。

5.3.2、選擇Unlock Keychain?選項(xiàng),填寫鑰匙串訪問路徑及登錄密碼

5.4、配置Advanced Xcode build options
5.4.1、勾選Clean test reports?
5.4.2、填寫Xcode Workspace File(針對(duì)使用了pod導(dǎo)入三方庫的工程)或者Xcode Project Directory(針對(duì)普通工程,即未使用pod導(dǎo)入三方庫的工程)路徑,一般是Jenkins分配的工作空間路徑:如${WORKSPACE}/XXXXX/XXXXX,XXXXX是工程的名稱,根據(jù)具體工具替換即可。
5.4.3、填寫B(tài)uild output directory路徑,即打完包后.ipa導(dǎo)出路徑,一般默認(rèn)Jenkins分配的工作空間路徑:${WORKSPACE}/build

- 保存
保存后,自動(dòng)返回項(xiàng)目首頁。

3.3.3 build
3.3.2步驟配置了一系列參數(shù),總算撥云見日,到了該收獲的時(shí)刻,開始build。點(diǎn)擊Build Now,開始build,等待結(jié)果。

打包成功后的.ipa在哪里呢?請(qǐng)看圖示:

注意:.jenkins是隱藏文件,記得打開查看隱藏文件權(quán)限。
恭喜你,到此Jenkins對(duì)iOS打包就此結(jié)束。
3.4自動(dòng)上傳fir移動(dòng)發(fā)布平臺(tái)
上述步驟結(jié)束之后,可以獲取.ipa包,可以一般需要將.ipa包發(fā)布到應(yīng)用發(fā)布平臺(tái),供測(cè)試人員下載測(cè)試。Jenkins也提供了自動(dòng)上傳至蒲公英、fir等平臺(tái)的功能,只需到相關(guān)平臺(tái)下載插件,配置好相關(guān)參數(shù)即可。下列以fir平臺(tái)為例,演示Jenkins如何將生成的.ipa包發(fā)布到fir平臺(tái)上.
3.4.1下載fir插件
下載地址及使用方法見:http://blog.fir.im/jenkins/
3.4.2上傳fir插件到Jenkins插件平臺(tái)


3.4.3配置自動(dòng)上傳fir平臺(tái)
插件上傳成功之后,再次打開需要打包的項(xiàng)目頁面:Jenkins -> 項(xiàng)目 -> 配置 -> 構(gòu)建后操作。




完成build之后,fir平臺(tái)上會(huì)有新的版本上傳。
上傳到fir平臺(tái)的打包流程到此結(jié)束。

