Jenkins創(chuàng)建iOS項目自動打包

公司最近出了個打包需求哨鸭,完成之后記錄一下里逆,避免忘記

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會將英文全部按照小寫處理溅呢。


首頁左側(cè)系統(tǒng)管理


管理用戶


新建用戶(用戶列表上admin為Jenkins管理員用戶)


新建用戶


用戶ID被變?yōu)樾?/div>

由于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

「Global roles」中我們關(guān)注「Overall」面睛、「任務(wù)」和「Run」。插件會默認記錄一個admin尊搬,

擁有所有權(quán)限叁鉴,一般,這個權(quán)限我們留給Jenkins管理員佛寿。

在「Role to add」輸入想要的Role幌墓,添加到Global roles,比如「subAdmin」和「QA」


新增subAdmin和QA

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


Project roles

「Project roles」我們關(guān)注「任務(wù)」和「Run」弹渔。其中「Pattern」是正則表達胳施,通過「Pattern」篩選項目。根據(jù)項目需要自行創(chuàng)建肢专。比如「TestProject.*」和「TestProjectipa.*」舞肆。

「TestProject.*」意思是獲得該項目權(quán)限的用戶只可以在首頁可以看到「TestProject」開頭的項目。如:TestProject12345678900965

「TestProjectipa.*」意思是獲得該項目的權(quán)限的用戶只可以可以在首頁看到「TestProjectipa」開頭的項目博杖。如:TestProjectipaiuhygfdsa

根據(jù)Pattern創(chuàng)建項目


Assign Roles

用戶賦權(quán)胆绊。將設(shè)置的不同權(quán)限類型賦予用戶。之后的用戶登陸后只能看到相應(yīng)權(quán)限的按鈕欧募。

為了方便直觀压状,我們直接將之前創(chuàng)建的「QALeader」和「QAUser」賦予權(quán)限。同時創(chuàng)建2個項目跟继,分別叫做「TestProject」和「TestProjectipa」种冬。



賦予賬號系統(tǒng)管理權(quán)限



賦予賬號項目管理權(quán)限


項目創(chuàng)建

按照之前的規(guī)定,創(chuàng)建2個自由風(fēng)格項目舔糖,分別是「TestProject」和「TestProjectipa」娱两。

在這里就可以使用「subAdmin」類型創(chuàng)建,不再使用「admin」金吗。

?點擊「新建項目」十兢,輸入項目名趣竣,選擇「構(gòu)建一個自由風(fēng)格軟件項目」,點擊確定旱物。


新建項目

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


QALeader項目權(quán)限


QAUser項目權(quán)限

項目配置


項目配置

項目配置中「源碼管理」選擇使用的管理工具宵呛,默認提供了「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ù)」糖荒。

參數(shù)化構(gòu)建過程


其中「名稱」是展示到打包前會用,也是變量必填模捂,需要在shell腳本中使用捶朵;「默認值」額。狂男。综看。就是默認值,可不填岖食;「描述」是該參數(shù)說明红碑,可不填。

字符參數(shù)

此時再去打包泡垃,會發(fā)現(xiàn)原先的「Build」變成了「Build with Parameters」析珊,點擊后沒有立即打包,而是進入?yún)?shù)配置頁面蔑穴。


參數(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)建時機涝登。


Build other projects

啥時候有興趣了雄家,啥時候繼續(xù)寫好了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胀滚,一起剝皮案震驚了整個濱河市趟济,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌咽笼,老刑警劉巖顷编,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異剑刑,居然都是意外死亡媳纬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門施掏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來层宫,“玉大人,你說我怎么就攤上這事其监∶韧龋” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵抖苦,是天一觀的道長毁菱。 經(jīng)常有香客問我米死,道長,這世上最難降的妖魔是什么贮庞? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任峦筒,我火速辦了婚禮,結(jié)果婚禮上窗慎,老公的妹妹穿的比我還像新娘物喷。我一直安慰自己,他們只是感情好遮斥,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布峦失。 她就那樣靜靜地躺著,像睡著了一般术吗。 火紅的嫁衣襯著肌膚如雪尉辑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天较屿,我揣著相機與錄音隧魄,去河邊找鬼。 笑死隘蝎,一個胖子當(dāng)著我的面吹牛购啄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嘱么,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼狮含,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拱撵?” 一聲冷哼從身側(cè)響起辉川,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤表蝙,失蹤者是張志新(化名)和其女友劉穎拴测,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體府蛇,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年务荆,在試婚紗的時候發(fā)現(xiàn)自己被綠了穷遂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片函匕。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蚪黑,靈堂內(nèi)的尸體忽然破棺而出中剩,到底是詐尸還是另有隱情抒寂,我是刑警寧澤结啼,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站屈芜,受9級特大地震影響郊愧,放射性物質(zhì)發(fā)生泄漏井佑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一毅糟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喇肋,春花似錦迹辐、人聲如沸蝶防。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仍律,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間水泉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工钢拧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留炕横,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓膜钓,卻偏偏與公主長得像塔鳍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子轮纫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容