最近,要搭建多套测试环境,须要把 Jenkins 中 dev 视图下的全部任务批量复制到 sit 等视图下。java
Jenkins 任务名称规则为:[测试环境标识]-[工程名称],如:dev-daodaotest,sit-daodaotest
。python
视图中显示任务的正则表达式:[测试环境标识]-.* ,如: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 Disk
。shell
实现步骤与第一种相似,你们能够根据本身擅长的脚本语言来实现便可。下面简单介绍下关键命令。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
同第二种,仅介绍关键命令。这里以 python-jenkins
api 为例。bash
python-jenkins
官网地址:https://opendev.org/jjb/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)
错误缘由: jenkins 在 http 请求头部中放置了一个名为 .crumb 的 token。在使用了反向代理,而且在 jenkins 设置中勾选了“防止跨站点请求伪造(Prevent Cross Site Request Forgery exploits)”以后此 token 会被转发服务器 nginx 认为是不合法头部而去掉,致使跳转失败。测试
解决办法:在 Jenkins 的安全设置中取消“防止跨站点请求伪造(Prevent Cross Site Request Forgery exploits)”。