Flutter Jenkins打包

前段時間公司重構(gòu)了一個flutter項目扫腺,自動化打包用的是Jenkins岗照,在這過程中頁遇到了一些坑村象,借此寫一篇文章來笆环,讓大家少走些彎路。
先看一下打包完成的效果圖:


image.png

我實現(xiàn)的效果是打包成功后顯示工程名+打包模式+分支名厚者,并顯示fir掃碼安裝的地址躁劣,這些都是通過插件來完成的,下面會詳細介紹到库菲。
在打包之前首先要做一些環(huán)境配置的工作账忘,比如:

  • iOS需要單獨配一臺Mac來進行打包,因為需要Xcode熙宇,Docker是沒有Xcode環(huán)境
  • android最好也放在這臺Mac上打包鳖擒,因為你要用Docker的話會遇到文件讀寫權(quán)限的問題
  • 搭建Flutter開發(fā)環(huán)境
  • 確保本地能打包成功,本地打包請參考iOS烫止,Android

Jenkins環(huán)境配置

1. 安裝 JRE環(huán)境

Jenkins 運行依賴于java環(huán)境 蒋荚,沒有安裝的請去官網(wǎng)自行下載安裝

2. 安裝 Jenkins

千萬別用官網(wǎng)下載的pkg包進行安裝,它會默認將 Jenkins安裝在/Users/Shared目錄下馆蠕,在打包的時候會遇到權(quán)限問題, 所以強烈建議大家用brew來安裝Jenkins.

  1. 安裝Jenkins

    brew install jenkins

  2. 命令行啟動Jenkins

    java -jar /usr/local/Cellar/jenkins/${你的Jenkins版本}/libexec/jenkins.war --httpPort=8080
    或
    Jenkins
    
  3. 打開瀏覽器,輸入 localhost:8080 就可看到Jenkins的web界面

  4. Jenkins開機啟動

    命令行安裝的jenkins不自備開機啟動功能期升,每次重啟后都要命令行執(zhí)行啟動,非常麻煩互躬,使用以下步驟可以在每次開機后自動拉起一個jenkins的命令行播赁。

    1. 創(chuàng)建開機啟動腳本 jenkinsBoot.sh

    2. 加入啟動jenkins代碼


      image.png
    3. 設置腳本權(quán)限

      sudo chmod 777 xxxx/jenkinsBoot.sh

    4. 設置腳本打開方式


      image.png
    5. 設置腳本引用,使腳本可執(zhí)行
      chmod +x xxxx/jenkinsBoot.sh

    6. 加入用戶的登錄項


      image.png
    7. 重新啟動計算機吼渡,會發(fā)現(xiàn)自動執(zhí)行了jenkinsBoot.sh這個腳本容为。

3. Jenkins配置

第一次打開Jenkins時需要解鎖Jenkins,你看到的頁面是這樣的


image.png

進入紅色字體路徑下將密碼拷貝到輸入框诞吱,點擊continue

然后點擊左側(cè)一個模塊進入下載頁面舟奠,時間可能會很久,耐心等待

image.png
image.png

自定義設置用戶名及密碼房维,點擊保存并完成按鈕沼瘫,進入下圖頁面。

image.png

安裝插件flutter打包所需要的插件咙俩,點擊系統(tǒng)管理->插件設置

  1. Keychains and Provisioning Profiles Management(iOS證書管理)
  2. Xcode integration(iOS專用)
  3. Gradle plugin(Android專用)
  4. description setter plugin(根據(jù)構(gòu)建日志文件的RegEx耿戚,設置每個構(gòu)建的描述。比如fir的上傳地址)

4. 項目工程配置

iOS

  1. 新建項目
image.png
  1. 項目構(gòu)建配置
image.png

打包類型(注意:AdHoc需要在你項目中配置configuration阿趁,自行g(shù)oogle)

image.png

打包分支

image.png

源代碼管理


image.png

SSH私鑰添加


image.png

證書和描述文件配置


image.png
image.png

iOS證書和描述文件首先要在系統(tǒng)管理->Keychains and Provisioning Profiles Management中設置和上傳后才能在你的項目中選擇添加膜蛔,iOS證書和描述文件的制作我就不多說了,自行Google


image.png

這里的login.keychain文件可能需要自己copy到桌面并改下文件后綴脖阵,因為它是隱藏文件


image.png

這里的描述文件都要上傳皂股,其實路徑就可以寫/Users/xxxx/Library/MobileDevice/Provisioning Profiles路徑,這是Xcode保存描述文件的路徑命黔,上傳的時候也可以去這個路徑下去上傳


image.png

一切準備好后就可以在項目配置中選擇證書和描述文件了呜呐,這時我們第一次add keychain可能不能去選擇Code Signing Identity就斤,需要我們保存一下后就能選擇了

image.png

image.png

在這里我們使用shell腳本來構(gòu)建,以便我們構(gòu)建完成能夠上傳到fir上蘑辑。

腳本代碼

 security set-key-partition-list -S apple-tool:,apple: -s -k "開機密碼" ~/Library/Keychains/login.keychain-db
