一、引言
Jenkins 是一個(gè)用于自動(dòng)化構(gòu)建被环、測試和部署軟件項(xiàng)目的開源持續(xù)集成和持續(xù)交付(CI/CD)工具真竖。它可以幫助開發(fā)團(tuán)隊(duì)更快地構(gòu)建脐雪、測試和交付他們的應(yīng)用程序。
Jenkins 可以自動(dòng)化執(zhí)行打包操作恢共,使開發(fā)團(tuán)隊(duì)能夠在代碼更改后立即構(gòu)建軟件战秋,并生成可部署的軟件包。Jenkins 的構(gòu)建任務(wù)可以配置為在特定觸發(fā)條件下運(yùn)行讨韭,例如代碼提交到版本控制倉庫或定期計(jì)劃脂信。
Jenkins提供了一個(gè)可擴(kuò)展的平臺(tái), 提供了大量的插件透硝,可以擴(kuò)展其功能狰闪,以滿足各種項(xiàng)目的需求。你可以使用插件來集成不同的構(gòu)建工具蹬铺、部署到不同的目標(biāo)平臺(tái),或執(zhí)行各種自定義任務(wù)秉撇。
Jenkins 通常與持續(xù)集成和持續(xù)交付(CI/CD)工作流程一起使用甜攀。它可以作為 CI/CD 管道的一部分,在軟件開發(fā)周期中自動(dòng)化構(gòu)建和部署代碼琐馆。
總之规阀,Jenkins 的打包功能是其持續(xù)集成和持續(xù)交付工作流程的關(guān)鍵組成部分之一,它可以幫助開發(fā)團(tuán)隊(duì)更輕松地構(gòu)建瘦麸、測試和交付高質(zhì)量的軟件谁撼。通過配置適當(dāng)?shù)臉?gòu)建任務(wù),你可以根據(jù)項(xiàng)目的需求自定義打包過程滋饲。
二厉碟、安裝
Jenkins安裝包可以到官網(wǎng)下載(https://www.jenkins.io/download/),有 war 包和msi包屠缭,這邊建議下載 msi 安裝包箍鼓,這樣的話不需要本地配置 Tomcat,直接將 Jenkins 當(dāng)作 Windows 的服務(wù)啟動(dòng)呵曹,每次開啟會(huì)自動(dòng)運(yùn)行款咖。
Jenkins目前需要JDK 11以上版本,請先確認(rèn)jdk版本是否符合要求奄喂。
msi包雙擊開始進(jìn)行安裝铐殃。按照提示一步一步操作即可安裝完成。
1.選擇安裝路徑
2.端口修改
安裝時(shí)可在這邊修改端口跨新,默認(rèn)是8080富腊。點(diǎn)擊Test Port按鈕可以測試當(dāng)前端口是否可用。
3.jdk地址配置
在這邊輸入jdk的目錄域帐,需要Java 11,17或21版本蟹肘。
4.安裝完成后可在瀏覽器輸入http://localhost:8080/ 進(jìn)行訪問词疼。
第一次會(huì)彈出下面窗口,按提示去獲取密碼填入帘腹,繼續(xù)下一步贰盗。
接下來就是設(shè)置 Jenkins 的賬號(hào)和密碼,都是常規(guī)操作阳欲。最后的安裝插件步驟選擇安裝推薦的插件即可舵盈!安裝完成通過自己設(shè)置的賬號(hào)密碼即可登錄 Jenkins。
三球化、修改JENKINS_HOME和端口
1.修改JENKINS_HOME
jenkins默認(rèn)的主目錄是C:\ProgramData\Jenkins\.jenkins秽晚,后續(xù)創(chuàng)建項(xiàng)目后工作空間會(huì)建在該目錄下,避免c盤存儲(chǔ)空間占用過多筒愚,可以修改主目錄地址赴蝇。
在jenkins安裝路徑(上面安裝步驟有設(shè)置安裝路徑)里找到j(luò)enkins.xml,打開巢掺,修改<env name="JENKINS_HOME" value="%ProgramData%\Jenkins\.jenkins"/>里的value值句伶,關(guān)閉jenkins服務(wù)避免文件占用,將原目錄的.jenkins文件夾移動(dòng)到新目錄后重啟服務(wù)陆淀。
2.修改JENKINS端口
打開jenkins.xml考余,找到httpPort=8080進(jìn)行修改,重啟服務(wù)轧苫。
四楚堤、配置全局屬性
在 [Dashboard]> [Manage Jenkins] > [System]頁面 【全局屬性】下選中Environment variables,新增全局變量ANDROID_HOME和GRADLE_USER_HMOE
在 [Dashboard]> [Manage Jenkins] > [Tools]頁面 【JDK安裝】新增JDK含懊;【Git installations】下Add Git身冬。如下圖
git.exe目錄有在系統(tǒng)path環(huán)境變量添加了,這邊填git即可岔乔,否則填完整路徑吏恭。
五、配置項(xiàng)目
1.新建item
-
點(diǎn)擊【新建item】重罪,輸入任務(wù)的名稱樱哼,選中【Freestyle project】,點(diǎn)擊確定完成創(chuàng)建剿配。
2.配置參數(shù)(參數(shù)化構(gòu)建)
-
如果構(gòu)建時(shí)需要傳參搅幅,選中【This project is parameterized】后添加參數(shù)。
下面截圖里增加了個(gè)參數(shù) BUILD_TYPE呼胚,是個(gè)選擇類型參數(shù)茄唐,增加了Release和Debug兩個(gè)選項(xiàng)。添加其他類型的參數(shù)大家可以自己試試。
-
如果需要增加個(gè)分支參數(shù)沪编,可以選擇項(xiàng)目的分支呼盆,需要安裝插件Git Parameter,
在 [Dashboard]> [Manage Jenkins] > [Plugins]頁面 搜索插件名稱蚁廓,選中并點(diǎn)擊安裝访圃。
安裝完成后回到項(xiàng)目配置頁,添加參數(shù)相嵌,選中“Git參數(shù)”腿时,填寫名稱、描述和默認(rèn)值饭宾,選擇參數(shù)類型批糟,這邊選擇“分支”,按需求也可以選標(biāo)簽等其他選項(xiàng)看铆。點(diǎn)擊高級(jí) 按鈕可去配置排序方式和已選值等徽鼎。
3.源碼管理- 添加git倉庫
-
在【源碼管理】下選中 Git,在Repository URL 填入倉庫地址弹惦,在Credentials下添加憑據(jù)否淤,如果倉庫是使用SSH的話添加ssh私鑰,如果是http的話添加用戶名密碼肤频。
我這邊采用ssh方式叹括,添加方式如下面截圖算墨。
憑據(jù)添加完成后宵荒,Credentials選中剛剛添加的憑據(jù),沒有紅色報(bào)錯(cuò)說明我們配置正確净嘀。
-
分支配置报咳,在Branches to build 指定分支使用 ${BRANCH},代表使用上面我們配置的BRANCH參數(shù)的值作為我們的構(gòu)建分支挖藏。
注意:Jenkins clone代碼默認(rèn)超時(shí)時(shí)間是10分鐘暑刃,可以在Additional Behaviours下新增Advanced clone behaviours修改拉取代碼的超時(shí)時(shí)間,避免代碼拉取失敗膜眠。也可以在這邊勾選淺克隆 配置淺克隆深度加快拉取代碼速度岩臣。
4. 構(gòu)建步驟
-
在【Build Steps】增加構(gòu)建步驟 Invoke Gradle script
選中Use Gradle Wrapper,Tasks填寫 clean assemble${BUILD_TYPE} --stacktrace 宵膨,BUILD_TYPE就是我們上面配置的參數(shù)架谎,構(gòu)建時(shí)會(huì)用我們選擇的值去替換。
如果想用配置的參數(shù)值替換項(xiàng)目里gradle.properties里的同名key值辟躏,可以在高級(jí)下勾選“Pass all job parameters as Project properties”谷扣。
5. 構(gòu)建后操作
-
在【構(gòu)建后操作】增加構(gòu)建后操作步驟Archive the artifacts,可以存檔構(gòu)建產(chǎn)物捎琐,這邊存檔生成的apk会涎,具體存檔什么文件可以自己按需要填寫裹匙,逗號(hào)隔開。
六末秃、開始構(gòu)建
點(diǎn)擊Build with Parameters概页,選擇填入相應(yīng)參數(shù),點(diǎn)擊Build即可開始構(gòu)建蛔溃。
注意:安卓項(xiàng)目的local.properties一般沒有提交到遠(yuǎn)程倉庫绰沥,需要手動(dòng)在該項(xiàng)目的工作空間目錄下加上該文件
七、其他功能
1. 構(gòu)建觸發(fā)器
可以在項(xiàng)目配置里【構(gòu)建觸發(fā)器】下選中Build periodically進(jìn)行周期性構(gòu)建贺待,日程表填入相應(yīng)表達(dá)式即可按規(guī)定的時(shí)間觸發(fā)構(gòu)建徽曲。(點(diǎn)擊旁邊問號(hào)可看相應(yīng)的語法規(guī)則)
構(gòu)建觸發(fā)器也可以設(shè)置提交代碼后自動(dòng)觸發(fā)構(gòu)建等功能,這些大家可以自行嘗試下麸塞。
2. 修改build name
安裝插件[Build Name and Description Setter]秃臣,安裝好了以后在項(xiàng)目配置的【構(gòu)建環(huán)境】下增加了選項(xiàng) Set Build Name,選中該選項(xiàng)哪工,可進(jìn)行填寫修改構(gòu)建名稱奥此。
3.增加構(gòu)建步驟
在項(xiàng)目配置的 【Build Steps】下點(diǎn)擊 “增加構(gòu)建步驟”按鈕,可以選擇執(zhí)行批處理或shell腳本等雁比,增加的構(gòu)建步驟可拖動(dòng)位置改變執(zhí)行順序稚虎。
shell中引用全局變量 :
直接使用$標(biāo)志:如$BUILD_STATUS
使用${}標(biāo)志:如${BUILD_STATUS}
bat批處理中引用:
% BUILD_STATUS %
4.構(gòu)建后push代碼
在項(xiàng)目配置的 【構(gòu)建后操作】下點(diǎn)擊 “增加構(gòu)建后操作步驟”按鈕,選擇Git Publisher偎捎,可以進(jìn)行push代碼蠢终、標(biāo)簽等操作。
5.Jenkins 重新設(shè)置構(gòu)建號(hào)
在 Manage Jenkins ----Script Console 中執(zhí)行如下腳本:
item = Jenkins.instance.getItemByFullName("job_name")
item.builds.each(){build->build.delete()}
Jenkins.instance.getItemByFullName("job_name").updateNextBuildNumber(想設(shè)置的起始號(hào) 如 1)
八茴她、相關(guān)問題
1. 分支名中文亂碼寻拂,或控制臺(tái)輸出日志里的中文亂碼
在jenkins安裝目錄下的jenkins.xml,增加一行:
<env name="JAVA_TOOL_OPTIONS" value="-Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8"/>
2. Git Host Key Verification有問題的話可以到安全配置里修改試試丈牢。
3. bat批處理日志亂碼
通過chcp 65001將控制臺(tái)編碼設(shè)置為UTF-8侄榴。
@echo on
chcp 65001
xcopy /E /C /I /Y /S test/* \\10.xx.0.xx\軟件\Product\test\
4. 執(zhí)行shell腳本日志亂碼
腳本開頭加 export LANG="en_US.UTF-8"
export LANG="en_US.UTF-8"
if $isMonkey
then
for file in hmi_module_main/build/outputs/apk/**/*.apk
do
adb install $file
done
adb shell am start-foreground-service -a com.autonavi.amapauto.autohelper.service.monkey -e act start -e app com.autonavi.amapauto -e runTime 120 -e netMock true -e screenshotNum 100
else
echo "skip Monkey test..."
fi
5.shell腳本git push 提示Permission denied (publickey).
ssh私鑰文件路徑設(shè)置給GIT_SSH_COMMAND變量
export GIT_SSH_COMMAND="ssh -i C:/Users/lll/.ssh/id_rsa"
git push origin HEAD:XXX
6.bat腳本或shell腳本里面用到的命令(比如git相种、adb等)找不到或執(zhí)行不了
要確保命令所在路徑有加到系統(tǒng)的環(huán)境變量path里患亿,加到用戶環(huán)境變量是不行的商乎。