Xcode Server + Slack =适用于iOS CI / CD的Rockstar Combo

原始文章:原始文章已发布在我的个人博客XCBlog上,继续阅读 此处 以获得更好的图形。 要阅读有关iOS DevOps和iOS CI / CD的更多有趣文章,请 在此处 访问我的博客

Xcode Server是Apple提供的持续集成服务,用于分析,构建,测试和存档iOS应用。 Xcode Server最近内置了Xcode 9,只需单击几下鼠标,即可进行iOS应用程序的持续集成和持续交付。 在撰写本文时,Apple仍未使用Xcode 9更新Xcode Server aka XCS的文档,但在我之前的文章中,我已经解释了如何为iOS应用设置Xcode Server with Xcode 9。 许多XCS用户抱怨Xcode Server缺乏第三方集成,但我认为并非如此。 XCS提供了编写集成前和集成后脚本以与任何可能的第三方服务集成的功能。 我们只需要了解Xcode Server和第三方服务提供的API。 在这篇文章中,我们将看到如何将Xcode Server与非常流行的通信服务Slack集成在一起。

Slack已成为大多数公司中最受欢迎的协作工具之一。 几乎每个人都喜欢Slack,因为它的光滑和令人敬畏的功能。 除非是Slack的竞争对手,否则几乎没有任何组织不会看到Slack。 Slack被用作组织内部进行协作工作的沟通渠道。 Slack具有一些令人赞叹的功能,例如工作空间,频道,机器人,webhooks等。 松弛通知可用于为开发活动提供反馈,例如静态分析,代码问题,测试报告和部署。 大多数持续集成服务器都在添加Slack集成,以提供有关部署管道的更新。 在iOS的世界中,我们可以使用Fastlane Slack操作来报告iOS开发活动的状态。 Xcode Server由Apple开发,因此除非进行业务级别的交流,否则不会提供任何内置支持,但是我们可以使用Slack API和Xcode Server后集成脚本的组合轻松地将其与Slack集成。

要将Slack与Xcode Server集成的第一步是了解我们可以在脚本中使用的Xcode Server环境变量。 列出了可用于Xcode Server的环境变量,但我们将看到Slack集成所需的一些有用变量。

  • XCS_BOT_NAME:可以在脚本中的任何位置使用它来获取当前的Xcode Bot名称。
  • XCS_INTEGRATION_RESULT:提供集成结果。
  • XCS_PRIMARY_REPO_DIR:这提供了集成的源代码,我们可以从中提取Git最后的提交或作者等信息。
  • XCS_PRIMARY_REPO_BRANCH:提供当前集成的分支名称。

您还可以受益于许多其他变量,但是现在,我们仅使用上面提到的变量。

现在,我们知道了要在脚本中使用的Xcode Server环境变量。 现在让我们为Xcode Server集成准备Slack。 在实际开始编写集成脚本之前,我们需要做的事情很少。

我们需要在Slack中创建传入的Webhook,我们可以使用它来将消息发布到特定的频道。 关于如何设置传入的Webhook,有一个清晰的文档,因此在这里无需重复,但是我们将在实践中看到它的外观。

访问“传入的WebHook”页面,然后单击“ 添加配置”

现在,在我的情况下,选择“传入WebHook”将消息发布到的渠道,我选择了为演示目的创建的#xcblog渠道。

单击添加传入的WebHooks集成保存设置

现在,我们有了一个如上所示的WebHook URL,可用于将消息发布到频道。 现在,我们的Slack准备接受来自Xcode Server的消息。

现在,我们已经设置了传入的Webhook,让我们使用传入的WebHooks的Slack API将一些测试消息发送到通道。 您可以在Slack官方页面上找到全面的文档,在这里如何使用Slack API发送简单到富文本消息。 总而言之,我们可以使用WebHook使用JSON有效负载将示例消息发布到Slack。

  $ curl -X POST \ 
