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


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

說明

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

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

第一種:目錄下批量復制

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

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

# 創建批量復制 shell 腳本
$ vi copyViewJobs.sh
#!/bin/bash

# 視圖名稱
viewName=$1
# 新視圖名稱
newViewName=$2

cd /home/jenkins/.jenkins/jobs/
# 循環復制任務
for jobName in `ls /home/jenkins/.jenkins/jobs/`
 do
    # 判斷文件存在並且是目錄
    if test -d $jobName
    then
        # 目錄為 $viewName 開頭,則進行復制
        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

注意:復制完成后,Jenkins 需要重新加載配置才可以生效。操作菜單路徑:Manage Jenkins --》 Reload Configuration from Disk

第二種:jenkins-cli

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

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

# 下載 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

第三種:REST API

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

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

安裝 Python Jenkins

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

# 安裝 python-jenkins
$ pip install python-jenkins

獲取視圖下任務名稱

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'])

復制任務

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)

請求報錯 "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)”。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM