如何为Azure DevOps中的特定构建设置单独保留策略?
为特定构建设置保留策略(而非项目级)的实现方案
以下是针对主流CI/CD工具的具体落地方法,核心逻辑是先通过API筛选出匹配指定字段的构建,再单独调用API为其设置保留策略:
Jenkins 实现步骤
1. 查询匹配指定字段的构建
假设你要筛选包含自定义参数RELEASE_VERSION(值为v1.0.0)的构建,调用Jenkins构建列表API:
curl -u username:api-token "http://your-jenkins-url/job/your-job-name/api/json?tree=builds[number,actions[parameters[name,value]]]"
遍历返回的JSON数据,找到parameters节点中name为RELEASE_VERSION且value为v1.0.0的构建编号number。
2. 设置该构建的保留策略
执行以下请求可将目标构建设为永久保留:
curl -X POST -u username:api-token "http://your-jenkins-url/job/your-job-name/{build-number}/keepBuild"
如果需要自定义保留时长(比如30天),可借助Build Discarder插件的API更新规则:
curl -X POST -u username:api-token -H "Content-Type: application/json" \ "http://your-jenkins-url/job/your-job-name/{build-number}/configure" \ -d '{"buildDiscarders": {"strategy": {"daysToKeep": 30, "numToKeep": -1}}}'
Azure DevOps 实现步骤
1. 查询匹配指定字段的构建
假设指定字段是构建属性里的CustomTag,调用Azure DevOps构建查询API:
curl -H "Authorization: Basic $(echo -n :your-pat | base64)" \ "https://dev.azure.com/your-org/your-proj/_apis/build/builds?api-version=7.1-preview.7&$expand=properties"
遍历返回结果的value数组,找到properties.CustomTag符合目标值的构建IDid。
2. 设置构建保留策略
通过PATCH请求更新目标构建的保留规则(示例为保留30天):
curl -X PATCH -H "Authorization: Basic $(echo -n :your-pat | base64)" \ -H "Content-Type: application/json" \ "https://dev.azure.com/your-org/your-proj/_apis/build/builds/{build-id}?api-version=7.1-preview.7" \ -d '{ "retentionPolicy": { "daysToKeep": 30, "retainIndefinitely": false, "deleteBuildRecord": false } }'
自动化脚本示例(Shell + jq)
用脚本整合查询与设置步骤,自动完成流程:
#!/bin/bash JENKINS_URL="http://your-jenkins-url" JOB_NAME="your-job-name" USER="username" TOKEN="api-token" TARGET_PARAM="RELEASE_VERSION" TARGET_VALUE="v1.0.0" # 查询匹配的构建编号 BUILD_NUM=$(curl -s -u $USER:$TOKEN "$JENKINS_URL/job/$JOB_NAME/api/json?tree=builds[number,actions[parameters[name,value]]]" | \ jq -r --arg param "$TARGET_PARAM" --arg val "$TARGET_VALUE" '.builds[] | select(.actions[]?.parameters[]? | .name == $param and .value == $val) | .number' | head -1) # 设置保留策略 if [ -n "$BUILD_NUM" ]; then curl -X POST -u $USER:$TOKEN "$JENKINS_URL/job/$JOB_NAME/$BUILD_NUM/keepBuild" echo "已为构建$BUILD_NUM设置永久保留" else echo "未找到匹配指定字段的构建" fi
内容的提问来源于stack exchange,提问作者Ryan Richard Klopka
相关产品推荐
相关产品推荐

