前段時(shí)間被手動(dòng)打包煩住了店乐,就用另外一臺(tái)Air搭建了自動(dòng)打包上傳環(huán)境禾酱,記錄如下:
首先編譯環(huán)境是需要的涣雕,這里是iOS應(yīng)用四苇,只需安裝Xcode
和命令行工具xcode-select --install
已骇。
安裝Fastlane
自動(dòng)化工具集sudo gem install fastlane
离钝。完成后進(jìn)入項(xiàng)目所在目錄配置Fastlane
cd ... #項(xiàng)目所在路徑
fastlane init
在國(guó)內(nèi)會(huì)出現(xiàn)停留在bundle update
畫面,如下
這是由于Ruby源被墻的問題。直接結(jié)束命令進(jìn)入項(xiàng)目目錄褪储,會(huì)多出一個(gè)文件夾
fastlane
和文件Gemfile
卵渴。編輯Gemfile
修改source
為http://gems.ruby-china.com
。由于只用于測(cè)試打包鲤竹,不進(jìn)行Appfile
文件處理浪读,只編輯任務(wù)文件Fastfile
:
default_platform(:ios)
platform :ios do
desc "iOS Test Enviroment Archieve"
lane :ci do|options|
puts "Start ..."
branch = options[:branch]
ipa_name = options[:name]
#確認(rèn)分支、git狀態(tài)辛藻、拉取最新代碼, 由于Git環(huán)境原因注釋了下面2行檢查操作
#sh "git checkout #{branch}"
ensure_git_branch(branch: branch)
#ensure_git_status_clean
git_pull
build_ios_app(
configuration: "Debug",
silent: true,
export_method: "development",
output_directory: "~/Desktop/Out",
output_name: "#{ipa_name}"
)
sh "~/Desktop/Out/commit.sh ~/Desktop/Out "
puts "Finish upload!"
end
end
注意export_method
方法如果不填寫碘橘,默認(rèn)構(gòu)建為AppStore的包,需要配置蘋果開發(fā)者信息吱肌。這里用于測(cè)試痘拆,填寫為development
。
腳本中lane :ci do|options|
注意這個(gè)opthions
的位置氮墨,后面則可以使用branch = options[:branch]
進(jìn)行輸入?yún)?shù)引用纺蛆。
腳本中用到的commit.sh
shell腳本,用于上傳打好的包到分發(fā)服務(wù)器勇边。如下:
#!/bin/bash
if test -z $1
then
echo "Not change path."
else
cd $1
fi
rm -rf .git
git init
git add *
git commit -m "Z"
git remote add origin https://.../XXX.git
git push -u origin master --force
現(xiàn)在這樣一個(gè)行為集「拉取master
分支最新的代碼犹撒,打包為ABC.ipa
并上傳到分發(fā)服務(wù)器」,只需要到項(xiàng)目目錄執(zhí)行如下命令:fastlane ios ci branch:master name:ABC
有了自動(dòng)打包環(huán)境現(xiàn)在需要遠(yuǎn)程控制粒褒,安裝Jenkins
识颊。有兩種方式,一種是DMG包安裝奕坟;一種是Jar包直接運(yùn)行(此方式在當(dāng)前用戶的目錄下創(chuàng)建文件祥款,權(quán)限不會(huì)受到影響)。先講Jar包運(yùn)行方式后續(xù)闡述DMG方式月杉。
注意Jenkins運(yùn)行需要的Java環(huán)境刃跛,12的版本不支持,需要退到11以前苛萎。
在Jenkins下載jenkins.war
包桨昙,運(yùn)行java -jar jenkins.war
命令后检号,服務(wù)就會(huì)開啟。
打開瀏覽器進(jìn)入http://localhost:8080/
蛙酪,第一次會(huì)要求輸入密碼Unlock Jenkins
齐苛、安裝需要的插件和創(chuàng)建管理者賬號(hào)。注意包含解鎖密碼的文件所在路徑在網(wǎng)頁(yè)上有標(biāo)識(shí)桂塞,直接復(fù)制里面內(nèi)容輸入就行凹蜂,對(duì)于插件安裝建議的就行,后面創(chuàng)建管理者賬號(hào)也很簡(jiǎn)單阁危。完成后進(jìn)入主面板建立需要的任務(wù)玛痊,點(diǎn)擊新建
,輸入任務(wù)名后選擇構(gòu)建一個(gè)自由風(fēng)格的軟件項(xiàng)目
(由于需求只是進(jìn)入項(xiàng)目目錄后執(zhí)行Fastlane命令
)狂打,點(diǎn)擊確定
進(jìn)入配置頁(yè)面擂煞,只需在構(gòu)建
模塊下點(diǎn)擊增加構(gòu)建步驟
,選擇執(zhí)行 shell
趴乡,輸入命令:
cd ... #項(xiàng)目所在路徑
fastlane ios ci branch:master name:ABC
點(diǎn)擊保存
,Jenkins
任務(wù)就配置完成了(砍柴用了青龍刀...)颈娜。在其他電腦上用瀏覽器打開http://Jenkins安裝電腦IP地址:8080/
登錄后,選擇前面建立的任務(wù)浙宜,點(diǎn)擊構(gòu)建
官辽,等待打包上傳完成。
下面只是一些閑談粟瞬,可以忽略同仆。故事到此就結(jié)束了嗎?下面才是寫這個(gè)隨筆的原因裙品。DMG安裝包安裝Jenkins遇到的問題俗批。在官網(wǎng)下載Jenkins安裝包后,點(diǎn)擊安裝后市怎,會(huì)在操作系統(tǒng)
上創(chuàng)建名為Jenkins
的用戶岁忘,進(jìn)入系統(tǒng)登錄界面就能看見,正確的做法是用這個(gè)賬號(hào)登錄区匠,進(jìn)行前面Jar包相應(yīng)的操作干像,一切都會(huì)正常。由于我們的項(xiàng)目文件已經(jīng)在特定的用戶目錄下驰弄,所有會(huì)出現(xiàn)下面的一些問題麻汰。
- 在Jenkins的任務(wù)配置下添加的
cd
命令不能得以執(zhí)行,首先想到是權(quán)限問題戚篙,我們就用管理員的命令運(yùn)行sudo cd ...
五鲫,得到錯(cuò)誤信息sudo: no tty present and no askpass program specified
,需要配置Jenkins運(yùn)行sudo命令
不需要密碼岔擂,終端中執(zhí)行命令sudo visudo
位喂,添加配置jenkins ALL=(ALL) NOPASSWD: ALL
到文件末尾浪耘,保存,重啟Jenkins服務(wù)塑崖。 - 能執(zhí)行
sudo cd
操作后点待,但沒有真實(shí)切換到指定的目錄,通過echo $PWD
不對(duì)弃舒, 嘗試了軟連接ln -s
也不行。再嘗試把操作移動(dòng)到腳本中去執(zhí)行状原,Jenkins直接執(zhí)行腳本bash xx.sh
聋呢,腳本內(nèi)容如下:
sudo cd ... #項(xiàng)目目錄
echo $PWD
fastlane ios ci branch:master name:ABC
現(xiàn)在能成功切換,echo
也是正確的值颠区。
- 完成上面的步驟削锰,繼續(xù)操作出現(xiàn)問題
fastlane command not found
,環(huán)境變量的問題毕莱,配置Jenkins的環(huán)境變量器贩。在終端打印出環(huán)境變量進(jìn)行復(fù)制echo $PATH
,進(jìn)入Jenkins控制面板朋截,點(diǎn)擊系統(tǒng)管理
蛹稍,點(diǎn)擊系統(tǒng)設(shè)置
,在全局屬性
模塊部服,勾選環(huán)境變量
唆姐,添加鍵「Path」和值「前面復(fù)制的」
,點(diǎn)擊頁(yè)面底部的保存±耍現(xiàn)在執(zhí)行Jenkins構(gòu)建任務(wù)奉芦,fastlane
命令也能成功找到。但fastlane
執(zhí)行中出現(xiàn)各種方法錯(cuò)誤剧蹂,放棄声功,切回到Jar的方式。
看下面的Refs比上面的好看多了^_^
Refs:
Jenkins Sudo 問題
Jenkins 環(huán)境變量配置