iOS Jenkins自動(dòng)化打包上傳躺坑記

  一說到自動(dòng)打包很多人想到的就是jenkins,正好這段時(shí)間比較閑,我也研究了一下利用jenkins來自動(dòng)打包上傳蒲公英炸卑。
我看到網(wǎng)上有很多寫Jenkins的文章辑舷,但是我發(fā)現(xiàn)我按照網(wǎng)上的文章步驟一步一步去弄還是踩了不少坑悔叽,費(fèi)了不少勁疾宏,可能是每個(gè)人的項(xiàng)目情況背景不一樣碟案,所以碰到的問題物臂,處理問題的方法也不一樣吧壮啊。Jenkins安裝網(wǎng)上有很多教程這里我就不說的嫉鲸,我就說說我自己的項(xiàng)目情況,及我在配置的過程中所遇到的問題及如何解決的。
 所以說這篇文章就建立在你已經(jīng)裝好了jenkins環(huán)境的基礎(chǔ)上的歹啼。

項(xiàng)目情況:

  • cocopods代碼管理
  • 碼云源碼管理
  • 上傳蒲公英
  • Xcode9.2
  • 打包用的手動(dòng)簽名
1.新建配置流程

瀏覽器輸入:http://localhost:8080 打開jenkins 輸入jenkins賬號(hào)密碼

屏幕快照 2018-01-10 下午3.35.47.png
點(diǎn)新建
屏幕快照 2018-01-10 下午3.37.36.png

輸入你的項(xiàng)目名稱玄渗,選擇構(gòu)建一個(gè)自由風(fēng)格的軟件項(xiàng)目座菠,然后確認(rèn),你就會(huì)來到這個(gè)頁(yè)面:

屏幕快照 2018-01-10 下午3.39.56.png

這里我想特別提一下
屏幕快照 2018-01-10 下午3.47.29.png
    general->源碼管理->構(gòu)建觸發(fā)器->構(gòu)建環(huán)境->構(gòu)建->構(gòu)建后操作 我們?cè)趫?zhí)行構(gòu)建的時(shí)候
是按這個(gè)順序去執(zhí)行的藤树,所以當(dāng)我們?cè)跇?gòu)建的過程中只要前面的有錯(cuò)浴滴,后面的就不會(huì)再執(zhí)行了,比
如我在源碼管理這一塊配置錯(cuò)了岁钓,那么我在構(gòu)建的時(shí)候源碼管理后面的就都不會(huì)再執(zhí)行了升略,你解決
錯(cuò)誤的時(shí)候就看源碼管理的這塊就行,執(zhí)行到哪里有錯(cuò)我們就解決哪里的問題

一.General配置

general 里面都是一些普通的設(shè)置屡限,基本不需要做特殊的處理品嚣,但是我們?cè)谡{(diào)試jenkins的過程中可能會(huì)構(gòu)建很多次(比如我調(diào)通都構(gòu)建了兩百多次,心塞~~)钧大,所以我們可以在選擇general 里面選擇丟棄舊的構(gòu)建
屏幕快照 2018-01-10 下午3.44.26.png

到這里General配置基本就這么多翰撑。

二.源碼管理
源碼我們先項(xiàng)目用的是碼云的git管理,配置如下:


E91D7454-7873-41A1-A5E3-BD9AB7E23D0E.png

選Git->git倉(cāng)庫(kù)地址(URL)->驗(yàn)證(Credentials)->需要拉取的分支帶啦(這里我拉取的是master代碼)拓型,一般我們git管理有兩種url地址额嘿,一種是git@*****.git格式的,一種是https://****.git劣挫。這里我選擇的是git@的,這種需要ssh驗(yàn)證东帅,需要添加公鑰压固,私鑰。而https則需要我在add那里添加賬號(hào)密碼靠闭,但是親測(cè)https的即便添加了賬號(hào)密碼也還是沒有克隆下來帐我,一直停留在checking那一步?jīng)]有動(dòng)了,后面查資料說https的還要做其它操作愧膀,因而我放棄了采用了git ssh驗(yàn)證的方式添加公鑰私鑰拦键。具體操作如下:
  • 打開終端, 輸入命令 cd ~/.ssh 進(jìn)入.ssh文件下檩淋,然后輸入:ssh-keygen -t rsa -C "賬號(hào)"芬为,按下來按回車會(huì)出現(xiàn)給公鑰起名,起過名之后再給公鑰設(shè)置密碼(如果不需要設(shè)置密碼直接按回車)蟀悦,結(jié)果如下:


    C8F46B07-3F9A-4C56-86FC-EAD3427BF877.png

    然后ls ,我們就可以看到.ssh 問價(jià)夾下多了test跟test.pub兩個(gè)文件


    屏幕快照 2018-01-11 上午10.03.09.png
  • 碼云配置,登錄碼云媚朦,點(diǎn)設(shè)置->SSH公鑰,添加標(biāo)題日戈,然后把剛剛生成的test.pub文件內(nèi)容粘貼到公鑰哪里询张,確認(rèn),到此碼云配置就OK了


    B0C39F48-D55A-47EA-A641-768B25DD614D.png
  • jenkins配置浙炼》菅酰回到j(luò)enkins源碼管理唯袄,為Git添加Credentials。點(diǎn)擊Add:


    屏幕快照 2018-01-11 上午10.15.07.png

    Kind選擇SSH Username with PrivateKey ,用戶名可以自己看著填蜗帜,將剛剛生成的test 文件內(nèi)容(即私鑰)粘貼到Key里面確認(rèn)添加恋拷。源碼管理到目前為止就差不多了,我們從git上下載源碼的時(shí)候由于網(wǎng)速及其它因素钮糖,可能時(shí)間會(huì)比較長(zhǎng)梅掠,但是Jenkins默認(rèn)的克隆過期時(shí)間為10分鐘,所以我們可以設(shè)置長(zhǎng)一點(diǎn)店归,我這里設(shè)置了50分鐘


    屏幕快照 2018-01-11 上午10.22.02.png

三.構(gòu)建觸發(fā)器

屏幕快照 2018-01-11 上午10.39.21.png

我這里設(shè)置的是每天6點(diǎn)到18點(diǎn)阎抒,每隔一小時(shí)檢查有沒有源碼更新構(gòu)建一次,具體的你可以自己定義消痛,網(wǎng)上有很多相關(guān)教程
jenkins構(gòu)建觸發(fā)器定時(shí)任務(wù)Build periodically和Poll SCM【轉(zhuǎn)載】
四.構(gòu)建環(huán)境
這塊我都是默認(rèn)的沒有做選擇且叁,因?yàn)槲业膞code配置,證書配置都是根據(jù)后面的腳本來完成的