-H'内容类型:application / json'\
--data'{“ text”:“此消息发布到#xcblog,并且来自* Xcode-bot *。”,“ channel”:“ #xcblog”,“ link_names”:1,“ username”:“ xcode-bot “,” icon_emoji“:”:robot_face:“}'\
https://hooks.slack.com/services/your_incoming_webhook_url

这会在频道上发布示例消息。

这行得通,但我们并不那么无聊。 让我们使其更具交互性,并向用户提供更多信息。

松弛附件可用于向邮件添加额外的信息和更多上下文。 通过使用附件,消息变得更具吸引力,有用和信息量大。 我们可以使用附件创建以下内容

  • 标题和链接
  • 多个领域
  • 不同的颜色
  • 借口,作者等

Slack官方网站上有关于附件的更多信息,请随时了解有关Slack附件的更多信息。 我们可以使用附件发布来自Xcode Server的交互式丰富消息。

我们刚刚完成了Slack的设置,是时候编写一个可以在Xcode Server完成Xcode Bot Integration之后触发的脚本了。

当Xcode Server完成集成时,我们希望看到一条吸引人的消息。 让我们开始思考我们要在Slack上发布的内容。

  • 根据Xcode Bot集成结果确定Slack附件的颜色
  • 获取最新的git消息
  • 检查产品是否已存档,并提供链接以下载产品(如果已存档)在iOS设备上
  • 提供测试摘要,例如错误计数和警告计数

这是一个很小的列表,但是您可以超越此列表并在Slack附件中配置更多内容。 我们可以使用Xcode Server环境变量和Slack API轻松创建bash脚本,以满足上述要求。 该脚本将如下所示:

  #!/ bin / sh 
环保
COLOUR ='好'
如果[$ XCS_INTEGRATION_RESULT =='警告']
[$ XCS_INTEGRATION_RESULT =='analyzer-warnings']; 然后
COLOUR ='警告'
elif [$ XCS_INTEGRATION_RESULT!='test-failures']
[$ XCS_INTEGRATION_RESULT!='build-errors']; 然后
COLOUR ='危险'
elif [$ XCS_INTEGRATION_RESULT!='成功']; 然后
COLOUR ='好'
科幻
LATESTMERGE =“ $(cd $ XCS_PRIMARY_REPO_DIR && git log -1)” INSTALLABLE =“ https:// my_xcode_server_hostname / xcode / bots / latest / $ {XCS_INTEGRATION_TINY_ID}”如果[[-z“ $ XCS_PRODUCT”]; 然后
INSTALLABLE =“这是测试集成。无法在iOS设备上下载”
其他
INSTALLABLE =“ https:// my_xcode_server_hostname / xcode / bots / latest / $ {XCS_INTEGRATION_TINY_ID}”
科幻
有效载荷= $(cat << EOF
{
“附件”:[
{
“ fallback”:“ Xcode服务器:'$ XCS_BOT_NAME'。”,
“ pretext”:“ Xcode服务器已完成对机器人$ XCS_BOT_NAME的#$ XCS_INTEGRATION_NUMBER集成,结果为$ XCS_INTEGRATION_RESULT”,
“ color”:“ $ COLOUR”,
“ title”:“ ::: Xcode服务器Bot'$ XCS_BOT_NAME'集成:#$ XCS_INTEGRATION_NUMBER。”,
“ text”:“具有$ XCS_TEST_FAILURE_COUNT个失败的$ XCS_TESTS_COUNT个测试。”,
“字段”:[
{
“ title”:“测试摘要”,
“ value”:“ $ XCS_ERROR_COUNT个错误和$ XCS_WARNING_COUNT个警告。”,
“短”:假
},
{
“ title”:“:机器人结果”,
“ value”:“ $ XCS_INTEGRATION_RESULT”,
“短”:true
},
{

“ title”:“在iOS设备上安装Build”,
“ value”:“ $ INSTALLABLE”,
“短”:假
},

{
“ title”:“ Git Branch”,
“ value”:“ $ XCS_PRIMARY_REPO_BRANCH”,
“短”:true
},
{
“ title”:“最新合并详细信息”,
“ value”:“ $ LATESTMERGE”,
“短”:假
}
]
}
],
“ channel”:“ #xcblog”,
“ icon_emoji”:“:robot_face:”,
“用户名”:“ Xcode服务器:”
}
EOF)
curl -X POST --data-urlencode“ payload = $ {PAYLOAD}”
https://hooks.slack.com/services/T8your_incoming_webhook_url/echo“完成”

