Jenkins 批量創建任務的三種方法

最近,要搭建多套測試環境,需要把 Jenkins 中 dev 視圖下的所有任務批量複製到 sit 等視圖下。

說明

Jenkins 任務名稱規則為:[測試環境標識]-[工程名稱],如:dev-daodaotest,sit-daodaotest。


視圖中顯示任務的正則表達式: [測試環境標識]-. ,如:dev-.*,sit-.*

第一種:目錄下批量複製

Jenkins 的任務都是以 xml 文件方式存儲的,所有可以通過複製 xml 的方式來批量創建。

<code># 進入 jobs 目錄下
$ cd ~/.jenkins/jobs

# 創建批量複製 shell 腳本
$ vi copyViewJobs.sh
#!/bin/bash
# 視圖名稱
viewName=$1
# 新視圖名稱
newViewName=$2
# 循環複製任務
for jobName in `ls /home/jenkins/.jenkins/jobs/`
do
# 判斷文件存在並且是目錄
if test -d $jobName
then
# 目錄為 $1 開頭,則進行復制

if [[ $jobName == *$viewName* ]]; then
# 截取工程名稱
name=`echo $jobName|awk 'BEGIN{FS="'$viewName'-"} {print $2}'`
newJobName=$newViewName-$name
echo $newJobName
# 複製 config.xml
mkdir $newJobName && cp $jobName/config.xml $newJobName/
fi
fi
done

# 執行批量複製腳本,dev 視圖下的任務負責到 sit 視圖下
$ sh copyViewJobs.sh dev sit/<code>

注意:複製完成後,Jenkins 需要重新加載配置才可以生效。操作菜單路徑:"Manage Jenkins" —》 "Reload Configuration from Disk"。

第二種:jenkins-cli

實現步驟與第一種類似,大家可以根據自己擅長的腳本語言來實現即可。下面簡單介紹下關鍵命令。

jenkins-cli 使用方法見:http://localhost:8080/cli

<code># 下載 jenkins-cli.jar
$ wget http://localhost:8080/jnlpJars/jenkins-cli.jar

# 獲取視圖下的所有任務
$ java -jar jenkins-cli.jar -s http://localhost:8080/ -auth daodaotest:daodaotest list-jobs dev

# 複製任務
$ java -jar jenkins-cli.jar -s http://localhost:8080/ -auth daodaotest:daodaotest copy-job dev-daodaotest sit-daodaotest/<code>

第三種:REST API

同第二種,僅介紹關鍵命令。這裡以 python-jenkins api 為例。

python-jenkins 官網地址:https://opendev.org/jjb/python-jenkins

安裝 Python Jenkins

<code># 安裝 pip
$ sudo yum install epel-release && sudo yum install python-pip

# 安裝 python-jenkins
$ pip install python-jenkins/<code>

獲取視圖下任務名稱

<code>import jenkins
server = jenkins.Jenkins('http://localhost:8080', username='daodaotest', password='daodaotest')

# 查詢 dev 視圖下的所有任務
jobs = server.get_jobs(folder_depth=0, view_name='dev')

# 循環打印任務名稱
for job in jobs:
print(job['fullname'])/<code>

複製任務

<code>import jenkins
server = jenkins.Jenkins('http://localhost:8080', username='daodaotest', password='daodaotest')

# 任務是否存在,True 為存在,Fasle 為不存在
print(server.job_exists('dev-daodaotest'))


# 複製任務
server.copy_job('dev-daodaotest','sit-daodaotest')

# 打印任務信息
jobinfo = server.get_job_info('sit-daodaotest')
print(jobinfo)
/<code>

請求報錯 “Error 403 No valid crumb was included in the request”

錯誤原因: jenkins 在 http 請求頭部中放置了一個名為 .crumb 的 token。在使用了反向代理,並且在 jenkins 設置中勾選了“防止跨站點請求偽造(Prevent Cross Site Request Forgery exploits)”之後此 token 會被轉發服務器 nginx 認為是不合法頭部而去掉,導致跳轉失敗。


解決辦法:在 Jenkins 的安全設置中取消“防止跨站點請求偽造(Prevent Cross Site Request Forgery exploits)”。


分享到:


相關文章: