【问题标题】:How to choose branches in TeamCity build step?如何在 TeamCity 构建步骤中选择分支?
【发布时间】:2015-12-04 11:38:04
【问题描述】:

我正在尝试使用参数设置构建,这个参数在几个构建步骤中使用,它描述了 Jira 票号,并且来自 Jira。

现在的问题是我需要改进此构建以使用此票号结帐分支,或者如果我没有具有此类名称的分支 - 在主分支上运行构建。

我不能将“更改”选项卡用作其完全自动化的过程。 我也不能在构建步骤中使用 git 命令。

是否可以在构建步骤中获取来自 VCS 的所有分支的列表并在构建步骤的脚本中设置结帐分支?

使用 TeamCity 9.1.1 版。谢谢你,祝你有美好的一天。

使用 git 的解决方案:

  • 设置独立作业结帐规则以在代理上结帐
  • 在依赖构建中添加构建步骤:

    #!/usr/bin/env bash
    
    test_branch=`git branch -a | tr -d "remotes/origin/" | grep %default_branch%`
    
    if [ -z "$test_branch" ]; then
      test_branch="master"
      echo "Switching to branch: " $test_branch
      ruby -e "puts \"##teamcity[setParameter name='default_branch' value='$test_branch']\""
    else
      echo "Switching to branch: " $test_branch
      ruby -e "puts \"##teamcity[setParameter name='default_branch' value='%default_branch%']\""
    fi
    

我正在寻找可以让我避免使用 git 的 TC 功能。只是为了检查我们在+:refs/heads/* 中是否有这样的分支。

【问题讨论】:

  • 您能否阐明您尝试设置的构建步骤,包括 vcs 结帐步骤?你在构建过程中得到这个票号吗?您是否也检查过TeamCity integration for JIRA 是否适合您的需求?
  • 嗨,Rémi,票证使用自己的参数触发构建,此构建使用另一个参数触发依赖构建。结果我们在构建链中有 2 个构建,我想在第一个构建中设置结帐分支,并在第二个构建中执行结帐的所有操作。我从一开始就获得票号。实际上我们正在使用自己的集成解决方案,所以不幸的是它不适合我的需求。谢谢。
  • 我将尝试更清楚地描述:我们有带有 master 分支的测试存储库,有时如果它是 dev 存储库中的关键更改,我们正在创建我们自己的具有相同名称(票证名称)的测试分支。 Jira 触发 TC 作业并在那里发送分支参数,所以我们正在使用这个 dev 分支准备环境,我们需要检查我们在测试 repo 中是否有这样的分支,如果是 - 签出这个以执行测试,如果没有 - 默认签出分支。
  • 当现有分支或带有 VCS ROOT 触发器的新分支发生更改时,为什么不让所有分支运行 team-city 测试作业?
  • 设置触发器并在更改时运行所有内容并不是一个好主意,因为所有报告都发送到 jira 并且应该仅在票证进入运行 CI 测试状态时触发。

标签: git teamcity


【解决方案1】:

半解决方案一(使用git):

  1. 在团队城市代理上设置结帐。
  2. 在代理上设置 git。
  3. 使用发布的相关 bash 命令创建构建步骤。
  4. 使用参数触发构建。

据我了解,此解决方案存在问题,如果构建已在队列中,则该参数无法发送到 VCS 根目录。只有在触发时才能设置。 同样在 TeamCity 的分支列中,不会显示任何个性化分支,只会显示 您将运行的任何内容。

解决方案二:

  1. 创建参数reverse.dep.*.teamcity.build.branch
  2. 使用参数触发构建。

此参数将发送以检查构建链中的所有构建。 TeamCity 将尝试使用此参数检出分支,如果它不存在,它将检出默认(主)分支。 作为所有依赖构建的 TeamCity 中分支列的副作用,将显示此参数。

所以现在解决方案 #2 解决了我的问题。

【讨论】:

    【解决方案2】:

    您可以查看此文档,该文档描述了如何正确配置 VCS ROOT 和作业以使用功能分支(您的用例的票证分支): https://confluence.jetbrains.com/display/TCD9/Working+with+Feature+Branches

    【讨论】:

    • 这是我第一次想到的,但不幸的是,它并不那么容易。我们必须以某种方式(不使用 git)获取所有分支的列表的问题,用票号比较它们,如果这个分支存在,我们必须检查它的非主分支。我认为这可能与标准 TC 功能有关。我已经知道如何使用 bash&git。所以也许更正确的问题是“如何在构建步骤中从 TC 接收分支列表”谢谢。
    • 一个丑陋的解决方案是使用 bash+git+curl 并且:1. 创建典型的 TC 构建配置参数 2. 使用 bash/curl 脚本通过 TC API 更新它,在构建链中以某种方式触发。
    猜你喜欢
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    相关资源
    最近更新 更多