用您的详细信息替换Xcode Server Url,Slack Channel和传入WebHook的变量值。 现在,我们已经准备好一个脚本,并且可以在创建或编辑机器人时将其作为Xcode Bot后集成触发器的一部分执行。

而已! 现在,我们已经使用Slack成功配置了Xcode Server Bot。 让我们触发集成并在松弛通道中观察结果。 最终结果将如下所示:

您可以看到,我们在Slack上发布了用于Xcode Server集成的大量信息。 看起来简直太神奇了!

我们刚刚看到了一个测试集成的示例,其中我们正在运行测试并发布消息。 当我们部署到iTunes Connects时,我们可以创建更多创意消息并庆祝成功!

观看记录的Slack和Xcode Server实时活动。 (“羞耻中”无法上传GIF,请访问帖子开头的我的个人博客上的原始链接,以观看实况转播)

我们可以使用Fastlane Slack Action获得相同的结果。 页面上有示例代码,用于配置附件属性和JSON有效负载。 如果您当前正在使用Fastlane,则最好使用Fastlane配置通道并在集成后操作中执行它。 在我们的情况下,我们可以配置松弛动作

 松弛( 
消息:“ Xcode Server完成集成!”,
频道:“#xcblog”,
成功:对,
有效负载:{
“构建日期” => Time.new.to_s,
“ Built by” =>“ Xcode Server”,
},
default_payloads:[:git_branch,:git_author],
附件属性:{
栏位:[
{
“ title”:“测试摘要”,
“ value”:“ $ XCS_ERROR_COUNT个错误和$ XCS_WARNING_COUNT个警告。”,
“短”:假
},
{
“ title”:“:机器人结果”,
“ value”:“ $ XCS_INTEGRATION_RESULT”,
“短”:true
},
{

“ title”:“在iOS设备上安装Build”,
“ value”:“ $ INSTALLABLE”,
“短”:假
},
{
“ title”:“ Git Branch”,
“ value”:“ $ XCS_PRIMARY_REPO_BRANCH”,
“短”:true
},
{
“ title”:“最新合并详细信息”,
“ value”:“ $ LATESTMERGE”,
“短”:假
}
]
}

我们必须在通道中定义Xcode Server变量,我们才能获得相同的结果。

Slack已成为DevOps和持续交付领域中的出色交流工具。 在提供来自持续集成服务器的更快反馈方面,它可以发挥非常重要的作用。 通过使用Apple自己的CI服务器对其进行配置,我们可以将Slack集成应用于iOS开发领域。 希望您会发现这篇文章有用,我迫不及待地看到大家开始使用Slack和Xcode Server组合来庆祝成功!

像XCBlog的 XCTEQ 发布的帖子一样 您可能还喜欢我们的一些服务,例如访客博客或Mobile DevOps(CI / CD)或测试自动化。 Github 搜索我们的 服务 ,开源项目, 或者在 Twitter Facebook Youtube LinkedIn 上关注我们 下载我们的 XCBlog iOS应用程序以离线阅读博客。

X CTEQ 一家专门从事基于Mobile DevOps,CI / CD,Mobile,AI / ML的测试自动化Checkout XCTEQ产品和服务的公司, 网址 http://www.xcteq.co.uk 或写信给我们info@xcteq.co。英国..