我有一个构建配置,包含两个构建步骤"构建"和"部署".此构建配置使用Git VCS并配置为运行所有分支.
我们假设我目前有两个分支"master"和"Feature in Development".
我想将"部署"步骤分为两部分."部署生产"和"部署Beta".只有在更改主分支并且当前正在构建时,才应执行"部署生产"步骤.
是否有内置的可能性,或者我必须在脚本中手动检查%teamcity.build.branch.is_default%变量?
我们正在使用Teamcity 9.0.3,我们尝试使用测试运行gradle构建.但是,它失败了以下异常:
[15:25:41][:test] Failed to find flowId for [com.stub.AppTest]
[15:25:41][:test] java.lang.NullPointerException: Failed to find flowId for [com.stub.AppTest]
[15:25:41][:test] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[15:25:41][:test] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
[15:25:41][:test] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
[15:25:41][:test] at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
Run Code Online (Sandbox Code Playgroud)
我使用gradle包装器和它的2.5版本以及用于构建的teamcity代理.我怎样才能解决这个问题?
根据我对TeamCity如何工作的观察,我注意到在完成所有步骤之后评估构建失败条件.这非常烦人,因为如果遇到任何构建失败条件,我就无法执行一个步骤.
我不是指常见的构建失败条件,例如"至少一个测试失败".我指的是手动添加的故障情况,例如公制更改.
当我检查构建日志时,我清楚地看到所有步骤都已执行,并且最后它只评估构建失败条件,并记录相应的错误(如果有的话).但是在这个过程中为时已晚,因为条件步骤(必须基于"如果构建状态成功则仅执行"失败)已经执行.
问题:我怎样才能做到这一点?
从上面可以看出,我已经尝试了一个条件步骤并添加了构建失败条件,但无法实现所需的结果.
为清晰起见添加:
基本上,我有一个部署应用程序的步骤.但是,我的期望是,如果满足构建失败条件,我不应该部署.我所拥有的构建失败条件的示例是度量标准更改.显然,这可以表示为构建失败条件,并且我可以在构建状态不成功的情况下使构建步骤失败.然而,似乎不是构建步骤将如何表现,所以我很困惑(我认为这是构建步骤中条件的目的).我错过了什么?
我在Team City中定义了以下参数:
我想将此参数传递给我拥有的powershell脚本(将使用版本号更新xml文件).
但是这会将实际文本%version%
插入到脚本中(不会替换参数的实际值.)
但是,我知道我的脚本正在运行,因为如果我对这样的值进行硬编码,那么它的工作原理如下:
当用作PowerShell脚本参数时,有没有办法让%version%转换为实际值?
我想根据构建管道的另一个TC构建配置部分的结果动态设置'teamcity.build.branch'的值.
这甚至可能吗?看起来值是在构建管道的开始处评估和使用的.
用例:
我已经使用消息服务覆盖参数,但不考虑更改.看起来这个值是在构建过程的早期阶段读取的.
我想创建元运行器,它将要求用户选中复选框('prompt'配置参数)以确认部署到生产.它包含powershell脚本,用于验证是否选中了复选框.这是meta-runner的代码:
<?xml version="1.0" encoding="UTF-8"?>
<meta-runner name="Confirm deploy to production">
<description>Force user to check checkbox to confirm deploy to production</description>
<settings>
<parameters>
<param name="deploy.to.production.confirmation.checkbox" value="false" spec="checkbox description='Are you sure?' label='This is deployment to PRODUCTION environment.' uncheckedValue='false' display='prompt' checkedValue='true'" />
</parameters>
<build-runners>
<runner name="Confirm deploy to production" type="jetbrains_powershell">
<parameters>
<param name="jetbrains_powershell_bitness" value="x86" />
<param name="jetbrains_powershell_errorToError" value="false" />
<param name="jetbrains_powershell_execution" value="PS1" />
<param name="jetbrains_powershell_script_code"><![CDATA[trap
{
write-output $_
##teamcity[buildStatus status='FAILURE' ]
exit 1
}
write-host "##teamcity[message text='Starting confirmation validation...']"
if("%deploy.to.production.confirmation.checkbox%" -eq "false"){
write-host "##teamcity[message …
Run Code Online (Sandbox Code Playgroud) 我有一个参数,我正在显示一个提示.我为它设置了一个默认值,并且工作正常.
然而,不起作用的是,如果我在运行构建时选择输入不同的值,那么在下一次构建时,该值将自动成为新的默认值,可以这么说.
我希望默认值始终是固定的,如果在字段中输入不同的值,那么该值将仅用于此构建(并且下一个构建将回退到此参数的固定值,默认值).
这有可能吗?怎么办?
我正在运行TeamCity 9x,它似乎不支持VCS密码参数,这意味着我必须使用SSH密钥(证明很难,但这是一个单独的问题)或输入每个构建配置的密码,这是不可接受的,因为我们将最终有超过100个构建配置,所以更改密码将是非常艰巨的.
有没有办法可以指定一次密码并将其注入每个VCS根目录?
我找到删除 TeamCity 标签的唯一方法是从所有版本中删除对该标签的所有引用。这是一个手动且费力的过程。有没有办法自动完成?
我正在使用TeamCity 9.1.3。我们正在使用MSBuild Tools 15来构建我们的应用程序。我们的应用程序的目标是4.5.2,一切正常。现在,我们已将应用程序内部的框架更改为4.6.2。开发人员可以使用Visual Studio中的Framework 4.6.2在本地构建其应用程序。
但是在我们的TeamCity服务器上,构建失败。看来TeamCity仍在使用旧框架。我们确实安装了4.6.2框架。我们有MS BuildTools15。我们的MSBuild Tools版本是14,运行平台是x64。对于仍使用4.5.2框架的应用程序也是如此。
我们必须更改什么,以便此应用程序的TeamCity Job将使用4.6.2(通过使用与仍在使用4.5.2的其他应用程序相同的buildTools 15)。
我们在作业配置中的MSBuild版本按钮中看不到4.6.2。我们看到BuildTools 15,BuildTools 13和.NET Framework 4.5、4.0、3.5,...
我也看不到Windows的4.6.2框架和服务器的功能(但已安装在主机上)。我们正在使用Windows Server 2012 R2。
teamcity-9.0 ×10
teamcity ×7
.net ×1
.net-4.6.2 ×1
build ×1
gradle ×1
java ×1
msbuild ×1
powershell ×1