本示例最终效果:Git Push 代码 -> 自动 Jenkins 调用 Fastlane 打包 -> 上传蒲公英
示例环境
- MacOS 10.14.4
- Xcode 10.2.1
- Fastlane 2.121.1
- Jenkins ver. 2.173
- Ruby ruby 2.6.0p0 (2018-12-25 revision 66547)
- java version "1.8.0_91"
主要工具
一、安装
安装 Fastlane
brew cask install fastlane
建议翻羽土墙,我用的是SS,终端输入 export ALL_PROXY=socks5://127.0.0.1:1086
然后该终端的请求都走SS,速度快很多
安装过程可能会遇到各种报错,请根据提示自行搜索解决
安装 Jenkins
-
安装 JDK
下载 1.8
终端java -version
确认已有1.8
版本, 否则进行安装.
Java 8,也就是 jdk1.8
,Jenkins 2.89.2 部分插件不兼容9
,不要用9
-
安装 Jenkins
brew install jenkins
二、配置
Gitlab
这里使用 Gitee,Github 亦可,主要是配置好公钥.
然后 Xcode 新建个项目,自动签名,真机跑一下,Push 上去.
本示例为了模拟日常真实情况,使用 workspace
,随便 pod
添加了个库进去.
Fastlane
在 project 目录下,fastlane init
选择 4
回车回车
打开 fastlane/Fastfile
在 platform :ios do
与 end
中插入
# 替换 schemeName
schemeName = "你的project名"
outputpath = "~/Desktop/#{schemeName}_dev"
desc "Archive Dev"
lane :dev do
gym(scheme: schemeName,
#没有workspace的话,使用 project: "#{schemeName}.xcodeproj" 替换下面?
workspace: "#{schemeName}.xcworkspace",
export_method:"development",
output_directory: outputpath,
silent: true)
end
保存文件,终端 fastlane ios dev
,桌面看到打包的文件即成功.
最后 Push
fastlane 相关文件.
Jenkins
安装后 jenkins -v
即可启动
浏览器地址输入:http://localhost:8080 进入 Jenkins ,安装推荐插件
1. 创建凭据
选择 凭据 -> 系统 -> 全局凭据 -> 添加凭据
填写在上面 Gitlab 部分创建的私钥.
填入私钥内容 cat ~/.ssh/id_rsa
2. 新建任务
3. 添加源码
Repository URL
仓库地址Credentials
选择上面创建的凭据
4. 增加构建步骤
新增 执行 shell
添加
cd $WORKSPACE/
fastlane ios dev
保存,回首页,开始构建
等待一会,可以看到桌面有打包好的文件.
至此,一键打包完成.
三、上传蒲公英
登录 蒲公英,账户设置 -> API信息
在项目目录下,终端
touch archive.sh
chmod +x archive.sh
打开 archive.sh
编辑输入
echo "Start Archive"
fastlane ios dev
# 替换成项目名称
PNAME="FastlaneTest"
USERNAME=$(whoami)
FILEPATH="/Users/${USERNAME}/Desktop/${PNAME}_dev/${PNAME}.ipa"
uKey="替换成上面蒲公英查询到的User Key"
_api_key="替换成上面蒲公英查询到的API Key"
curl -F "file=@${FILEPATH}" -F "uKey=${uKey}" -F "_api_key=${_api_key}" https://www.pgyer.com/apiv1/app/upload
进入 Jenkins 对应项目配置,把原本如下命令
修改成
cd $WORKSPACE/
./archive.sh
保存,构建,稍等片刻,即可看到蒲公英有上传更新.
四、Push 代码触发构建
1. Jenkins 添加 hook 插件
Jenkins 首页 -> 系统管理 -> 插件管理 -> 可选插件
搜索 hook
,勾选 Generic Webhook Trigger
直接安装,勾选重启
项目配置,开启 webhook
,Token
最好随便填点什么,保存.
本文只做最简单示例,在 master 分支上进行构建,正常应该在 dev 分支收到 hook 之后进行构建,更多此插件配置请看
2. 内网穿透
由于本示例的 Jenkins 是搭建在本机上,只有内网 IP,没有独立外网 IP,没有域名,为了实现 Push 代码后,Gitlab 服务器能 webhook Jenkins 服务,这里需要一个动态域名服务,从内网映射到外网.
这里使用 NATAPP 提供的免费服务,注册登录,购买免费隧道
终端 cd 到 natapp 下,赋予权限chmod a+x natapp
复制 token
启动服务./natapp -authtoken=你刚才拿到的值
内网穿透成功,此处红线部分,即是本机的外部地址,手机亦可直接访问.
3. Gitlab Webhook
添加 hook
填写 URL
这里 URL 的格式,若在 Jenkins 项目里的 Generic Webhook Trigger
- 无设置 Token,则为
NATAPP获取的域名/generic-webhook-trigger/invoke
,
如http://ia2wvn.natappfree.cc/generic-webhook-trigger/invoke
- 有 Token (建议设置),格式为
NATAPP获取的域名/generic-webhook-trigger/invoke?token=自己设置的token
,
如http://ia2wvn.natappfree.cc/generic-webhook-trigger/invoke?token=XXXABCXXX
添加后,可以看到,已经触发了一次 hook 的记录,亦可手动点测试,进行测试
稍等片刻,查看蒲公英,可看到已有新包,证明整个流程已经走通完成,无需 Push 代码进行测试的.
至此,一条龙服务完毕.
本示例所用 project 下载地址 含 Fastlane
配置文件,sh 脚本代码.