如何在BitBucket中为(拉请求)合并提交消息强制实施格式

时间:2019-04-10 21:47:03

标签: bitbucket

我们的团队正在迁移到BitBucket。我们的工作流程要求对合并到主原始存储库中的代码的提交消息进行某种格式设置。

每个开发人员都有一个(或多个)叉子。我们的工作流程是将功能/错误分支推送到分支,并从该分支创建拉取请求。其他两名开发人员必须先审查并+1请求请求,然后才能将其合并。

当某人单击“合并”时,BitBucket将显示一个标题为“合并拉出请求”的对话框。此时,开发人员可以在单击第二个“合并”按钮之前编辑为合并记录的文本消息。这是需要符合特定格式的消息。

我在这里阅读了文档:https://scriptrunner.adaptavist.com/latest/bitbucket/StashMergeChecks.html它有几个非常具体的示例,但与我们的用例无关。对于如何创建合并检查,我还找不到很好的通用参考。

我可以编写一个条件来检查特定的字符串值:

mergeRequest.message == "My Message"

但是我需要它来检查正则表达式。 如果邮件不符合正则表达式,我该如何编写一个合并前挂钩来拒绝合并?

添加

从文档中看来,条件检查脚本代码似乎是实施此条件的正确位置。脚本可以添加到Repository Settings > SCRIPTRUNNER > Script Merge Checks > Conditional merge check中。有很多示例显示了条件合并检查的示例,包括:

  • 特定组中的当前用户
  • 已更改的文件包含.XYZ文件
  • 更改了敏感目录中的文件
  • 目标分支已发布

经过一些搜索和实验之后,我发现我可以根据提交消息阻止合并。但是到目前为止,我仅发现了将整个字符串与常量字符串表达式进行比较的示例。在此比较中,我还没有找到如何使用正则表达式。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用YACC之类的Bitbucket插件:

https://marketplace.atlassian.com/apps/1211854/yet-another-commit-checker?hosting=server&tab=overview

如果这不符合您的要求,则可以编写自己的代码: https://developer.atlassian.com/server/bitbucket/how-tos/hooks-merge-checks-guide/

答案 1 :(得分:0)

在将这个问题推迟几个星期后,在这里

OP。问题已解决。您可以使用正则表达式检查合并提交消息,而无需使用插件。对于那些遇到相同问题的人,这里提供解决方案。

首先,要找到与编写“合并检查”脚本最相关的对象的文档,这比应有的挑战更具挑战性。因此,以下是当前6.3.0 API的几个链接:

  • PullRequest-最后,我的脚本未使用此对象,但是pull请求与合并请求密切相关,其他人可能需要文档。

  • MergeRequest-该对象具有确定上下文的方法(请参见下文)。

第二,合并检查脚本在两个不同的上下文中触发:(1)当bitbucket试图确定是否应启用/禁用拉动请求合并按钮时>页面,以及(2)当有人单击合并拉取请求对话框上的合并按钮时。在第一个上下文中,合并消息为null,因此它无法与正则表达式匹配,因此在这种情况下禁用按钮无论如何都没有意义。我只希望检查在第二种情况下进行。因此,脚本需要一种区分上下文的方法。

第三,消息对象是Java String,因此脚本可以调用matches()方法来检查消息是否与正则表达式匹配。

在掌握了所有信息之后,编写脚本非常简单:

// the message regex
String pattern = "(PATTERN1|PATTERN2|etc)"
// reject if not dry-run and
//           message doesn't match regex
! mergeRequest.isDryRun() &&
    ! mergeRequest.message.matches(pattern)