Bamboo 可以在 JIRA 中更改票证的状态吗

Posted

技术标签:

【中文标题】Bamboo 可以在 JIRA 中更改票证的状态吗【英文标题】:Can Bamboo change status of tickets in JIRA 【发布时间】:2013-05-12 08:15:25 【问题描述】:

我们有一个使用 JIRA 集成设置的 Bamboo 环境。

每当开发人员向 git 提交一个已修复的问题时,他都会在提交消息中注明问题编号,而且我确实可以在 Bamboo 中看到该问题的正确链接,该链接指向 JIRA 中的票证。

我想知道 - Bamboo 有没有办法自动将提交给构建的每个工单的工单状态设置为“准备好进行 QA”?

例如,如果我在 JIRA 中启动一个提交 ISSUE-123 的新构建,Bamboo 会将 ISSUE-123 状态设置为“准备好进行 QA”?

【问题讨论】:

【参考方案1】:

是的,Bamboo 可以更改 JIRA 中的工单状态。但是你需要做一点魔法。

首先,你需要学习如何使用CLI plugin for JIRA。这是一个很棒的工具(值得一提的是,它已成为 2010 年 atlassian codegeist contest 的赢家),用于自动执行与 JIRA 相关的例行任务。实际上,这个工具的几个版本允许通过命令行脚本自动化几乎所有的 Atlassian 工具(JIRA、Confluence、Bamboo、Crucible、Fisheye、Stash)。尽管它有点慢,但它几乎可以做任何事情,包括问题状态更改。请注意,它既可以用作 JIRA 插件,也可以用作独立的命令行工具。您需要在运行 Bamboo 构建代理的机器上安装 独立 版本的 JIRA CLI 插件(这里是 installation guide)。

为了在 JIRA 中快速跟踪问题(atlassian 开发人员如何调用自动更改问题状态的过程),您需要使用以下命令:

java -jar jira-cli-3.3.0.jar --action progressIssue --issue ISSUE-123 --step WORKFLOW_TRANSITION_ID --user USERNAME --password PASSWORD --server http://yourjira.company.com 

用您的实际值替换模板选项值。重要的值是WORKFLOW_TRANSITION_ID,只要它指定将使用哪个工作流转换来将您的 JIRA 问题转换为您实际需要的状态。为了找到WORKFLOW_TRANSITION_ID,您需要检查用于 ISSUE-123 的工作流程。通常,您将快速跟踪具有相同问题类型的问题(例如,Bug、Enhancement 等)。此外,通常具有相同问题类型的问题具有相同的工作流程(例如,Bug 工作流程)。

您需要进入 JIRA 的管理部分并找到该工作流程。然后,您需要找出所有转换的 ids,这些转换会导致更新后您希望问题具有的状态。在您的情况下,您需要找到“准备好进行 QA”状态及其所有传入转换。记下这些转换的 id 并稍后使用它们以替换模板中的 WORKFLOW_TRANSITION_ID 值。

如果您有 id 为 51、62 和 83 的转换,那么您的脚本将如下所示:

java -jar jira-cli-3.3.0.jar --action progressIssue --issue ISSUE-123 --step 51 --user USERNAME --password PASSWORD --server http://yourjira.company.com
java -jar jira-cli-3.3.0.jar --action progressIssue --issue ISSUE-123 --step 62 --user USERNAME --password PASSWORD --server http://yourjira.company.com
java -jar jira-cli-3.3.0.jar --action progressIssue --issue ISSUE-123 --step 83 --user USERNAME --password PASSWORD --server http://yourjira.company.com

如果您需要快速跟踪其他问题类型以及工作流程的问题,您将需要找到这些工作流程并找到导致“准备好进行 QA”状态(如果工作流程实际使用它)的转换,就像你用以前的工作流程做了。

如果您对所有可用的命令行选项及其值感到困惑,请使用JIRA CLI documentation 作为命令行选项参考。

在您弄清楚脚本的内容后,将快速跟踪问题到所需状态(在您的情况下为“准备好进行 QA”),您需要将其包含到 Bamboo 使用的构建脚本中。

下一步是将快速跟踪脚本的内容存储到文件中:

Bash (build.sh):

while getopts "j:" opt; do
  case $opt in
    j)
      java -jar jira-cli-3.3.0.jar --action progressIssue --issue $OPTARG --step 51 --user USERNAME --password PASSWORD --server http://yourjira.company.com
      java -jar jira-cli-3.3.0.jar --action progressIssue --issue $OPTARG --step 62 --user USERNAME --password PASSWORD --server http://yourjira.company.com
      java -jar jira-cli-3.3.0.jar --action progressIssue --issue $OPTARG --step 83 --user USERNAME --password PASSWORD --server http://yourjira.company.com
      ;;
    \?)
      echo "No issue key has been passed: -$OPTARG" >&2
      ;;
  esac
