如何使用TeamCity REST API动态遍历快照依赖作业参数
动态获取TeamCity快照依赖作业的方案
可用的TeamCity REST API接口
TeamCity提供了直接获取当前构建快照依赖的REST接口,完全可以实现你的需求:
获取当前构建的快照依赖列表
在Build A的构建步骤中,调用以下接口即可获取所有快照依赖的构建信息:
- 接口路径:
/app/rest/builds/id:{currentBuildId}/snapshot-dependencies - 其中
{currentBuildId}直接用TeamCity内置参数%teamcity.build.id%替换,无需手动指定。
示例curl请求(在CentOS7构建步骤中执行):
curl -u "%teamcity.auth.userId%:%teamcity.auth.password%" "%teamcity.serverUrl%/app/rest/builds/id:%teamcity.build.id%/snapshot-dependencies"
请求默认返回XML格式,添加-H "Accept: application/json"可以获取JSON格式结果,方便脚本解析。
解析依赖列表并动态构造参数
拿到依赖列表后,用脚本解析提取作业名称,再动态构造%dep.{jobName}.param%格式的参数引用。
示例bash脚本(需安装jq处理JSON):
# 获取JSON格式的依赖列表 DEPENDENCIES=$(curl -u "%teamcity.auth.userId%:%teamcity.auth.password%" -H "Accept: application/json" "%teamcity.serverUrl%/app/rest/builds/id:%teamcity.build.id%/snapshot-dependencies") # 遍历每个依赖作业的名称 for JOB_NAME in $(echo "$DEPENDENCIES" | jq -r '.build[] | .buildType.name'); do # 构造参数名并获取对应值 PARAM_REF="%dep.$JOB_NAME.param%" # 这里可根据业务需求处理参数值,比如存入变量、执行逻辑等 echo "依赖作业[$JOB_NAME]的参数值:$PARAM_REF" done
如果用XML格式解析,可使用xmllint工具提取节点内容,示例片段:
# 获取XML格式的依赖列表 DEPENDENCIES=$(curl -u "%teamcity.auth.userId%:%teamcity.auth.password%" "%teamcity.serverUrl%/app/rest/builds/id:%teamcity.build.id%/snapshot-dependencies") # 提取所有依赖作业名称 JOB_NAMES=$(echo "$DEPENDENCIES" | xmllint --xpath '//build/buildType/@name' - | grep -oP 'name="\K[^"]+') for JOB_NAME in $JOB_NAMES; do PARAM_REF="%dep.$JOB_NAME.param%" echo "依赖作业[$JOB_NAME]的参数值:$PARAM_REF" done
关键注意事项
- 确保执行脚本的构建代理已安装
curl、jq(或xmllint)工具,CentOS7下可通过yum install curl jq libxml2安装。 - 构建服务账号需具备
View build configuration权限,否则API请求会返回权限错误。 - TeamCity内置的
%teamcity.auth.userId%和%teamcity.auth.password%会自动填充认证信息,无需硬编码账号密码,避免安全风险。
内容的提问来源于stack exchange,提问作者Rajesh
相关产品推荐
相关产品推荐

