持续集成 通过 Groovy 脚本修改 Jenkins build description

布道师玄柯 for 郑州软件测试圈 · 2018年05月11日 · 2446 次阅读

背景

  • 之前写了 python 脚本来实现 ios 打包并上传到蒲公英,但是因为公司产品比较多,维护成本也随之增大,最后 python 脚本需要传递 9 个参数,实在是恐怖。
  • 于是下决心将 ios 的打包转移到 fastlane 上,配好之后体验确实不错,自己需要配置的东西比较少,Jenkins 的 job 瞬间间接了不少。

问题描述

  • 之前自己用 python 脚本,把包上传到蒲公英之后,因为整个过程都是可控的,所以结合【set build description】,很容易就可以将下载包的二维码展示到 Jenkins 上面。
  • 但是改用 fastlane 之后,所有的操作都是工具自己去完成的,上传到蒲公英之后的 url 等信息也拿不到。但是如果不将蒲公英对应包的链接展示在 Jenkins 上,那会非常不方便,开发或者产品想要包的时候,还需要去蒲公英找包。

解决方案

  • 查看 build console log 的时候发现,其实 fastlane 的日志里面已经将上传包之后的链接打印出来。比如:
[11:15:12]: Upload success. Visit this URL to see: https://www.pgyer.com/TVow

复用之前的脚本

【set build description】插件

  • 直接用正则表达式匹配 log 中的链接。

  • 但是因为 fastlane 打印的日志是有颜色的,所以匹配出来的 url 是:

https://www.pgyer.com/TVow[emdxxxxxxxxxxxxxx   (后面会有和颜色相关的一些字符,很不爽)
  • 所以通过链接,并不能直接跳转到蒲公英,尝试了多种匹配方式,无果。

groovy 脚本实现

  • 没办法,最后想到既然【set build description】可以实现改变 description,那么必然是有什么方法可以调用的。于是在网上查到可以通过 groovy 实现,于是通过【Groovy PostBuild】插入一段 Groovy 脚本。
def m = manager.getLogMatcher("^.*Visit this URL to see: (.*)\$")
if(m != null && m.matches()) {
  log_str = m.group(1)
  log_str = log_str.substring(0, 26)
  def currentBuild = Thread.currentThread().executable
  def description = "<a href='${log_str}'>jump to pgyer</a>"
  currentBuild.setDescription(description)
}
  • 上面脚本中截取字符串时,substring(0, 26) 这里 26 是写死的,因为所有的蒲公英连接的长度是一定的。最终实现了打包之后可以直接通过链接跳转到蒲公英:

后记

  • 通过 Groovy 来操作 Jenkins build 过程应该有很多玩法,我还没展开去了解。感兴趣的同学可以自己了解以满足自己工作中的需求。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册