公司最近出了個(gè)打包需求,完成之后記錄一下,避免忘記
1、Jenkins登陸用戶擁有不同權(quán)限,用戶分為「管理員」、「項(xiàng)目管理員」和「項(xiàng)目測(cè)試」。
(1)「管理員」即Jenkins管理員賬戶;
(2)「項(xiàng)目管理員」可以增刪查改負(fù)責(zé)的項(xiàng)目;
(3)「項(xiàng)目測(cè)試」可以下載安裝負(fù)責(zé)項(xiàng)目;
2、每一個(gè)項(xiàng)目在Jenkins上分為2個(gè)工程,一個(gè)工程負(fù)責(zé)打包,另一個(gè)工程只顯示下載地址
(1)打包工程可以選擇打包需要的參數(shù),如:版本號(hào),構(gòu)建版本號(hào),內(nèi)外網(wǎng)環(huán)境
(2)下載工程在打包完成后發(fā)送釘釘通知
前提條件
1、Jenkins使用中文版,英文版請(qǐng)獨(dú)立翻譯或依據(jù)圖標(biāo)辨認(rèn);
2、以下操作默認(rèn)登陸用戶為Jenkins管理員,切換用戶時(shí)會(huì)有特殊說(shuō)明;
3、Jenkins插件手動(dòng)下載地址:http://mirror.xmission.com/jenkins/plugins/
4、會(huì)shell,python,ruby腳本語(yǔ)言
用戶權(quán)限
用戶權(quán)限的首要條件,就是用戶,所以我們先創(chuàng)建2個(gè)用戶?!窺ALeader」和「QAUser」,其中「QALeader」當(dāng)作「項(xiàng)目管理員」,「QAUser」當(dāng)作「項(xiàng)目測(cè)試」。
在Jenkins主頁(yè)的左側(cè)選擇「系統(tǒng)管理」->「管理用戶」->「新建用戶」,根據(jù)要求創(chuàng)建用戶。
注意:用戶ID會(huì)將英文全部按照小寫處理。





由于Jenkins本身不帶有用戶權(quán)限功能,所以我們將使用Jenkins插件「Role-based Authorization Strategy」完成用戶權(quán)限功能。選擇「系統(tǒng)管理」->「插件管理」,標(biāo)簽頁(yè)選擇「可選插件」,右上角「過(guò)濾」中輸入插件名或關(guān)鍵字。安裝完成后重啟Jenkins。
Jenkins重啟:在瀏覽器地址欄輸入命令。記得修改成自己的地址和端口號(hào)
直接安裝使用命令
localhost:8080/restart
依賴tomcat使用命令
localhost:8080/jenkins/restart


Jenkins重啟后,插件已經(jīng)安裝好了。但此時(shí)插件還沒有生效,無(wú)法使用,需要再配置一些地方。
進(jìn)入「系統(tǒng)管理」->「全局安全配置」,修改「訪問(wèn)控制」和「代理」


此時(shí),插件生效,可以在「系統(tǒng)管理」中看到新的功能「Manage and Assign Roles」

該功能中包含3個(gè)標(biāo)簽,分別是「Manage Roles」「Assign Roles」「Role Strategy Macros」。我們會(huì)用到前兩個(gè),第三個(gè)沒有用到,不在此贅述。
Manage Roles
權(quán)限類型。可以設(shè)置不同權(quán)限類型,使用其中「Global roles」和「Project roles」,將鼠標(biāo)停在每一項(xiàng)中會(huì)有英文提示

「Global roles」中我們關(guān)注「Overall」、「任務(wù)」和「Run」。插件會(huì)默認(rèn)記錄一個(gè)admin,
擁有所有權(quán)限,一般,這個(gè)權(quán)限我們留給Jenkins管理員。
在「Role to add」輸入想要的Role,添加到Global roles,比如「subAdmin」和「QA」

subAdmin擁有增刪查改項(xiàng)目的權(quán)限,QA擁有查看項(xiàng)目的權(quán)限,所以我們給subAdmin和QA分別賦予權(quán)限。最終權(quán)限為


「Project roles」我們關(guān)注「任務(wù)」和「Run」。其中「Pattern」是正則表達(dá),通過(guò)「Pattern」篩選項(xiàng)目。根據(jù)項(xiàng)目需要自行創(chuàng)建。比如「TestProject.*」和「TestProjectipa.*」。
「TestProject.*」意思是獲得該項(xiàng)目權(quán)限的用戶只可以在首頁(yè)可以看到「TestProject」開頭的項(xiàng)目。如:TestProject12345678900965
「TestProjectipa.*」意思是獲得該項(xiàng)目的權(quán)限的用戶只可以可以在首頁(yè)看到「TestProjectipa」開頭的項(xiàng)目。如:TestProjectipaiuhygfdsa

Assign Roles
用戶賦權(quán)。將設(shè)置的不同權(quán)限類型賦予用戶。之后的用戶登陸后只能看到相應(yīng)權(quán)限的按鈕。
為了方便直觀,我們直接將之前創(chuàng)建的「QALeader」和「QAUser」賦予權(quán)限。同時(shí)創(chuàng)建2個(gè)項(xiàng)目,分別叫做「TestProject」和「TestProjectipa」。


項(xiàng)目創(chuàng)建
按照之前的規(guī)定,創(chuàng)建2個(gè)自由風(fēng)格項(xiàng)目,分別是「TestProject」和「TestProjectipa」。
在這里就可以使用「subAdmin」類型創(chuàng)建,不再使用「admin」。
?點(diǎn)擊「新建項(xiàng)目」,輸入項(xiàng)目名,選擇「構(gòu)建一個(gè)自由風(fēng)格軟件項(xiàng)目」,點(diǎn)擊確定。

