Debug CI 流程的最后一步就是将获得的产出物(ipa)部署到测试人员可触的环境中,本文将主要介绍在 Jenkins + fastlane 工具链中,如何将安装包自动部署到 fir.im 。

我们主要关注和解决 3 个方面的问题:

  • fastlane 和 fir.im 的集成
  • 打包内容(change log)的提取和生成
  • 部署完成后的信息流

1. fastlane 和 fir.im 的集成

fastlane 和 fir.im 的集成可以简单通过 firim 插件来实现,插件的安装非常简单,只需要在项目根目录下执行:


fastlane add_plugin firim

接下来修改项目的 Fastfile,将 fir.im 添加到我们的构建流程中:


platform :ios do
  desc "Debug Archive"
  lane :beta do
    mode = "Debug"
    gym()
    firim(
      firim_api_token: "fir.im 用户 token",
    )
  end
end

如此一来,在完成构建和打包之后,对应的 ipa 文件即可自动上传到指定的 fir.im 账号中了。

如果当前应用从未上传过 fir.im,则此流程会在 fir.im 中新建应用,并完成上传

2. 打包内容(change log)的提取和生成

fir.im 提供了 changelog 字段,用于提交当前构建包含的更新信息。由于整个 CI 工具链都是自动化无人值守的,因此我们考虑抓取 Git 的 commit message 作为更新信息,便于下载安装包的测试人员了解当前构建包含的修改内容。

Jenkins 可以通过适当的 Plugin 获取到 Git commit message,但实际测试中发现提取到的 message 格式较为混乱,且不易与 fastlane 的管道结合,因此我们考虑在 fastlane 中获取并格式化提交信息。

此处我们使用 fastlane 的 changelog_from_git_commits,直接修改 Fastfile,添加changelog_from_git_commits步骤:


changelog_from_git_commits(
   # commit message 范围:自上次成功提交至当前最新提交
   between: [ENV['GIT_PREVIOUS_SUCCESSFUL_COMMIT'] || "HEAD^", "HEAD"],
   # 格式化,{304f6ed0b3d59a494ff3bafd10e3c2eb0fd01a1c7bd37925658f43c0521dfc40}s 代表 commit message,{304f6ed0b3d59a494ff3bafd10e3c2eb0fd01a1c7bd37925658f43c0521dfc40}an 代表提交人名
   pretty: "\n - {304f6ed0b3d59a494ff3bafd10e3c2eb0fd01a1c7bd37925658f43c0521dfc40}s ({304f6ed0b3d59a494ff3bafd10e3c2eb0fd01a1c7bd37925658f43c0521dfc40}an)"
   # 忽略 Merge 信息
   merge_commit_filtering: 'exclude_merges',
)

提取到的 commit message 将会被存储在变量FL_CHANGELOG中,我们将在 firim 插件中使用,完整的 Fastfile 文件代码如下:


platform :ios do
  desc "Debug Archive"
  lane :beta do
    mode = "Debug"
    gym()
    changelog_from_git_commits(
      # commit message 范围:自上次成功提交至当前最新提交
      between: [ENV['GIT_PREVIOUS_SUCCESSFUL_COMMIT'] || "HEAD^", "HEAD"],
      # 格式化,{304f6ed0b3d59a494ff3bafd10e3c2eb0fd01a1c7bd37925658f43c0521dfc40}s 代表 commit message,{304f6ed0b3d59a494ff3bafd10e3c2eb0fd01a1c7bd37925658f43c0521dfc40}an 代表提交人名
      pretty: "\n - {304f6ed0b3d59a494ff3bafd10e3c2eb0fd01a1c7bd37925658f43c0521dfc40}s ({304f6ed0b3d59a494ff3bafd10e3c2eb0fd01a1c7bd37925658f43c0521dfc40}an)"
      # 忽略 Merge 信息
      merge_commit_filtering: 'exclude_merges',
    )
    firim(
      firim_api_token: "fir.im 用户 token",
      app_changelog: lane_context[SharedValues::FL_CHANGELOG]
      )
  end
end

至此,fastlane + fir.im 的打包—>上传工具链就配置完成了。

3. 部署完成后的信息流

在完成上传后,我们还需要实现自动化发送通知消息,告知测试人员的功能。fir.im 提供了多种不同的集成方式,可以在完成安装包部署后通过多种渠道推送消息,此处我们以企业微信为例介绍一下如何集成。

首先在企业微信的群聊中创建一个群机器人:

添加完成后我们可以获得一个机器人的 webhook 链接:

将此链接记录下来,然后添加到 fir.im 的应用管理-集成中:

即可在完成部署后,将构建消息推送到对应的企业微信群中了,其他消息渠道同理。