【问题标题】:TeamCity show branch in artifact zip nameTeamCity 在工件 zip 名称中显示分支
【发布时间】:2026-02-07 09:00:01
【问题描述】:

我在 TeamCity 中有一个构建,我想在其中构建一个工件 zip 文件。

我可以使用Edit Configuration Settings => General Settings => Artifact Paths 来设置要压缩的文件和压缩文件名。

我想让名称更具描述性,TeamCity 允许我使用参数,例如:

out/mypackagedfiles/** => MyBuild_%build.number%.zip

会给我一个像MyBuild_46.zip这样的压缩文件。

我还想包括构建构建的分支。这也可用作 TeamCity 参数,但它包含正斜杠(例如 feature/my_great_feature)。因此,如果我在 Artifact Paths 配置中使用它,我会得到一个包含 zip 文件的目录:

out/mypackagedfiles/** => MyBuild_%build.number%_%vcsroot.branch%.zip

在名为MyBuild_46_feature 的目录中提供my_great_feature.zip

我想做的是以某种方式从分支名称中删除/替换正斜杠以获取一个 zip 文件,例如 MyBuild_46_feature_my_great_feature.zip

我不担心确切的格式 - 只要分支名称是可识别的。

关于可能存在的想法 - 但我还找不到:

  • 创建一个新参数,该参数从vcsroot.branch 派生经过清理的分支名称
  • Artifact Paths 配置中的某种字符串操作

== 编辑 ==

根据下面的 oryades 答案(类似于 linux bash 命令行),我将其转换为 PowerShell for Windows,如下所示:

  1. 设置工件以使用 %env.branch_name%(这还需要在“参数”选项卡中设置临时/虚拟值以运行构建)
  2. 使用运行器类型 = PowerShell 创建构建步骤
  3. 将脚本设置为源代码并粘贴以下内容:

    $branch_name="%vcsroot.branch%".replace('/','_')
    echo "Sanitised branch for Artifact zip = " $branch_name
    echo "##teamcity[setParameter name='env.branch_name' value='$branch_name']"
    

请注意,TeamCity 允许您替换 %vcsroot.branch% - 这是在 PowerShell 运行之前发生的替换。感谢Team City and Power Shell 的提示

【问题讨论】:

    标签: git teamcity branch


    【解决方案1】:

    您可以在构建过程中创建环境变量,只需创建一个包含以下内容的构建步骤:

    branch_name=$(echo %vcsroot.branch% | sed 's/\//_/')
    echo "##teamcity[setParameter name='env.branch_name' value='$branch_name']"
    

    在接下来的构建步骤中,您可以使用 %env.branch_name% 作为具有所需值的变量。

    https://confluence.jetbrains.com/display/TCD10/Build+Script+Interaction+with+TeamCity

    【讨论】:

    • 谢谢,这太棒了。我在对上述原始问题的编辑中将其转换为 PowerShell 版本,因为它更适合我。
    最近更新 更多