Flutter Jenkins打包

前段時間公司重構了一個flutter項目,自動化打包用的是Jenkins,在這過程當中頁遇到了一些坑,藉此寫一篇文章來,讓你們少走些彎路。 先看一下打包完成的效果圖: html

image.png
我實現的效果是打包成功後顯示工程名+打包模式+分支名,並顯示fir掃碼安裝的地址,這些都是經過插件來完成的,下面會詳細介紹到。 在打包以前首先要作一些環境配置的工做,好比:

  • iOS須要單獨配一臺Mac來進行打包,由於須要Xcode,Docker是沒有Xcode環境
  • android最好也放在這臺Mac上打包,由於你要用Docker的話會遇到文件讀寫權限的問題
  • 搭建Flutter開發環境
  • 確保本地能打包成功,本地打包請參考iOSAndroid

Jenkins環境配置

1. 安裝 JRE環境

Jenkins 運行依賴於java環境 ,沒有安裝的請去官網自行下載安裝java

2. 安裝 Jenkins

千萬別用官網下載的pkg包進行安裝,它會默認將 Jenkins安裝在/Users/Shared目錄下,在打包的時候會遇到權限問題, 因此強烈建議你們用brew來安裝Jenkins.android

  1. 安裝Jenkinsios

    brew install jenkinsweb

  2. 命令行啓動Jenkinsshell

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

  4. Jenkins開機啓動xcode

    命令行安裝的jenkins不自備開機啓動功能,每次重啓後都要命令行執行啓動,很是麻煩,使用如下步驟能夠在每次開機後自動拉起一個jenkins的命令行。瀏覽器

    1. 建立開機啓動腳本 jenkinsBoot.shbash

    2. 加入啓動jenkins代碼

      image.png

    3. 設置腳本權限

      sudo chmod 777 xxxx/jenkinsBoot.sh

    4. 設置腳本打開方式

      image.png

    5. 設置腳本引用,使腳本可執行 chmod +x xxxx/jenkinsBoot.sh

    6. 加入用戶的登陸項

      image.png

    7. 從新啓動計算機,會發現自動執行了jenkinsBoot.sh這個腳本。

3. Jenkins配置

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

image.png

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

而後點擊左側一個模塊進入下載頁面,時間可能會好久,耐心等待

image.png

image.png

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

image.png
安裝插件flutter打包所須要的插件,點擊系統管理->插件設置

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

4. 項目工程配置

iOS

  1. 新建項目

image.png

  1. 項目構建配置

image.png

打包類型(注意:AdHoc須要在你項目中配置configuration,自行google)

image.png

打包分支

image.png

源代碼管理

image.png

SSH私鑰添加

image.png

證書和描述文件配置

image.png

image.png

iOS證書和描述文件首先要在系統管理->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腳原本構建,以便咱們構建完成可以上傳到fir上。

腳本代碼

security set-key-partition-list -S apple-tool:,apple: -s -k "開機密碼" ~/Library/Keychains/login.keychain-db
#假設腳本放置在與項目相同的路徑下
project_path=$(pwd)
# flutter環境變量設置
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
#取當前時間字符串添加到文件結尾
now=$(date +"%Y_%m_%d_%H:%M")
#指定項目的scheme名稱
scheme="Runner"
#指定要打包的配置名
configuration=${BUILD_TYPE}
#指定打包所使用的輸出方式,目前支持app-store, package, ad-hoc, enterprise, development, 和developer-id,即xcodebuild的method參數
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

這裏有個地方須要注意的點就是當出現打包失敗是因爲運行flutter腳本錯誤形成的時候,這個緣由多是你當前的flutter版本運行flutter build iOS時,在Generated.xcconfig中並無生成FLUTTER_BUILD_MODE參數,這個是運行flutter腳本所須要的參數,不過沒事,你只須要在你的工程文件再添加一個腳本就好了。

image.png

最後還要在你的工程中設置描述文件(製做相應環境的描述文件,下載並打開,debug對應開發證書,adhoc和release對應生產證書),到了這裏你們可能有個疑問,就是前面我都上傳了證書了,爲何這裏還要填寫,緣由是前面上傳的證書只是爲了保存Code Signing Identity以便在login.keychain去訪問他,而不是去保存它,我想描述文件也一樣如此,因此咱們須要設置描述文件的路徑

image.png

構建名稱設置工程名+打包模式+分支名

image.png

想要成功顯示fir地址,先要設置Html

WechatIMG4650.jpeg

image.png

這時候你就能打出iOS包了

Android

安卓打包相對於iOS來講就簡單不少了

  1. 新建項目
    image.png
  2. 項目構建配置
    image.png
    image.png
    image.png
    image.png
    image.png
若是你們在iOS證書和描述文件以及安卓上有其它問題,能夠參考一下如下兩篇文章:

本文版權屬於再惠研發團隊,歡迎轉載,轉載請保留出處。@xqqlv

相關文章
相關標籤/搜索