背景
現在需要將“測試” 目錄中的所有job全部復制到 一個新目錄中 test2
。可以結合jenkins提供的api+linux shell 進行實現。
測試
目錄的實際文件夾名稱是test
。
腳本運行效果如下:
[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
并在腳本中替換。
腳本
#!/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" ]; thenecho "創建文件夾 $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_folderecho "獲取源目錄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; doecho "正在復制:$JOB"curl -X POST -u "$USERNAME:$API_TOKEN" -H "$CRUMB" "$JENKINS_URL/job/$TARGET_FOLDER/createItem?name=$JOB&mode=copy&from=../$SOURCE_FOLDER/$JOB"doneecho "復制操作完成!請驗證結果。"
上面的腳本調用的api接口是在 jenkins 2.479.2版本驗證通過。
需要 安裝jq
命令,用于解析 json文本。