done

请注意,它使用 -j 选项将脚本的 JIRA 问题密钥指定为命令行参数。

其他一切都取决于您使用的构建管理工具(Ant、Maven 或只是简单的 bash)。但是,无论如何,您都可以将 jira 密钥(竹子从 git 注释中为您获取)作为您在 Bamboo 上使用的构建脚本的命令行选项传递:

重击:

./build.sh -j $bamboo.issueKey 

蚂蚁:

ant -Djirakey=$bamboo.issueKey

Maven:

mvn -Djirakey=$bamboo.issueKey

您需要的最后一步是为您使用的构建管理工具调整快速跟踪代码。

Ant (build.xml):

<exec executable="bash" dir=".">
   <arg value="build.sh"/>
   <arg value="-j"/>
   <arg value="$jirakey"/>
</exec>

对于 Maven,它要复杂得多。使用maven exec 插件从您的构建脚本中执行build.sh

为了避免编写复杂的构建脚本,您可以选择在 Bamboo 上add standalone build step,它将在成功构建后运行。但是在这种情况下,您将无法在构建仍在运行时更新问题状态(实际上,不确定,您想这样做)。通常添加独立构建步骤足以实现您想要的。只需在“参数”字段中输入./build.sh -j $bamboo.issueKey,同时在 Bamboo 上添加新的构建步骤。

注意:我没有测试任何这些脚本,因为目前我没有安装竹子,也没有机会尝试 CI 服务器的快速跟踪。因此,请小心并确保您了解自己在做什么。

希望我的建议能帮助你实现你想要的。祝你好运!

【讨论】:

感谢您提供如此详尽和深思熟虑的答案!我以前不知道 CLI 插件。这看起来是个不错的方法。 嗯,我似乎无法从竹子构建中访问 $bamboo.issueKey。不要以为它实际上是一个竹变量【参考方案2】:

我知道已经接受了一个答案,而且确实是正确答案。

我认为 Atlassian CLI 缺少的是在 OSX 上安装工具的正确 Homebrew 公式。

这是我使用的公式。

#

require 'formula'

# Homebrew formula to install atlassian CLI tools

class NewsAtlassianCli < Formula

    version "3.6.0"

    homepage 'https://marketplace.atlassian.com/plugins/org.swift.atlassian.cli'
    url 'https://marketplace.atlassian.com/download/plugins/org.swift.atlassian.cli/version/360'
    sha1 'a56aed6b6fe19a3b59998f9aed8da0077bc9d441'

    # dependencies (if any)

    # Install
    def install

        # this is garbage
        puts "Cleaning up windows stuff and examples..."
        rm Dir["*.bat"]
        rm_rf "examples"

        # patch and move
        puts "Patching shell scripts and moving them to bin..."
        # patch by updating path to lib folder
        Dir['*.sh'].each do |f|
            system "sed -i -e 's,/lib,/../lib,g' #f"
        end

        # move the all to bin
        Dir.mkdir "bin"
        Dir['*.sh'].each  |f| mv f, "bin/atlas-#f.sub('.sh', '')" 

        prefix.install_metafiles
        prefix.install Dir['*']
    end

    test do
        puts "version: #version"
    end
end

如您所见,它清除了所有 Windows 噪音和示例。

然后它会修复文件夹结构。所有工具集通常都有 binlib 和其他文件夹。 Homebrew 然后在 /usr/local/bin、*/usr/local/lib 等中创建链接。

Atlassian 忽略此规则,原因我不太清楚,因此工具无法正确安装。

修复它的一种方法是将所有可执行文件移动到 bin 文件夹,并通过将所有对 lib/... 的引用替换为 .. 来修补它们。 /lib/...

我还决定删除 .sh 并在所有可执行文件前加上 atlas-,因为 atlas-all 好得多>allall.sh

我仍在考虑将这个公式贡献给 Homebrew。

【讨论】:

以上是关于Bamboo 可以在 JIRA 中更改票证的状态吗的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Jira 中的状态更改触发 Jenkins 作业

JIRA 更新时的 Bamboo 触发器,反之亦然

在 Ant Bamboo 构建中使用 Jira 或默认项目版本

Bamboo 卡在验证 Jira 服务器

Jira On Demand 与 Bamboo 的集成

集成使用 svn、Jira 和 Bamboo 的任何最佳实践? [关闭]