我希望向TeamCity服务器提供一个git标签以进行构建。
我将标签(例如release_1.1
)作为参数传递给作业。因此,在作业内部,标签可用作%tag%
,但在版本控制设置
下,我看不到任何使用此参数的方法,以便服务器可以检出此标签。
是否有任何方法可以在设置中使用此参数以检出标签?
我希望向TeamCity服务器提供一个git标签以进行构建。
我将标签(例如release_1.1
)作为参数传递给作业。因此,在作业内部,标签可用作%tag%
,但在版本控制设置
下,我看不到任何使用此参数的方法,以便服务器可以检出此标签。
是否有任何方法可以在设置中使用此参数以检出标签?
点击此构建配置的所有VCS根后,点击“编辑”,然后:
然后,当您按下运行旁边的“…”按钮时,您将能够选择一个标签。
我已经成功实现了以下内容:
在“构建配置”下的 “构建参数” 中:
定义一个配置参数:
TagToBuild
配置参数
需要构建的标签
这应该是标签的完整路径,即refs/tags/0.5.5
提示
文本
请注意,“value”字段被故意留空。
然后,在VCS根目录中:
% TagToBuild%
当我运行构建时,会提示我提供一个分支/标签名称:
输入像refs/tags/0.5.0
这样的值会导致一个不错的构建,其中分支名称列在结果中:
如果您试图以任何方式帮助用户除了描述,似乎都会失败。 因此,你不能做以下任何一种情况:
refs/tags/
,并让用户添加标签名。refs/tags/%TagToBuild%
。对于我们略旧的(7.1)Team City实例上的两种情况,我得到了以下错误:
Failed to collect changes, error: Argument 2 for @NotNull parameter of jetbrains/buildServer/buildTriggers/vcs/VcsRootChangesLoader.loadChanges must not be null
teamcity.build.branch
的参数,即可覆盖分支名称,这样您就可以覆盖分支并将其设置为任何您想要的名称,例如 release
。请注意,此处不能更改原意,并需要保留内容的简洁性和易读性。 - js3devrefs/tags/%versionRoot%
的内容,这比每次输入完整路径要干净一些。 - gezzahead我没有使用标签来实现这个功能,但是使用了分支。我告诉TeamCity通过指定+:refs/heads/*
来构建所有分支。现在,每当我推送一个分支,TeamCity就会对其进行构建。然后,在构建中,我使用git branch
命令并查找以*
开头的行。我将该分支名称嵌入到一个方便的位置(例如.NET的AssemblyInfo.cs文件,node的package.json文件)。请参见http://confluence.jetbrains.com/display/TCD8/Working+with+Feature+Branches
Releasev2.7
——并推送该分支。TeamCity的“构建所有分支”会捕捉到它并运行。 - robrich您需要在refs/tags/${tagName}
中指定标签格式。
因此,您的标签应该是refs/tags/release_1.1
。
refs/tags/${tagName}
指定为默认分支,TeamCity会开始抱怨它无法连接到git仓库,难道没有更简洁的解决方案吗?这应该是非常常见的用例。 - js3devrefs/tags/${%tag%}
会导致错误:"无法找到默认分支'refs/tags/${0.5.0}'的修订版本",但将其设置为refs/tags/%tag%
则会出现"收集更改失败,错误:@NotNull参数的第2个参数"。 - Zhaph - Ben Duguid%full_tag%
而不是refs/tags/%tag%
,并将默认的full_tag设置为空,TeamCity就不会抱怨了。但是你需要将完整的引用作为参数传递(即full_tag=refs/tags/development-12
)。 - js3dev
无法收集更改,错误信息:jetbrains/buildServer/buildTriggers/vcs/VcsRootChangesLoader.loadChanges 的 @NotNull 参数的参数2不应为空
。 - Zhaph - Ben Duguid