bitbucket - 如何在 BitBucket 中强制执行(拉取请求)合并提交消息的格式

标签 bitbucket

我们的团队正在迁移到 BitBucket。我们的工作流程需要对合并到主源存储库的代码的提交消息进行某些格式化。

每个开发人员都有一个(或多个) fork 。我们的工作流程是将功能/错误分支推送到分支并从该分支创建拉取请求。另外两个开发人员必须在合并之前审查并+1 拉取请求。

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

我已阅读此处的文档:https://scriptrunner.adaptavist.com/latest/bitbucket/StashMergeChecks.html它有几个非常具体的示例,但与我们的用例无关。我还没有找到关于如何创建合并检查的良好的通用引用。

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

mergeRequest.message == "My Message"

但我需要它来检查正则表达式。
如果消息不符合正则表达式,如何编写预合并 Hook 来拒绝合并?

添加

从文档来看,条件检查脚本代码似乎是强制执行此条件的正确位置。脚本可以添加在Repository Settings > SCRIPTRUNNER > Script Merge Checks > Conditional merge check .有一长串用于条件合并检查的示例,包括以下内容:
  • 特定组中的当前用户
  • 更改的文件包含 .XYZ 文件
  • 更改敏感目录中的文件
  • 目标分支发布

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

    最佳答案

    在将这个问题推到次要位置几周后,在这里 OP。问题解决了。您可以在不使用插件的情况下根据正则表达式检查合并提交消息。对于那些遇到同样问题的人来说,解决方案在这里。
    首先,找到与编写合并检查脚本最相关的对象的文档比本来应该更具挑战性。所以这里有几个当前 6.3.0 API 的链接:

  • PullRequest - 最后,我的脚本没有使用这个对象,但是拉取请求与合并请求密切相关,其他人可能需要文档。
  • MergeRequest - 这个对象有一个方法来确定上下文(见下文)。

  • 其次,合并检查脚本在两个不同的上下文中触发:(1) 当 bitbucket 试图确定它是否应该启用/禁用 时。合并 拉取请求页面上的按钮,以及 (2) 当有人点击 时合并 合并拉取请求对话框上的按钮。在第一个上下文中,合并消息为空,因此它无法匹配正则表达式。无论如何,在这种情况下禁用按钮是没有意义的。我真的只希望在第二个上下文中进行检查。所以脚本需要一种方法来区分上下文。
    三、消息对象是一个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)
    

    关于bitbucket - 如何在 BitBucket 中强制执行(拉取请求)合并提交消息的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55621762/

    相关文章:

    javascript - 将环境变量与 BitBucket 结合使用

    git - 克隆 Git 存储库,以便我可以将其更新为原始版本,但将我的更改分开

    debian - W : Failed to fetch http://httpredir. debian.org/debian/dists/jessie-updates/main/binary-amd64/Packages 404 未找到

    Git工作流程(Dev>Staging>Live)基本技术问题

    git - BitBucket 推送功能分支模型

    linux - Git 服务器 - 自动(重新)推送

    git - 从 git 缓存中删除的文件不会反射(reflect)在远程存储库上

    bitbucket - Jenkins Bitbucket Branch Source Plugin 如何只构建 master 和 PR?

    bitbucket - bitbucket中的增强功能和提案有什么区别

    git - mux_client_request_session : session request failed: Session open refused by peer