2020 年上半年,Atlassian 在 Jira Cloud 上推出了一个十分不错的新性能 Jira Automation,将弱小的无代码自动化性能带入 Jira Cloud 原生性能中,不必装置额定的插件,就能够十分不便的实现如下能力:
- 帮助团队在不必编码的状况下,将很多反复且乏味的工作自动化,帮忙团队专一在价值更高的工作上;
- 在多团队、多工具的状况下,流程会因为每个人对于执行细则和工具应用的了解不一样而变得凌乱。自动化能够帮忙团队标准化的梳理和组织各种流动,而 Jira Automation 为其提供了高效而低成本的实现形式;
- 通过 Jira Automation 能够十分不便的集成工作中应用的 IM 工具,极大升高信息同步老本,提高效率;
- 通过 Jira Automation 能够帮忙团队更加零碎的进行编码到产出的 Devops 实际。
作为 Jira Cloud 的用户,咱们尝试在工作中逐渐引入 Jira Automation,进行了一些摸索和实际,这篇文章梳理和总结了这过程中的一些教训和心得和大家进行分享。
性能介绍
治理页面及入口
Jira Automation 的治理界面比拟简洁,治理界面的规定页面,依照规定类型:全副规定、全局规定、我的项目规定对所有自动化规定进行了分类,用户能够自定义标签进行规定过滤。列表的每个条目展现了规定名称、拥有者、项目名称,开闭状态开关。单条规定能够进行复制、移出和导出操作。
其入口有两处:
- 每个我的项目的项目管理侧边栏中有 Jira Automation 的入口,能够间接进入该项目标治理界面,看到属于该我的项目,以及拥有者为以后用户的规定列表。
- 在零碎设置的“System”页面侧边栏有另外一个入口,须要有系统管理员权限能力拜访而,进入后能够看到所有的规定。
治理页面的右上角有“创立规定”按钮,旁边的“…”菜单中有“性能洞察”能够看到每条规定的执行次数,总时长和均匀时长以及执行后果的数据。菜单的其它性能根本都是惯例操作,这里不再赘述。
治理页面中还提供了“审计日志(Audit Log)”以及“模板库(Library)”。审计日志能够看到每次规定执行的详细信息,模板库提供了一些惯例的规定模板。
规定创立
规定详情
创立规定性能中能够配置规定的详细信息以及规定的过程定义。在规定详情中除了通用的规定名称、形容外,还能够进行如下定义:
- 规定的应用范畴:是单个我的项目实用还是多我的项目共用;
- 容许其它规定触发;
- 谬误告诉的形式;
- 规定的拥有者;
- 规定的执行者。
规定过程定义
上述规定详情定义好当前就是 Jira Automation 性能的重头戏规定的过程定义了。Jira Automation 将规定形象成了四类组件:
- 触发器组件(trigger)
- 条件判断组件(condition)
- 执行组件(action)
- 分支组件(branch)
触发器(trigger)
每次创立自动化规定,第一个须要定义的就是触发器组件,该组件作为规定的输出,规定中的后续判断和执行均依赖这个组件进行触发。Jira Automation 将触发器组件分成了四类:
- 事务触发器
这类触发器是目前咱们会频繁应用到的触发器,这类触发器能够定义 Jira 中我的项目(Project)、迭代(Sprint)、版本(Version)、事务(Issue)的各种变动作为触发条件。是内容最为丰盛的一类触发器,基本上笼罩了 Jira 上与事务相干的所有应用场景。
- DevOps 触发器
这类触发器是用于代码、分支、构建、公布过程作为触发条件的触发器,须要这几类工具和 Jira 零碎进行集成能力更好的应用。目前对这类触发器的应用咱们在进行摸索。
- Integrations 触发器
这是一个很有意思的触发器类型,定义这类触发器的时候 Jira 会生成一个 Webhook URL 用于接管其它零碎收回的 webhook 申请,并能够承受 issue key 作为申请参数或者申请 body,或是触发一条 JQL 查问,或是不带任何数据的申请,用于触发后续规定。
- Scheduled 触发器
这是一个自定及打算安顿的触发器,用于指定工夫和指定周期触发后续规定,共事也反对 CRON 表达式的高级定义。
条件判断组件(Condition)
条件判断是当规定定义的触发条件触发后,用于判断后续规定如何执行的组件,Jira Automation 的条件判断绝对比较简单,而且只能进行很简略的嵌套,但得益于 JQL 的弱小过滤能力以及 Smart Values(下文会介绍)的灵活性,根本能们组绝大部分应用场景,上面筛选常常应用到的几项进行介绍:
- Advanced compare condition
用于比拟两个值的条件判断,反对等于、蕴含、大小等根本逻辑,也能够应用正则表达式匹配进行判断,条件为真则继续执行后续规定。
- If / else block
根本的 if else 判断,上面能够在嵌套一层除 If / else block 之外的条件判断组件,并能够多个条件组成与的关系。满足分支条件则继续执行后续规定。
- Issue fields condition
用于判断事务的字段是否符合条件的组件,反对等于或蕴含逻辑,同时能够比拟以后事务与触发事务、父事务、史诗事务、指标事务等关联事务的字段。
- JQL condition
Jira 传统艺能 JQL 的条件过滤,过滤出来的数据会进入后续规定的执行。和传统 JQL 不太一样的是,这里能够应用 smart-values,强强联合。
执行组件(Action)
这类组件没有什么特地的基本上就是 Jira 性能操作了,分成了四类:
- Issue actions
Jira 事务的增删改查操作基本上都在这里。
- Notifications
用于进行告诉的性能都在这里,咱们目前罕用的次要是 Send email 和 Send web request。
这里须要重点介绍一下的是 Send web request 性能。该性能能够自定义一个 http 申请,包含 header 和 body,并且能够把申请的 response 保留到 samrt-values 变量中,用于后续的规定执行。目前咱们基本上都是通过这个性能集成办公 IM 的机器人,用于 Jira 上信息的同步。
- Jira Service Management
Service desk 的一些操作,咱们没有用,就不介绍了。
- Software
Jira 上对于版本的操作,能够创立、公布、勾销公布 Jira 我的项目中定义的版本,版本名称能够应用正则表达式进行匹配。
- Advanced
这部分是 Jira Automation 特有的能力,其中 Look issues,能够取得 JQL 过滤出来的事务数据,Create variable 能够给 smart value 自定义一个名称。
分支组件(Branch)
应用分支组件能够将规定中一部分事务数据分离出来独自进行解决,而不会收到其余规定局部的影响。
- Advanced branching
独自处理事务数据中某个 smart value 对象。能够给指定的 smart value 对象定义别名用于后续规定的解决。
- Branch rule / related issues
在 Jira 中事务常常是相关联的,通过这个性能能够筛选出指定关联的事务用于后续规定的解决。
Smart Values
Smart Values 是配合 Jira Automation 应用的又一弱小个性,应用 smart values 能够在 automation 中十分不便的拜访和操作 Jira 事务的数据。你甚至能够在 automation 的 web request 申请体中应用 smart values,能够把你想要的数据通过 web 申请发送给第三方零碎,实现数据同步。
- 能够拜访和操作简直所有的 Jira 事务数据,包含:Issue、Changelog、Commit、User、Sprint、Version 等,以及 Jira Automation 自定义的一些数据,如:lookupIssue、webhookResponse 等。上面例举官网文档中给出的示例,如果对 jira restful api 比拟理解的,看到这些内容应该很相熟,和 restful 中的定义根本保持一致。
- 返回事务中的形容字段
{{issue.description}}
- 返回事务的 key
{{issue.key}}
- 返回事务的以后状态数据
{{issue.status}}
- 反对列表操作,包含:遍历、索引取值、求和均匀等。
- 返回子工作的均匀故事点数
{{issue.subtasks.Story Points.average}}
- 遍历事务的修复版本,并用“-”连贯
{{issue.fixVersions.name.join("-")}}
- 遍历事务的修复版本,打印版本名称和公布日期,应用“,”号分隔
{{#issue.fixVersions}}{{name}} {{releaseDate}}, {{/}}
- 字符串操作,包含:大小写和数字的转换、拼接,正则表达式匹配,html、json、xml、url 的 encode 操作等。
- 字符串比对
{{issue.summary.equals(“hello world!”)}} -> false
- 字符串正则表达式匹配
{{issue.summary.match(".*(lo).*")}} -> lo
{{issue.summary.match(".*(o).*")}} -> [o, o]
- 字符串替换
{{issue.summary.replace("Hello","Goodbye")}} -> Goodbye World!
smart values 非常灵活,想进一步理解的能够参考官网 smart values 帮忙文档。
实际案例
通过一段时间的摸索,咱们在 Jira Automation 上也积攒了一些实际,这里以定时工作、工作模板、版本跨我的项目同步、版本信息同步第三方工具为例子和大家进行一下案例分享。
Jira 及 Confluence 备份
在 Jira Automation 公布前,Jira 和 Confluence 的定期备份须要管理员在产品中手动进行,当然也能够通过脚本调用接口主动进行备份,然而须要一个服务器来稳固的执行脚本。Jira Automation 提供了十分不便低成本的解决形式。
- 设置 Scheduled 触发器
这里咱们应用 cron 表达式定义备份打算,每周三 12 点(零碎提醒这里是 UTC 工夫,也就是 CTS 20 点)进行触发备份工作。
- 设置 Action
在这个规定中咱们设置了两个 action,一个通过 send web request 调用 Jira 和 Confluence 的备份接口,另一个承受备份接口返回的 response,记录在审计日志中,用于查看跟踪备份的执行后果。
(1) Action 1: Send web request
在 request 中填上接口要求的 header 数据和 post body 数据就能够了,这里须要留神的是,Action 2 的执行须要勾选上 wait for response 选项,这样 response 会保留在 {{webhookResponse}} 的 smart value 中,用于后续步骤的执行。
(2) Action 2: Add value to the audit log
上一步设置好后,只须要将{{webhookResponse}} 填入 log message 中就能够了。
规定执行后就能够在规定的审计日志中看到每次执行的状况以及,接口返回的后果。
创立 Epic 时主动创立其子工作
在没有 Jira Automation 之前,如果不装置额定插件基本上没有方法在创立史诗工作时创立一些配套的子工作,从而造成一个史诗工作的模板。Jira Automation 只须要简略的几步操作就能解决这个问题。
- 设置触发器
应用 Issue created 组件作为触发器,该触发器不须要额定的设置,只有有事务被创立就会触发。
- 过滤出咱们须要的事务类型
在触发器被触发后咱们只须要过滤出咱们须要的事务就能够了,条件判断的设置也非常简单,Issue Type 等于 Epic 就能够了。
- 创立子工作
接下来只须要应用创立事务组件创立子工作就能够了。
创立子工作时会有一些非凡的设置:
- Epic Link 须要设置为 Trigger issue,这样工作才会关联到条件判断过滤出来 Epic 下。
- 事务摘要中须要应用 {{triggerIssue}} 标记是哪个 Epic 的子工作,不然所有 Epic 下的工作会同名,不太容易辨别进去。
同步开发公布的版本到施行侧的我的项目
在私有化部署产品开发过程中,迭代公布的版本不肯定都会给客户进行部署。同时开发和施行的工作别离在两个 Jira 我的项目中进行治理,迭代公布版本在开发我的项目中进行治理,客户侧的版本升级需要在施行我的项目中进行治理,所以须要将客户侧可降级的版本公布从开发我的项目同步到施行我的项目中。Jira Automation 能够好的防止版本同步的提早和人工同步时可能产生的错误操作。
- 设置触发器
这里咱们应用 Version released 作为触发器,应用正则表达式过滤掉不合乎版本命名标准的公布版本。
在设置完触发器后,咱们想在审计日志中记录一下公布的版本名称,不便后续问题排查。因而设置了一个增加审计日志的 action,记录 {{version.name}} 这个 smart value。
- 设置条件判断组件
因为咱们只心愿同步指定开发我的项目中公布的版本到施行我的项目中,因而这里咱们应用 {{version.project.key}} 进行了正则匹配过滤,只承受 PI 和 HZPI 两个我的项目公布的版本数据。
- 后续创立和公布版本的执行
通过下面两部后就过滤出了咱们须要的版本数据,接下来只有执行创立和公布版本的过程就能够达到目标了。这里以公布版本为例,创立版本操作一样,只须要把执行组件由公布版本改为创立版本即可。
同步版本中修复的 bug 到 IM 工作群
版本公布后施行部门的项目经理或者客户胜利经理想疾速理解以后公布的版本中修复能哪些 bug。以前咱们都是通过在 Confluence 上公布 release notes 文档的形式进行信息同步,然而文档同步时效性比拟差,而且项目经理或者客户胜利经理在客户现场时拜访 Confluence 也不太不便。Jira Automation 很好的解决了这个问题,将信息间接同步到 IM 工作群,项目经理或者客户胜利经理能够及时不便的看到这些信息,从而进步了信息的触达率和沟通效率。
- 设置触发器
和下面的案例一样,咱们还是应用 Version released 组件,应用正则表达式过滤出咱们须要发送的版本。
- 过滤出须要同步的 Bug
接着咱们须要过滤出对应版本中修复的 bug,这里咱们应用 Looup issues 组件,在这个组件中咱们应用 JQL 过滤出这些 bug,并保留到 {{loopupIssues}} 这个 smart value 中用于后续规定执行时调用。
- 发送 Bug 数据到 IM 工作群
最初咱们只需将数据依照 IM 指定的格局发送到 IM 服务接口就能够了。
这里有一个十分有意思的能力,在 web request 的 post body 中,咱们能够利用 smart values 提供的列表能力嵌套在 json 数据中,发送 request 时,Jira Automation 会主动渲染出数据并实现发送,从而实现多个 bug 的数据在一个 IM 音讯中发送,而不必发送多条 IM 音讯净化群信息。
{
"msg_type": "post",
"content": {
"post": {
"zh_cn": {"title": "{{version.name}} 公布,修复 bug 清单",
"content": [{{#lookupIssues}}{{^last}}
[{
"tag": "a",
"href": "{{url}}",
"text": "{{key}}"
},
{
"tag": "text",
"text": ":{{summary}}"
},
{
"tag": "text",
"text": "@{{reporter.displayName}}"
}],
{{/}}{{/}}
// 此处是渲染 json 数据时最初一条记录没有结尾逗号的解决
{{#lookupIssues}}{{#last}}
[{
"tag": "a",
"href": "{{url}}",
"text": "{{key}}"
},
{
"tag": "text",
"text": ":{{summary}}"
},
{
"tag": "text",
"text": "@{{reporter.displayName}}"
}]
{{/}}{{/}}
]
}
}
}
}
最初 IM 工作群中看到的成果如下,项目经理或者客户胜利经理如果想进一步理解 bug 修复的具体情况,能够间接点击链接关上查看:
总结
总结下来,Jira Automation 是一个操作简略然而功能强大的自动化工具,它能把 Jira 上很多须要反复人工劳动的工作以组件拖拽配置的形式进行自动化,极大升高了自动化的门槛。当然除了产品性能值得称赞之外,该款产品的设计思路和形象逻辑也十分值得咱们学习。
参考资料
Jira Automation Cloud 版本官网文档:
https://support.atlassian.com…
Smart-values Cloud 版本官网文档:
https://support.atlassian.com…