如何批量修改Rundeck项目下所有作业的option strict值?
批量修改Rundeck项目中所有作业的选项值
方法1:用Rundeck API批量操作
适合自动化场景,灵活性高:
- 先获取目标项目下的所有作业ID(需提前安装
jq工具):
curl -X GET -H "X-Rundeck-Auth-Token: 你的认证令牌" http://你的Rundeck地址:4440/api/38/projects/新项目名/jobs | jq '.[] | .id'
- 遍历每个作业,修改选项后提交更新:
# 替换为你的实际信息 RUNDECK_TOKEN="你的令牌" RUNDECK_SERVER="http://你的Rundeck地址:4440" PROJECT_NAME="新项目名称" TARGET_OPTION="target" NEW_STRICT_VALUE="要修改的新strict值" # 获取所有作业ID JOB_IDS=$(curl -s -X GET -H "X-Rundeck-Auth-Token: $RUNDECK_TOKEN" "$RUNDECK_SERVER/api/38/projects/$PROJECT_NAME/jobs" | jq -r '.[] | .id') # 逐个修改作业 for JOB_ID in $JOB_IDS; do # 拉取作业的JSON定义 JOB_JSON=$(curl -s -X GET -H "X-Rundeck-Auth-Token: $RUNDECK_TOKEN" "$RUNDECK_SERVER/api/38/job/$JOB_ID") # 修改target选项的strict值 UPDATED_JOB_JSON=$(echo "$JOB_JSON" | jq --arg new_val "$NEW_STRICT_VALUE" '.options[] |= if .name == "'"$TARGET_OPTION"'" then .strict = $new_val else . end') # 提交更新 curl -X PUT -H "X-Rundeck-Auth-Token: $RUNDECK_TOKEN" -H "Content-Type: application/json" -d "$UPDATED_JOB_JSON" "$RUNDECK_SERVER/api/38/job/$JOB_ID" done
注意:API版本号(示例中为38)需与你的Rundeck版本匹配,可在Rundeck内置API文档中确认对应版本。
方法2:导出作业批量修改后重新导入
适合不想写脚本的场景:
- 导出新项目所有作业:进入项目 → 作业 → 导出,选择导出所有作业为JSON格式。
- 批量修改JSON里的strict值:
jq --arg new_strict "你的新strict值" '.[] | .options[] |= if .name == "target" then .strict = $new_strict else . end' 导出的文件名.json > 修改后的文件名.json
- 重新导入:回到项目 → 作业 → 导入,选择修改后的JSON文件,导入时勾选“覆盖现有作业”即可。
方法3:使用Rundeck CLI工具(rd-cli)
如果经常和Rundeck交互,rd-cli操作更顺手:
- 先配置rd-cli连接信息:
rd configure set server http://你的Rundeck地址:4440 rd configure set token 你的认证令牌
- 批量修改作业:
PROJECT_NAME="新项目名称" NEW_STRICT="你的新strict值" # 遍历所有作业ID for JOB_ID in $(rd jobs list -p $PROJECT_NAME | awk '{print $1}'); do # 导出单个作业JSON rd jobs get -i $JOB_ID > temp_job.json # 修改strict值 jq --arg val "$NEW_STRICT" '.options[] |= if .name == "target" then .strict = $val else . end' temp_job.json > updated_temp_job.json # 更新作业 rd jobs update -i $JOB_ID -f updated_temp_job.json done # 清理临时文件 rm temp_job.json updated_temp_job.json
注意事项
- 操作前务必备份作业,避免误改导致数据丢失。
- 如果作业里的选项是嵌套分组结构,需要调整
jq的过滤表达式,确保能定位到正确的选项。
内容的提问来源于stack exchange,提问作者Mickey
相关产品推荐
相关产品推荐