#假設腳本放置在與項目相同的路徑下
project_path=$(pwd)
# flutter環(huán)境變量設置
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
export PATH=/Users/yongjianhe/flutter/bin:$PATH
flutter build ios
cd $project_path/ios
#取當前時間字符串添加到文件結(jié)尾
now=$(date +"%Y_%m_%d_%H:%M")
#指定項目的scheme名稱
scheme="Runner"
#指定要打包的配置名
configuration=${BUILD_TYPE}
#指定打包所使用的輸出方式洋机,目前支持app-store, package, ad-hoc, enterprise, development, 和developer-id,即xcodebuild的method參數(shù)
if [ $BUILD_TYPE == "Release" ]
then
    export_method="app-store"
elif [ $BUILD_TYPE == "AdHoc" ]
then
    export_method="ad-hoc"
else
    export_method="development"
fi
#指定項目地址
workspace_path="${project_path}/ios/Runner.xcodeproj"
#指定輸出路徑
rm -rf "${project_path}/ipa"
mkdir -p "${project_path}/ipa"
output_path="${project_path}/ipa"
#指定輸出歸檔文件地址
archive_path="$output_path/zaihui_crm_${export_method}_${now}.xcarchive"
#指定輸出ipa地址
ipa_path="$output_path/zaihui_crm_${BUILD_TYPE}_${BUILD_BRANCH}_${BUILD_REPOSITORY}_${now}.ipa"
#指定輸出ipa名稱
ipa_name="zaihui_crm_${BUILD_TYPE}_${BUILD_BRANCH}_${now}.ipa"
commit_msg="$1"
#輸出設定的變量值
echo "===workspace path: ${workspace_path}==="
echo "===archive path: ${archive_path}==="
echo "===ipa path: ${ipa_path}==="
echo "===export method: ${export_method}==="
echo "===commit msg: $1==="
#先清空前一次build
fastlane gym --scheme ${scheme} --clean --configuration ${configuration} --archive_path ${archive_path} --export_method ${export_method} --output_directory ${output_path} --output_name ${ipa_name}
#上傳到fir
if [ ${export_method} != "app-store" ]
then
fir publish ${ipa_path} -T "fir API token" -c $commit_msg
fi

因為我使用的是fastlane指令打包的洋魂,所以打包的電腦需要安裝fastlane

這里有個地方需要注意的點就是當出現(xiàn)打包失敗是由于運行flutter腳本錯誤造成的時候绷旗,這個原因可能是你當前的flutter版本運行flutter build iOS時,在Generated.xcconfig中并沒有生成FLUTTER_BUILD_MODE參數(shù)副砍,這個是運行flutter腳本所需要的參數(shù)衔肢,不過沒事,你只需要在你的工程文件再添加一個腳本就行了豁翎。

image.png

最后還要在你的工程中設置描述文件(制作相應環(huán)境的描述文件膀懈,下載并打開,debug對應開發(fā)證書谨垃,adhoc和release對應生產(chǎn)證書)启搂,到了這里大家可能有個疑問,就是前面我都上傳了證書了刘陶,為什么這里還要填寫胳赌,原因是前面上傳的證書只是為了保存Code Signing Identity以便在login.keychain去訪問他,而不是去保存它匙隔,我想描述文件也同樣如此疑苫,所以我們需要設置描述文件的路徑

image.png

構(gòu)建名稱設置工程名+打包模式+分支名

image.png

最后一步,在編譯歷史中成功顯示fir地址纷责,先要設置Html顯示


WechatIMG4650.jpeg
image.png

這時候你就能打出iOS包了并顯示了

Android

安卓打包相對于iOS來說就簡單很多了

  1. 新建項目


    image.png
  2. 項目構(gòu)建配置


    image.png

    image.png

    image.png

    image.png

    image.png
如果大家在iOS證書和描述文件以及安卓上有其它問題捍掺,可以參考一下以下兩篇文章:
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市再膳,隨后出現(xiàn)的幾起案子挺勿,更是在濱河造成了極大的恐慌,老刑警劉巖喂柒,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件不瓶,死亡現(xiàn)場離奇詭異,居然都是意外死亡灾杰,警方通過查閱死者的電腦和手機蚊丐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來艳吠,“玉大人麦备,你說我怎么就攤上這事。” “怎么了凛篙?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵弄屡,是天一觀的道長。 經(jīng)常有香客問我鞋诗,道長,這世上最難降的妖魔是什么迈嘹? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任削彬,我火速辦了婚禮,結(jié)果婚禮上秀仲,老公的妹妹穿的比我還像新娘融痛。我一直安慰自己,他們只是感情好神僵,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布雁刷。 她就那樣靜靜地躺著,像睡著了一般保礼。 火紅的嫁衣襯著肌膚如雪沛励。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天炮障,我揣著相機與錄音目派,去河邊找鬼。 笑死胁赢,一個胖子當著我的面吹牛企蹭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播智末,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谅摄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了系馆?” 一聲冷哼從身側(cè)響起送漠,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎由蘑,沒想到半個月后螺男,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡纵穿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年下隧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谓媒。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡淆院,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情土辩,我是刑警寧澤支救,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站拷淘,受9級特大地震影響各墨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜启涯,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一贬堵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧结洼,春花似錦黎做、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鸣峭,卻和暖如春宏所,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背摊溶。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工楣铁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人更扁。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓盖腕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親浓镜。 傳聞我的和親對象是個殘疾皇子溃列,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

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