美文网首页Flutter
Jenkins脚本自动打包Flutter端IOS版本

Jenkins脚本自动打包Flutter端IOS版本

作者: 张三码农 | 来源:发表于2020-11-03 17:32 被阅读0次

    最近闲来无事,搭建一个Jenkins脚本自动打包Flutter端IOS版本安装包ipa,遇到了几点小问题,以Jenkins版本2.263为例部署服务,记录一下.

1  安装jenkins

在命令行Terminal中输入 brew install jenkins,即安装jenkins服务.

上个厕所回来,在Terminal中输入jenkins start,如果看见hudson.WebAppMain$3#run: Jenkins is fully up and running,说明Jenkins启动成功,在浏览器中打开http://localhost:8080/就可以看见Jenkins主页面,截图如下:

2  安装插件

       Jenkins主页面-系统管理-插件管理-可选插件,搜索插件进行安装,description setter plugin,GitHub Branch Source Plugin,GitLab Plugin,Keychains and Provisioning Profiles Management,SSH Build Agents plugin,Timestamper,Upload to pgyer,Workspace Cleanup Plugin,Xcode integration,插件安装成功后记得启动一下Jenkins服务.

3  配置环境变量

打开Terminal,输入:vim .bash_profile后回车键(如果没有bash_profile文件,输入:touch .bash_profile),截图如下:

打开bash_profile文件后,输入字母i回车Terminal最下面变成insert就可以进行编辑,我的配置文件(擦掉部分是我的电脑名,也是目录文件)截图如下:

配置文件结束后,键盘按ESC退出编辑,再按:(分号)在Terminal中输入wq!后记得回车,退出vim命令完成配置(不熟悉vim命令请自行先学习一下),截图如下:

4  配置IOS开发证书和生产证书

苹果开发者证书名称查找:Mac启动台-钥匙串访问-登陆,截图中上面红色圈圈即是苹果开发者证书名称,下面红色圈圈分别是开发证书,生产证书,推送证书,截图如下:

前往文件夹路径/Users/你的电脑名/Library/Keychains,由于Mac系统的问题,有的系统显示有login.keychain,有的系统显示有login.keychain-db.我的电脑显示是login.keychain-db,复制一份login.keychain-db,重新命名为login.keychain,等会备用.

Jenkins主页面-系统管理-未分类,找到Keychains and Provisioning Profiles Management,有个选择文件按钮,把刚才的login.keychain上传上去,记得点击一下Upload后重启一下Jenkins,截图如下:

       文件login.keychain完成后,继续回到Keychains and Provisioning Profiles Management页面,开始配置IOS证书.找到KeyChains模块,可以看见Filename显示为"login.keychain",Password是电脑开机密码.点击Add Code Signing Identity,在Code Signing Identity中输入苹果开发者证书名称,依次配置开发证书,生产证书,推送证书,具体截图如下:

苹果开发者证书配置完成,接着配置证书描述文件,继续回到Keychains and Provisioning Profiles Management页面,最下面找到Provisioning Profiles模块,Provisioning Profiles Directory Path路径输入为"/Users/你的电脑名如XXX/Library/MobileDevice/Provisioning Profiles",点击点击Save保存一下,截图如下:

5  构建项目

Jenkins主页面-新建任务,任务名称自己输入(我起的名字叫Demo_IOS),选择"构建一个自由风格的软件项目",点击"确定".

"参数化构建过程"打钩展开,点击"添加参数"选择"文本参数"进行配置,"BUILD_TYPE"表示测试debug或者release版本,"GIT_BRANCH"表示项目源代码git分支地址,截图如下:

源码管理配置:我的项目源代码是git管理的,Branches to build的作用是Jenkins打包拉取指定git分支,配置截图如下:

构建环境配置:"Keychain"的名称即是之前上传的/Users/你的电脑名/Library/Keychains/login.keychain,"Code Signing Identity"即是IOS开发者证明名,截图如下:

构建执行shell脚本,IOS打包采用fastlane工具,请先安装brew install fastlane,具体脚本如下:

security set-key-partition-list -S apple-tool:,apple: -s -k "你的电脑登陆密码" ~/Library/Keychains/login.keychain

project_path=$(pwd)

flutter clean

flutter build ios --target lib/environment/main_${BUILD_TYPE}.dart   --release

cd $project_path/ios

#取当前时间字符串添加到文件结尾

now=$(date +"%Y_%m_%d_%H:%M")

#指定项目的scheme名称

scheme="Runner"

#指定要打包的配置名

configuration="Release"

#指定打包所使用的输出方式,目前支持app-store, package, ad-hoc, enterprise, development, 和developer-id,即xcodebuild的method参数

  if [ $BUILD_TYPE == "release" ]

  then

      export_method="ad-hoc"

 else

     export_method="development"

  fi 

#指定项目地址

workspace_path="${project_path}/ios/Runner.xcodeproj"

#指定输出路径

rm -rf "${project_path}/build/ios/ipa"

mkdir -p "${project_path}/build/ios/ipa"

output_path="${project_path}/build/ios/ipa"

#指定输出归档文件地址

archive_path="$output_path/store_${export_method}.xcarchive"

#指定输出ipa地址

ipa_path="$output_path/store_${BUILD_TYPE}_${GIT_BRANCH}.ipa"

#指定输出ipa名称

ipa_name="store_${BUILD_TYPE}.ipa"

commit_msg="$1"

#输出设定的变量值

echo "===workspace path: ${workspace_path}==="

echo "===workspace: ${WORKSPACE}==="

echo "===archive path: ${archive_path}==="

echo "===ipa path: ${ipa_path}==="

echo "===ipa_name: ${ipa_name}==="

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}

构建:  构建-增加构建步骤-Upload to pgyer  with apiV1,提前在蒲公英平台注册一个账号,截图如下:

   最后,点击Build with Parameters,开始构建项目,成功后扫码安装即可.截图如下:

期间遇到几个问题,苹果开发证书首先应该在Mac电脑中配置好,app-store方式打包的ipa包体积比较大,并且不能安装到Iphone上面,只能上传到AppStore中,谨记这两点.

相关文章

网友评论

    本文标题:Jenkins脚本自动打包Flutter端IOS版本

    本文链接:https://www.haomeiwen.com/subject/ucfdkttx.html