如何替换TeamCity构建标签并删除旧标签?
解决TeamCity中移动"latest"标签到新构建的问题
要实现把"latest"标签从旧构建转移到新构建,你需要先定位到带该标签的旧构建,删除它的标签后,再给新构建添加标签。下面是具体的操作步骤:
1. 找出所有带有"latest"标签的构建
先用TeamCity API获取所有标记了"latest"的构建信息,这样就能找到旧构建的ID:
curl -H "Accept: application/json" https://<teamcity-server>/guestAuth/app/rest/builds?tags=latest
返回的JSON数据里会包含所有带该标签的构建ID,比如你之前的旧构建id:49346。
2. 删除旧构建上的"latest"标签
针对找到的旧构建ID,发送DELETE请求移除标签:
curl -X DELETE https://<teamcity-server>/guestAuth/app/rest/builds/id:<old-build-id>/tags/tag:latest
把<old-build-id>替换成实际的旧构建ID(比如49346)。
3. 给新构建添加"latest"标签
这一步用你原本的命令,替换成新构建的ID即可:
curl -v -H "Content-Type:text/plain" -d "latest" https://<teamcity-server>/guestAuth/app/rest/builds/id:<new-build-id>/tags
自动化脚本(可选)
如果想每次构建后自动完成标签转移,可以写个简单的bash脚本,自动处理查找、删除、添加的流程:
#!/bin/bash TEAMCITY_SERVER="https://<teamcity-server>" NEW_BUILD_ID="<your-new-build-id>" # 获取所有带latest标签的构建ID,排除当前新构建 OLD_BUILD_IDS=$(curl -s -H "Accept: application/json" "${TEAMCITY_SERVER}/guestAuth/app/rest/builds?tags=latest" | grep -o '"id":[0-9]*' | awk -F: '{print $2}' | grep -v "${NEW_BUILD_ID}") # 逐个删除旧构建的latest标签 for ID in $OLD_BUILD_IDS; do echo "移除构建${ID}的'latest'标签" curl -X DELETE "${TEAMCITY_SERVER}/guestAuth/app/rest/builds/id:${ID}/tags/tag:latest" done # 给新构建添加latest标签 echo "给构建${NEW_BUILD_ID}添加'latest'标签" curl -v -H "Content-Type:text/plain" -d "latest" "${TEAMCITY_SERVER}/guestAuth/app/rest/builds/id:${NEW_BUILD_ID}/tags"
注意事项
- 要确保
guestAuth拥有修改构建标签的权限,如果权限不够,可以改用httpAuth(比如curl -u 用户名:密码 ...)。 - 如果你的TeamCity版本较旧,API路径可能略有差异,可以核对官方API文档确认格式。
内容的提问来源于stack exchange,提问作者user4380125
相关产品推荐
相关产品推荐

