如何从 Jenkins 的提交消息中获取 JIRA 问题编号

How can I get JIRA issue number from a commit message in Jenkins

我使用 Gitlab 进行源代码管理,使用 jenkins 进行 CI 作业,使用 JIRA 进行问题跟踪。

一旦我在 gitlab 中提交了一个问题编号,例如 "Project-123 edited demo file.",我就有了一个触发构建的 jenkins 钩子。 我有 JENKINS 的 Jira 插件并通过工作流操作使用 Progress JIRA 问题。 我有一个分为两部分的问题:

  1. 我用于搜索问题的 JQL 是:project=PROJ and status="Build Started" and updated >= "-15m" 我的工作流程操作是 Jenkins 构建成功。 但是,如果我有多个构建 运行,当第一个构建成功完成时,无论第二个构建如何结束,它都会将两个问题都转换为“构建成功”。 我想要一种方法,我可以使用 jenkins 的 SCM 更改中的提交消息填充 $ISSUE_ID jira 插件,这样我就可以指定要转换的问题。
  2. 如果构建失败,则以不同的方式推进工作流程。

我最终使用了变通方法。这是我解决每个问题的方法: 1- 我写了一个 shell 脚本,它通过请求构建的 api 来进行更改。然后我写了一个正则表达式来从提交消息中取出问题键。我只取出了一个问题的第一个参考。我在 jenkins 中使用 envinject 插件将问题 ID 作为构建 属性 注入,稍后由 JIRA 插件的进度问题通过工作流操作步骤使用。 这是 shell 脚本。

xmlfile=$(curl -s "http://*********:8080/jenkins/job/***/${BUILD_NUMBER}/api/xml?wrapper=changes&xpath=//changeSet//comment")
re="PRJ-([0-9])*"
if [[ $xmlfile =~ $re ]];
  then issueKey=${BASH_REMATCH[0]}
fi
re2="([0-9])+"
if [[ $issueKey =~ $re2 ]];
  then echo ISSUE_ID=${BASH_REMATCH[0]} > env.properties
fi

在 jira pugin 中,我使用 issueKey=PRJ-$ISSUE_ID 作为我的 jql 状态。

2- 对于这部分,我使用了 TriggerParametrizedBuild 插件并在当前构建失败或不稳定时开始构建。这个新版本仅将工作流程推进到 "In Progress"