TeamCity在工件zip名称中显示分支

jlb*_*b83 2 git teamcity branch

我在TeamCity中建立了一个要构建工件zip文件的构建。

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

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

out/mypackagedfiles/** => MyBuild_%build.number%.zip
Run Code Online (Sandbox Code Playgroud)

会给我一个zip文件,例如MyBuild_46.zip

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

out/mypackagedfiles/** => MyBuild_%build.number%_%vcsroot.branch%.zip
Run Code Online (Sandbox Code Playgroud)

给出my_great_feature.zip一个名为的目录MyBuild_46_feature

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

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

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

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

==编辑==

基于下面的oryades答案(看起来像linux bash命令行),我将其转换为Windows PowerShell,如下所示:

  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']"
    
    Run Code Online (Sandbox Code Playgroud)

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

ory*_*des 5

您可以在构建期间创建env变量,只需创建包含以下内容的构建步骤:

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

在接下来的构建步骤中,可以将%env.branch_name%用作具有必需​​值的变量。

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

  • 谢谢,这太棒了。我在对上面原始问题的编辑中将其转换为 PowerShell 版本,因为这更适合我。 (2认同)