公司最近出了個打包需求哨鸭,完成之后記錄一下里逆,避免忘記
1、Jenkins登陸用戶擁有不同權(quán)限伐庭,用戶分為「管理員」粉渠、「項目管理員」和「項目測試」。
(1)「管理員」即Jenkins管理員賬戶圾另;
(2)「項目管理員」可以增刪查改負責(zé)的項目霸株;
(3)「項目測試」可以下載安裝負責(zé)項目;
2集乔、每一個項目在Jenkins上分為2個工程去件,一個工程負責(zé)打包,另一個工程只顯示下載地址
(1)打包工程可以選擇打包需要的參數(shù),如:版本號尤溜,構(gòu)建版本號倔叼,內(nèi)外網(wǎng)環(huán)境
(2)下載工程在打包完成后發(fā)送釘釘通知
前提條件
1、Jenkins使用中文版宫莱,英文版請獨立翻譯或依據(jù)圖標(biāo)辨認丈攒;
2、以下操作默認登陸用戶為Jenkins管理員授霸,切換用戶時會有特殊說明肥印;
3、Jenkins插件手動下載地址:http://mirror.xmission.com/jenkins/plugins/
4绝葡、會shell,python腹鹉,ruby腳本語言
用戶權(quán)限
用戶權(quán)限的首要條件藏畅,就是用戶,所以我們先創(chuàng)建2個用戶功咒∮溲郑「QALeader」和「QAUser」,其中「QALeader」當(dāng)作「項目管理員」力奋,「QAUser」當(dāng)作「項目測試」榜旦。
在Jenkins主頁的左側(cè)選擇「系統(tǒng)管理」->「管理用戶」->「新建用戶」,根據(jù)要求創(chuàng)建用戶景殷。
注意:用戶ID會將英文全部按照小寫處理溅呢。
由于Jenkins本身不帶有用戶權(quán)限功能,所以我們將使用Jenkins插件「Role-based Authorization Strategy」完成用戶權(quán)限功能猿挚。選擇「系統(tǒng)管理」->「插件管理」咐旧,標(biāo)簽頁選擇「可選插件」,右上角「過濾」中輸入插件名或關(guān)鍵字绩蜻。安裝完成后重啟Jenkins铣墨。
Jenkins重啟:在瀏覽器地址欄輸入命令。記得修改成自己的地址和端口號
直接安裝使用命令
localhost:8080/restart
依賴tomcat使用命令
localhost:8080/jenkins/restart
Jenkins重啟后办绝,插件已經(jīng)安裝好了伊约。但此時插件還沒有生效,無法使用孕蝉,需要再配置一些地方屡律。
進入「系統(tǒng)管理」->「全局安全配置」,修改「訪問控制」和「代理」
此時降淮,插件生效疹尾,可以在「系統(tǒng)管理」中看到新的功能「Manage and Assign Roles」
該功能中包含3個標(biāo)簽,分別是「Manage Roles」「Assign Roles」「Role Strategy Macros」。我們會用到前兩個纳本,第三個沒有用到窍蓝,不在此贅述。
Manage Roles
權(quán)限類型繁成∠朋希可以設(shè)置不同權(quán)限類型,使用其中「Global roles」和「Project roles」巾腕,將鼠標(biāo)停在每一項中會有英文提示
「Global roles」中我們關(guān)注「Overall」面睛、「任務(wù)」和「Run」。插件會默認記錄一個admin尊搬,
擁有所有權(quán)限叁鉴,一般,這個權(quán)限我們留給Jenkins管理員佛寿。
在「Role to add」輸入想要的Role幌墓,添加到Global roles,比如「subAdmin」和「QA」
subAdmin擁有增刪查改項目的權(quán)限冀泻,QA擁有查看項目的權(quán)限常侣,所以我們給subAdmin和QA分別賦予權(quán)限。最終權(quán)限為
「Project roles」我們關(guān)注「任務(wù)」和「Run」弹渔。其中「Pattern」是正則表達胳施,通過「Pattern」篩選項目。根據(jù)項目需要自行創(chuàng)建肢专。比如「TestProject.*」和「TestProjectipa.*」舞肆。
「TestProject.*」意思是獲得該項目權(quán)限的用戶只可以在首頁可以看到「TestProject」開頭的項目。如:TestProject12345678900965
「TestProjectipa.*」意思是獲得該項目的權(quán)限的用戶只可以可以在首頁看到「TestProjectipa」開頭的項目博杖。如:TestProjectipaiuhygfdsa
Assign Roles
用戶賦權(quán)胆绊。將設(shè)置的不同權(quán)限類型賦予用戶。之后的用戶登陸后只能看到相應(yīng)權(quán)限的按鈕欧募。
為了方便直觀压状,我們直接將之前創(chuàng)建的「QALeader」和「QAUser」賦予權(quán)限。同時創(chuàng)建2個項目跟继,分別叫做「TestProject」和「TestProjectipa」种冬。
項目創(chuàng)建
按照之前的規(guī)定,創(chuàng)建2個自由風(fēng)格項目舔糖,分別是「TestProject」和「TestProjectipa」娱两。
在這里就可以使用「subAdmin」類型創(chuàng)建,不再使用「admin」金吗。
?點擊「新建項目」十兢,輸入項目名趣竣,選擇「構(gòu)建一個自由風(fēng)格軟件項目」,點擊確定旱物。
依次創(chuàng)建完成后「QALeader」可以看到2個項目遥缕,「QAUser」只能看到1個項目。
項目配置
項目配置中「源碼管理」選擇使用的管理工具宵呛,默認提供了「Git」和「Subversion」(就是SVN)单匣。根據(jù)不同需求自行解決。
「構(gòu)建」中宝穗,下拉選擇「Excute shell」户秤,使用shell腳本打包。
shell腳本如下
#!/bin/sh
projectPath="下載的項目中xcodeproj絕對路徑"
ipaPath="保存ipa包的絕對路徑"
projectTarget="項目中需要構(gòu)建的TARGETS"
targetName="項目中需要構(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
但是這樣不符合要求啊鸡号。無法配置版本、切換環(huán)境须鼎,總不能每次為了打不同環(huán)境的包提交一次代碼鲸伴。
接下來我們追加版本和環(huán)境的配置。
勾選「參數(shù)化構(gòu)建過程」莉兰,根據(jù)需求選擇相應(yīng)參數(shù)。如:版本號選擇「字符參數(shù)」礁竞;服務(wù)器環(huán)境選擇「選項參數(shù)」糖荒。
其中「名稱」是展示到打包前會用,也是變量必填模捂,需要在shell腳本中使用捶朵;「默認值」額。狂男。综看。就是默認值,可不填岖食;「描述」是該參數(shù)說明红碑,可不填。
此時再去打包泡垃,會發(fā)現(xiàn)原先的「Build」變成了「Build with Parameters」析珊,點擊后沒有立即打包,而是進入?yún)?shù)配置頁面蔑穴。
外殼已經(jīng)完成忠寻,下面就開始實現(xiàn)方法。
首先是版本號的修改存和。修改思路:iOS項目中版本號是寫在info.plist文件中奕剃,info.plist文件實際上是一堆key-value組成衷旅,那么知道了版本號的key,對應(yīng)替換value就可以了纵朋。
版本號對應(yīng)的key是「CFBundleShortVersionString」柿顶,找到這一行的key,替換掉下一行value倡蝙,重新保存文件九串;服務(wù)器環(huán)境也是類似思路,不在此單獨列出寺鸥。腳本:
#!/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()
將該腳本放到一個不會變動的文件夾中或直接放入代碼文件一同上傳猪钮,如果選擇放入本地文件夾,請先將文件復(fù)制到info.plist所在目錄胆建。
在打包開始前烤低,追加以下腳本以修改版本號
chmod 777 param.py
python param.py 版本號「名稱」
打包完成后,需要分發(fā)給「QAUser」笆载,但是「QAUser」并不能查看到該項目扑馁,需要將ipa包導(dǎo)入另一個項目中,供「QAUser」使用凉驻。在「構(gòu)建后操作」選擇「Build other projects」腻要,填寫項目名,選擇構(gòu)建時機涝登。
啥時候有興趣了雄家,啥時候繼續(xù)寫好了。
- 文/潘曉璐 我一進店門施掏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來层宫,“玉大人,你說我怎么就攤上這事其监∶韧龋” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵抖苦,是天一觀的道長毁菱。 經(jīng)常有香客問我米死,道長,這世上最難降的妖魔是什么贮庞? 我笑而不...
- 正文 為了忘掉前任峦筒,我火速辦了婚禮,結(jié)果婚禮上窗慎,老公的妹妹穿的比我還像新娘物喷。我一直安慰自己,他們只是感情好遮斥,可當(dāng)我...
- 文/花漫 我一把揭開白布峦失。 她就那樣靜靜地躺著,像睡著了一般术吗。 火紅的嫁衣襯著肌膚如雪尉辑。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼狮含,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拱撵?” 一聲冷哼從身側(cè)響起辉川,我...
- 正文 年R本政府宣布,位于F島的核電站屈芜,受9級特大地震影響郊愧,放射性物質(zhì)發(fā)生泄漏井佑。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一毅糟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喇肋,春花似錦迹辐、人聲如沸蝶防。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仍律,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間水泉,已是汗流浹背。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 1 全局配置 1.1 Keychain全局配置 1.1.1配置Provisioning Profiles 1掌唾、將/...
- 安裝Jenkins 安裝jenkins方法有兩種: 1,使用homebrew安裝. 2,直接下載安裝包安裝; 方法...
- 前言 眾所周知糯彬,現(xiàn)在App的競爭已經(jīng)到了用戶體驗為王,質(zhì)量為上的白熱化階段撩扒。用戶們都是很挑剔的吨些。如果一個公司的推廣...
- 準備工作 Jenkins的安裝 Jenkins依賴于Java環(huán)境,首先需安裝和配置Java環(huán)境(PS:在下載的時候...
- Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...