iOS项目Flutter混合工程CI自动化配置
CI整个流程简介:
flutter项⽬源码仓库配置CI命令,配置runner与源码关联起来,flutter项⽬源码更新时,触发CI命令通过runner机
器将flutter源码⽣成framework,然后通过git命令将⽣成好的framework上传⾄framework代码仓库,主⼯程主
动pod update就可以引⼊最新的framework。
简化流程:rnnner安装->CI配置->flutter项⽬源码打包framework->上传framework⾄代码仓库->主⼯程pod
update
注意:本⽂以flutter项⽬源码仓库gitlab版为例编撰流程,github版本配置略微有区别。
⼀、RUNNER配置:
1、⼿动安装
下载⼆进制包
sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runnerdownloads.s3.amazonaws.com/v12.6/binaries/gitlab-runner-darwin-amd64
授予其执⾏权限:
sudo chmod +x /usr/local/bin/gitlab-runner
将Runner作为服务安装并启动它:
cd ~
gitlab-runner install
gitlab-runner start
2、⾃动安装
安装+启动
brew install gitlab-runner
brew services start gitlab-runner
注意:GitLab Runner 已安装并将在系统重新启动后运⾏。
3、注册Runner
a、找到配置参数:
打开flutter源码仓库gitlab地址,Setting-> CI/CD -> Runners settings->Specific Runners
本文以配置私有runner为例,如果有多个项目配置可以配公有runner,不过需要管理员权限才行。
b、终端命令注册runner
命令
gitlab-runner register
语⾔选shell
runner配置完成,绿点表示激活状态
注意:tags必须和gitlab-ci.yml⽂件中配置的tag⼀致
⼆、配置CI
1、⽣成CI⽂件
打开lutter项⽬源码地址,点击Set up CI会⽣成gitlab-ci.yml⽂件。
2、编辑CI⽂件
这⾥采⽤执⾏本地脚本的⽅式,这样gitlab-ci.yml⽂件可以按模板统⼀处理,只需略微改动脚本⽂件就可以配置新
项⽬。
ci⽂件内容:
stages:
- framework
ios_framework:
stage: framework
tags:
- flutterCI
only:
- master
script:
- echo "执⾏Flutter CI脚本"
- bash FlutterFile.sh
这⾥的tags与注册runner要⼀致。
这个意思是mater分⽀有代码更新就⾃动触发,需要⼿动触发设置 when: manual
3、创建framework代码仓库地址
gitlab创建flutter源码⽣成framework的代码仓库地址,记录这个地址留下⼀步备⽤。
4、脚本⽂件
脚本主要做了三件事:flutter源码⽣成framework、简单处理framework⽬录、framework上传⾄代码仓库。
#!/bin/sh
FLTTER_MODULE_PATH='XXXX'
#framework导出路径
FLTTER_APP_PATH='flutter_ios_app/Flutter'
#原⽣代码仓库地址
CODE_PATH='xxxxx'
SPEC_NAME='xxxx'
echo "fltter pub get"
flutter clean
flutter pub get
echo "fltter导出framework"
#pod
flutter build ios-framework --cocoapods --output=$FLTTER_APP_PATH
##framework
#flutter build ios-framework --output=$FLTTER_APP_PATH
pwd
#⽂件操作
cd $FLTTER_APP_PATH
echo "⽂件操作开始"
if [ ! -d "Profile" ];then
echo "Profile⽂件不存在"
else
echo "移除Profile⽂件"
rm -rf Profile
fi
mkdir DebugApp
mkdir ReleaseApp
cd Debug
mv App.xcframework ../DebugApp
cd ..
rm -rf Debug
cd Release
mv App.xcframework ../ReleaseApp
rm -rf Flutter.*
cd ..
mv Release ThirdPods
echo "⽂件操作完成"
#clone 原⽣代码仓库
echo "远端原⽣代码,与flutter⼯程同级⽬录"
cd ..
cd ..
cd ..
pwd
#代码仓库framework⽂件夹名字
FRAMEWORK_FOLDER_NAME=$SPEC_NAME/$SPEC_NAME/Flutter
echo $FRAMEWORK_FOLDER_NAME
if [ ! -d $SPEC_NAME/$SPEC_NAME ];then
echo "clone远端原⽣代码"
git clone $CODE_PATH
else
echo "远端⽂件存在"
fi
echo "覆盖远端Flutter旧⽂件" #直接覆盖替换旧⽂件
cp -rf $FLTTER_MODULE_PATH/$FLTTER_APP_PATH $SPEC_NAME/$SPEC_NAME
echo "移除本地⽣成的Flutter⽂件"
rm -rf $FLTTER_MODULE_PATH/$FLTTER_APP_PATH
echo "上传代码⾄远端"
cd $SPEC_NAME
git add .
git commit -m "flutter_ios_framework $(date "+%Y%m%d%H%M%S")"
git push -u origin master
修改脚本⽂件:
FLTTER_MODULE_PATH : flutter源码⽂件夹名称
CODE_PATH: framework仓库地址
SPEC_NAME: framework的spec名称
三、CI⾃动化执⾏
1、触发CI命令
将脚本⽂件上传⾄mater分⽀,⾃动触发CI命令,打包framework并上传⾄代码仓库。
2、查看CI任务
flutter源码仓库CI/CD -> Pipelines这⾥看执⾏任务和结果,可以⼿动终⽌任务。