jenkins批量复制Job项目的shell脚本实现

背景

现在需要将"测试" 目录中的所有job全部复制到 一个新目录中 test2。可以结合jenkins提供的api+linux shell 进行实现。

测试目录的实际文件夹名称是 test

脚本运行效果如下:

sh 复制代码
[qdevsom@5f-dev-hhyl shekk]$ ./copy_jenkins_job.sh
创建文件夹 test2
获取源目录Jobs...
正在复制:xxxxxx
正在复制:yyyyyy
正在复制:zzzzzz
正在复制:aaaaa
正在复制:bbbbb
复制操作完成!请验证结果。

获取凭证

复制代码
* 在 Jenkins 中生成 API Token:
登录 Jenkins → 用户 → 配置 → API Token → 生成新 Token。

记录你的 用户名 和 API Token

并在脚本中替换。

脚本

shell 复制代码
#!/bin/bash

# Jenkins配置
JENKINS_URL="http://10.10.84.21:8088"
USERNAME="xxxx"
API_TOKEN="xxxx"
SOURCE_FOLDER="test"
TARGET_FOLDER="test2"

# 检查并创建目标文件夹
function create_folder() {
  folder_exists=$(curl -s -o /dev/null -w "%{http_code}" -u "$USERNAME:$API_TOKEN" "$JENKINS_URL/job/$TARGET_FOLDER/")
  if [ "$folder_exists" != "200" ]; then
    echo "创建文件夹 $TARGET_FOLDER..."
    curl -X POST -u "$USERNAME:$API_TOKEN" -H "Content-Type:application/xml" -d @folder_config.xml "$JENKINS_URL/createItem?name=$TARGET_FOLDER"
  fi
}

# 生成文件夹配置XML(需CloudBees Folder插件)
cat > folder_config.xml <<EOF
<com.cloudbees.hudson.plugins.folder.Folder>
  <description>目标文件夹</description>
</com.cloudbees.hudson.plugins.folder.Folder>
EOF

# 获取CSRF Crumb(如果启用)
CRUMB=$(curl -s -u "$USERNAME:$API_TOKEN" "$JENKINS_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,\":\",//crumb)")

# 主逻辑
create_folder

echo "获取源目录Jobs..."
JOBS=$(curl -s -u "$USERNAME:$API_TOKEN" "$JENKINS_URL/job/$SOURCE_FOLDER/api/json?tree=jobs%5Bname%5D" | jq -r '.jobs[].name')

for JOB in $JOBS; do
  echo "正在复制:$JOB"
  curl -X POST -u "$USERNAME:$API_TOKEN" -H "$CRUMB" "$JENKINS_URL/job/$TARGET_FOLDER/createItem?name=$JOB&mode=copy&from=../$SOURCE_FOLDER/$JOB"

done

echo "复制操作完成!请验证结果。"

上面的脚本调用的api接口是在 jenkins 2.479.2版本验证通过。

需要 安装 jq命令,用于解析 json文本。

相关推荐
志栋智能2 小时前
低成本自动化巡检:7×24小时守护业务稳定
运维·网络·自动化
ToB营销学堂3 小时前
MarketUP | B2B 自动化营销实战:如何打破“营-销”数据孤岛,构建高转化线索流?
运维·自动化
CDN3604 小时前
360CDN 全系列产品体验:CDN / 高防 / SDK 游戏盾横向测评
运维·安全·游戏
行者-全栈开发4 小时前
容器化时代来临 - Docker 技术演进与核心价值
运维·docker·容器·cicd·自动化构建·容器化时代
云飞云共享云桌面4 小时前
非标自动化研发成本高?云飞云共享云桌面:1台主机=10台工作站,年省数十万。
大数据·运维·服务器·人工智能·自动化·云计算·电脑
chehaoman4 小时前
Failed to restart nginx.service Unit nginx.service not found
运维·nginx
Linux运维技术栈5 小时前
生产环境Linux应用目录迁移至LVM独立分区 标准化实战方案
linux·运维·服务器·lvm·逻辑卷
feasibility.5 小时前
SSH Agent Forwarding 与 tmux 排障笔记
linux·运维·服务器·经验分享·笔记·ssh
ShawnLiaoking5 小时前
Linux 会话窗口常开
linux·运维·服务器
CDN3606 小时前
中小团队加速 + 防护方案:360CDN+SDK 游戏盾实测
运维·游戏·网络安全