You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:04:52