屏幕快照 2018-01-11 上午10.45.00.png

四.構(gòu)建
點(diǎn)擊增加構(gòu)建步驟秩伞,執(zhí)行腳本


屏幕快照 2018-01-11 上午10.46.04.png

為了方便說明我這里建了兩個(gè)shell逞带,第一個(gè)shell是做pod操作,因?yàn)槲业拇a是cocopods管理的纱新,所以在下載完源碼后先要執(zhí)行pod install ,才能繼續(xù)后續(xù)的打包上傳


7D7E7235-98FA-4043-B763-54EF5E2654CE.png

先cd到項(xiàng)目響應(yīng)目錄下展氓,這個(gè)目錄是Jenkins克隆源代碼后的目錄,然后執(zhí)行pod install

 cd "${WORKSPACE}/XZXSchool"
 export LANG=en_US.UTF-8
 /usr/local/bin/pod install

第二個(gè)shell是打包上傳相關(guān)的腳本了

#鑰匙串路徑  這幾句的意思是允許訪問鑰匙串脸爱,因?yàn)槲覀冊(cè)诖虬臅r(shí)候需要訪問鑰匙串 用里面的證書文件
KEY_PATH="/Users/Shared/Jenkins/Library/Keychains/login.keychain"
/usr/bin/security unlock-keychain -p ***(密碼) ${KEY_PATH}
/usr/bin/security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k ***(密碼) ${KEY_PATH}
/usr/bin/security set-keychain-settings ${KEY_PATH}
#工程名
APP_NAME="XZXSchool"
#目標(biāo)名
##
CONFIGURATION="Release"
#證書
CODE_SIGN_DEVELOPER="iPhone Developer: **** (****)"
#info.plist路徑
project_infoplist_path="${WORKSPACE}/XZXSchool/XZXSchool/Info.plist"
#取版本號(hào)
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" ${project_infoplist_path})
DATE="$(date +%Y%m%d)"
IPANAME="${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa"
#要上傳的ipa文件路徑
IPA_PATH="${WORKSPACE}/ipa"
#rm -rf $IPAPATH
#mkdir -pv $IPAPATH
ARCHIVE_NAME="${APP_NAME}.xcarchive"
#workspace路徑
WORKSPACE_PATH="${WORKSPACE}/XZXSchool/XZXSchool.xcworkspace"
#echo "+++++++++++++++++clean+++++++++++++++++"
#ExportOptions.plist文件生成遇汞,我們可以在Xcode中選好證書,按平時(shí)的流程手動(dòng)打包簿废,打包成功后會(huì)有一個(gè)ExportOptions.plist文件空入,我們將這個(gè)文件復(fù)制到下面這個(gè)相應(yīng)目錄下就行,然后我們的jenkins 就會(huì)自動(dòng)打包一個(gè)跟我們手動(dòng)打包的流程一樣的IPA包
ExportOptionsPlistPath="${WORKSPACE}/ExportOptions/ExportOptions.plist"
xcodebuild -workspace ${WORKSPACE_PATH} -scheme "${APP_NAME}"  clean
#echo "+++++++++++++++++Build+++++++++++++++++"
xcodebuild -workspace ${WORKSPACE_PATH} -scheme "${APP_NAME}" -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DEVELOPER}" 
#echo "+++++++++++++++++Run+++++++++++++++++"
xcodebuild archive  -workspace ${WORKSPACE_PATH} \
                    -scheme ${APP_NAME} \
                    CFBundleVersion=${bundleShortVersion} \
                    -destination generic/platform=ios \
                    -archivePath ${IPA_PATH}/${ARCHIVE_NAME}\               
