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文本。

相关推荐
若疆赤云online2 分钟前
Nginx下搭建rtmp流媒体服务 并使用HLS或者OBS测试
运维·nginx
UFIT4 分钟前
系统安全及应用
linux·运维
rainsc30 分钟前
Singularity使用
运维·自动化运维
搬码临时工1 小时前
外网如何通过路由器访问内网服务器?没有公网ip怎么实现?
运维·服务器·网络·智能路由器·内网穿透·端口映射·外网访问
伤不起bb1 小时前
系统安全及应用
linux·运维·网络·安全·系统安全
啊吧怪不啊吧1 小时前
Linux常见指令介绍中(入门级)
linux·运维·服务器
桃花岛主702 小时前
FFmpeg+Nginx+VLC打造M3U8直播
运维·nginx·ffmpeg
techdashen2 小时前
性能比拼: Nginx vs Apache
运维·nginx·apache
Rudon滨海渔村2 小时前
Linux通用一键换源脚本.sh - ubuntu、centos全自动更换国内源 - LinuxMirrors神器
linux·运维·ubuntu·centos·换源
小琪琪:)2 小时前
【Linux】vim配置----超详细
linux·运维·vim