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

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

說明

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

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

第一種:目錄下批量複製

Jenkins 的任務都是以 xml 文件方式存儲的,全部能夠經過複製 xml 的方式來批量建立。正則表達式

# 進入 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
        # 目錄爲 $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 Diskshell

第二種:jenkins-cli

實現步驟與第一種相似,你們能夠根據本身擅長的腳本語言來實現便可。下面簡單介紹下關鍵命令。api

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 爲例。bash

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)」。

相關文章
相關標籤/搜索