xcodebuild -exportArchive -archivePath ${IPA_PATH}/${ARCHIVE_NAME}\
                          -exportPath ${IPA_PATH}\
                          -destination generic/platform=ios\
                          -exportOptionsPlist ${ExportOptionsPlistPath}\
                          -allowProvisioningUpdates
                      



#蒲公英上的User Key

uKey="*****************"

#蒲公英上的API Key

apiKey="*******************"

#蒲公英密碼

PASSWORD="********"

#MSG=git log -1 —pretty=%B

#執(zhí)行上傳至蒲公英的命令

echo "++++++++++++++upload+++++++++++++"

curl -F "file=@${IPA_PATH}/XZXSchool.ipa" -F "uKey=${uKey}" -F "_api_key=${apiKey}" -F "updateDescription=${MSG}" -F "password=${PASSWORD}" http://www.pgyer.com/apiv1/app/upload

記住里面所有的路徑都是jenkins目錄下的項(xiàng)目路徑族檬。打包上傳腳本大致就是這些歪赢。但我們寫完后還是發(fā)現(xiàn)會(huì)報(bào)錯(cuò)

  • 問題1
    iOS編譯簽名文件找不到

Check dependencies
Code Sign error: No codesigning identities found: No codesigning identities (i.e. certificate and private key pairs) that match the provisioning profile specified in your build settings
(“testxxxxx_Distribution_inhouse_01”) were found.

原因是jenkins以jenkins用戶身份運(yùn)行,iOS項(xiàng)目編譯用的簽名文件要從安裝證書時(shí)的用戶目錄
~/Library/MobileDevice/Provisioning Profiles
拷貝到
/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles

  • 問題2
    iOS編譯證書找不到

Check dependencies
Code Sign error: No codesigning identities found: No codesigning identities (i.e. certificate and private key pairs) that match the provisioning profile specified in your build settings
(“testxxxxx_Distribution_inhouse_01”) were found.

沒找到證書单料,打開“鑰匙串訪問”埋凯,從“登錄”拷貝安裝的證書到“系統(tǒng)”下

  • 問題3
    User interaction is not allowed.

Signing Identity: "iPhone Distribution: ****************** Co., Ltd."
Provisioning Profile: "************"

/usr/bin/codesign --force --sign ************************************ --entitlements /Users/Shared/Jenkins/Home/workspace/****/build/**************.build/Release-iphoneos/*************.build/****.***.****--timestamp=none /Users/Shared/Jenkins/Home/workspace/********/build/Release-iphoneos/****.app

/Users/Shared/Jenkins/Home/workspace/*****/build/Release-iphoneos/****.app: User interaction is not allowed.
Command /usr/bin/codesign failed with exit code。

拷貝~/Library/Keychains/login.keychain到
Users/Shared/Jenkins/Library/Keychains/login.keychain

暫時(shí)先總結(jié)這么多看尼,如果按照步驟還有啥不懂的递鹉,有問題的,留言看到我會(huì)回復(fù)的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末藏斩,一起剝皮案震驚了整個(gè)濱河市躏结,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌狰域,老刑警劉巖媳拴,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黄橘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡屈溉,警方通過查閱死者的電腦和手機(jī)塞关,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來子巾,“玉大人帆赢,你說我怎么就攤上這事∠吖#” “怎么了椰于?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)仪搔。 經(jīng)常有香客問我瘾婿,道長(zhǎng),這世上最難降的妖魔是什么烤咧? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任偏陪,我火速辦了婚禮,結(jié)果婚禮上煮嫌,老公的妹妹穿的比我還像新娘笛谦。我一直安慰自己,他們只是感情好昌阿,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布揪罕。 她就那樣靜靜地躺著,像睡著了一般宝泵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上轩娶,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天儿奶,我揣著相機(jī)與錄音,去河邊找鬼鳄抒。 笑死闯捎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的许溅。 我是一名探鬼主播瓤鼻,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼贤重!你這毒婦竟也來了茬祷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤并蝗,失蹤者是張志新(化名)和其女友劉穎祭犯,沒想到半個(gè)月后秸妥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沃粗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年粥惧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片最盅。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡突雪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出涡贱,到底是詐尸還是另有隱情咏删,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布盼产,位于F島的核電站饵婆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏戏售。R本人自食惡果不足惜侨核,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望灌灾。 院中可真熱鬧搓译,春花似錦、人聲如沸锋喜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)嘿般。三九已至段标,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間炉奴,已是汗流浹背逼庞。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瞻赶,地道東北人赛糟。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像砸逊,于是被迫代替她去往敵國(guó)和親璧南。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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