依次創(chuàng)建完成后「QALeader」可以看到2個(gè)項(xiàng)目,「QAUser」只能看到1個(gè)項(xiàng)目。


項(xiàng)目配置

項(xiàng)目配置中「源碼管理」選擇使用的管理工具,默認(rèn)提供了「Git」和「Subversion」(就是SVN)。根據(jù)不同需求自行解決。
「構(gòu)建」中,下拉選擇「Excute shell」,使用shell腳本打包。
shell腳本如下
#!/bin/sh
projectPath="下載的項(xiàng)目中xcodeproj絕對(duì)路徑"
ipaPath="保存ipa包的絕對(duì)路徑"
projectTarget="項(xiàng)目中需要構(gòu)建的TARGETS"
targetName="項(xiàng)目中需要構(gòu)建的TARGETS"
ipaName="不帶后綴的ipa包名字"
ipafile="${ipaPath}/${targetName}/${ipaName}.ipa
cd /Users/admin/.jenkins/workspace/slots_iOS
mkdir ipaFolder
cd ${ipaPath}
mkdir "$targetName"
cd "$projectPath"
releaseDir="build/Release-iphoneos"
appfile="${releaseDir}/${projectTarget}.app"
rm -rdf "$releaseDir"
xcodebuild -target "$projectTarget" -configuration Release -sdk iphoneos11.0 clean build
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "$appfile" -o "$ipafile"
rm -rdf "build
iphoneos11.0代表著打包使用的iOS SDK版本。自行查看Xcode中版本
xcodebuild -target "$projectTarget" -configuration Release -sdk iphoneos11.0 clean build
但是這樣不符合要求啊。無(wú)法配置版本、切換環(huán)境,總不能每次為了打不同環(huán)境的包提交一次代碼。
接下來(lái)我們追加版本和環(huán)境的配置。
勾選「參數(shù)化構(gòu)建過(guò)程」,根據(jù)需求選擇相應(yīng)參數(shù)。如:版本號(hào)選擇「字符參數(shù)」;服務(wù)器環(huán)境選擇「選項(xiàng)參數(shù)」。

其中「名稱」是展示到打包前會(huì)用,也是變量必填,需要在shell腳本中使用;「默認(rèn)值」額。。。就是默認(rèn)值,可不填;「描述」是該參數(shù)說(shuō)明,可不填。

此時(shí)再去打包,會(huì)發(fā)現(xiàn)原先的「Build」變成了「Build with Parameters」,點(diǎn)擊后沒有立即打包,而是進(jìn)入?yún)?shù)配置頁(yè)面。

外殼已經(jīng)完成,下面就開始實(shí)現(xiàn)方法。
首先是版本號(hào)的修改。修改思路:iOS項(xiàng)目中版本號(hào)是寫在info.plist文件中,info.plist文件實(shí)際上是一堆key-value組成,那么知道了版本號(hào)的key,對(duì)應(yīng)替換value就可以了。
版本號(hào)對(duì)應(yīng)的key是「CFBundleShortVersionString」,找到這一行的key,替換掉下一行value,重新保存文件;服務(wù)器環(huán)境也是類似思路,不在此單獨(dú)列出。腳本:
#!/usr/bin/python
# encoding: utf-8
import sys
version=sys.argv[1]
fo = open("Info.plist", "r+")
print "fileno is ",fo.fileno()
print "file name is ",fo.name
i=0
verionIndex=0
versionLine="<string>%s</string>\n"%version
flist=fo.readlines()
for line in flist:
??? i=i+1
??? if 'CFBundleShortVersionString' in line:
??? ??? verionIndex=i
print "flist is ",flist
flist[verionIndex]=versionLine
print "new flist is ",flist
fo=open("Info.plist", "w+")
fo.writelines(flist)
fo.close()
將該腳本放到一個(gè)不會(huì)變動(dòng)的文件夾中或直接放入代碼文件一同上傳,如果選擇放入本地文件夾,請(qǐng)先將文件復(fù)制到info.plist所在目錄。
在打包開始前,追加以下腳本以修改版本號(hào)
chmod 777 param.py
python param.py 版本號(hào)「名稱」
打包完成后,需要分發(fā)給「QAUser」,但是「QAUser」并不能查看到該項(xiàng)目,需要將ipa包導(dǎo)入另一個(gè)項(xiàng)目中,供「QAUser」使用。在「構(gòu)建后操作」選擇「Build other projects」,填寫項(xiàng)目名,選擇構(gòu)建時(shí)機(jī)。

啥時(shí)候有興趣了,啥時(shí)候繼續(xù)寫好了。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 1 全局配置 1.1 Keychain全局配置 1.1.1配置Provisioning Profiles 1、將/...
- 安裝Jenkins 安裝jenkins方法有兩種: 1,使用homebrew安裝. 2,直接下載安裝包安裝; 方法...
- 前言 眾所周知,現(xiàn)在App的競(jìng)爭(zhēng)已經(jīng)到了用戶體驗(yàn)為王,質(zhì)量為上的白熱化階段。用戶們都是很挑剔的。如果一個(gè)公司的推廣...
- 準(zhǔn)備工作 Jenkins的安裝 Jenkins依賴于Java環(huán)境,首先需安裝和配置Java環(huán)境(PS:在下載的時(shí)候...
- Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...