获取 Xcode Server 的 Git 日志、钉钉提醒

1,800

本文的项目地址

提醒:本文不介绍 Xcode Server 的基本配置过程

Xcode Server 是 Apple 公司提供的持续集成方案,在 Xcode 9 之前需要在 Mac App Store 下载并安装 OS X Server。在Xcode 9中,Xcode Server被内置在了Xcode中,整个 CI 环境搭建过程大大的简化了。

Xcode Server 构建结束之后,可以看到构建过程中产生的各种数据,比如,在的 Commits 界面中,展示了本次集成和上次相比新增的 Git 提交记录。

image.png

通常会将 Xcode Server 部署到一台单独的 Mac 上,当需要打包的时候,把代码合并到指定的分支上,Xcode Server 就会自动打包。

构建结束之后,如何将构建信息通知到开发人员、测试人员以及项目负责人呢?让所有的人员都盯着 Xcode Server 上的信息么?显然在公司的沟通工具(钉钉)中推送一条信息,并 @ 相关的人,是最方便的了。

下面是最终的实现展示,输出了尽可能详细的构建信息:编译信息、上传蒲公英的信息、代码变更记录、@ 相关的人员。

WechatIMG124的副本.jpeg

提醒:使用 Xcode Server 提供了直接下载、安装 App 的功能,但是需要通过 HTTPS 进行访问,所以需要保证手机和 Xcode Server 在一个网段内,或者部署到 HTTPS 环境下。如果不能保证再考虑将 ipa 上传到蒲公英等相关分发平台。

下面介绍如何提取钉钉消息中的相关信息。

如何提取编译信息

Xcode Server 提供了很多环境变量,构建结束之后直接使用即可。

如何提取版本信息

在通过 API 将 ipa 提交到蒲公英后,会返回这部分的信息。

如何代码提交记录

首先要注意一点,Xcode Server 会从 Git 仓库拉取一份代码,放到自己专门项目路径,和我们拉取的项目路径并不是同一个。

环境变量 XCS_PRIMARY_REPO_DIR 提供了 Xcode Server 的工作空间的源代码存储库的路径。我们可以使用 python 库 Repo 来获取 Git 的 commit 信息。

但是如何获取本次构建相对于上次新增的 commit 信息呢?也就是如何获取上次构建的时候最后一次 commit 的信息呢?

环境变量 XCS_OUTPUT_DIR 提供了 Xcode Server 集成期间存储的资源(包括日志和产品)的顶级目录。 'XCS_OUTPUT_DIR' + "/sourceControl.log" 就是本地构建的日志信息。

// 一段日志信息
DVTSourceControlWorkspaceBlueprintLocationsKey =     {
    B18B82A392A550FBEAB693A1A84AE2228193F564 =         {
        DVTSourceControlBranchIdentifierKey = master;
        DVTSourceControlBranchOptionsKey = 4;
        DVTSourceControlBranchRemoteNameKey = origin;
        DVTSourceControlLocationRevisionKey = f7c3ccf7d8678fb26ae3700e747e057bd0b17c0f;
        DVTSourceControlWorkspaceBlueprintLocationTypeKey = DVTSourceControlBranch;
    };
};

其中 DVTSourceControlLocationRevisionKey 节点包含了上次构建时的 commit 信息。

至此,Git 的 commit 信息就可以获取到了,总结一下:

  1. 环境变量 XCS_PRIMARY_REPO_DIR 为 Xcode Server 的源码路径;
  2. python 库 Repo 可以用来提起 commit 信息;
  3. sourceControl.logDVTSourceControlLocationRevisionKey 包含了上次构建的 commit 信息。

本文的项目地址,可以查看所有相关代码。