#! /bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
declare -i j=0
for i in $(java -jar jenkins-cli.jar -s http://server:8080/jenkins list-jobs --username **** --password ***);
do
let "j++";
echo $j;
if [ $j -gt 283 ] // If you have more jobs do it in chunks as it will terminate in the middle of the process. So Resume your job from where it ends.
then
java -jar jenkins-cli.jar -s http://lxvbmcbma:8080/jenkins get-job --username **** --password **** ${i} > ${i}.xml;
echo "done";
fi
done
导入工作
for f in *.xml;
do
echo "Processing ${f%.*} file.."; //truncate the .xml extention and load the xml file for job creation
java -jar jenkins-cli.jar -s http://server:8080/jenkins create-job ${f%.*} < $f
done
#!/bin/bash
#IFS for jobs with spaces.
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for i in $(java -jar /run/jenkins/war/WEB-INF/jenkins-cli.jar -s http://server:8080/ list-jobs);
do
java -jar /run/jenkins/war/WEB-INF/jenkins-cli.jar -s http://server:8080/ get-job ${i} > ${i}.xml;
done
IFS=$SAVEIFS
mkdir deploy
tar cvfj "jenkins-jobs.tar.bz2" ./*.xml
15 回答
直接访问计算机的最简单方法是将作业文件夹从第一个jenkins复制到另一个jenkins(可以排除工作空间),因为整个作业配置存储在磁盘上的xml文件中 .
然后在新的jenkins中只需在全局设置中重新加载配置(需要管理员访问权限) .
另一种方法可以是使用上面提到的插件 .
单行:
$ curl -s http://OLD_JENKINS/job/JOBNAME/config.xml | curl -X POST 'http://NEW_JENKINS/createItem?name=JOBNAME' --header "Content-Type: application/xml" -d @-
认证
$ curl -s http:///<USER>:<API_TOKEN>@OLD_JENKINS/job/JOBNAME/config.xml | curl -X POST 'http:///<USER>:<API_TOKEN>@NEW_JENKINS/createItem?name=JOBNAME' --header "Content-Type: application/xml" -d @-
使用Crumb,如果CSRF处于活动状态(see details here)
得到面包屑:
$ CRUMB_OLD=$(curl -s 'http://<USER>:<API_TOKEN>@OLD_JENKINS/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
$ CRUMB_NEW=$(curl -s 'http://<USER>:<API_TOKEN>@NEW_JENKINS/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
用
-H CRUMB
申请crumb:$ curl -s -H $CRUMB_OLD http:///<USER>:<API_TOKEN>@OLD_JENKINS/job/JOBNAME/config.xml | curl -X POST -H $CRUMB_NEW 'http:///<USER>:<API_TOKEN>@NEW_JENKINS/createItem?name=JOBNAME' --header "Content-Type: application/xml" -d @-
在我的Jenkins实例(版本1.548)中,配置文件位于:
/var/lib/jenkins/jobs/-the-project-name-/config.xml
由jenkins用户和jenkins组拥有644权限 . 将文件复制到此处以及从此处复制文件应该可行 . 我没有尝试直接更改它,但已经从这个位置备份配置,以防项目需要再次设置 .
简单的PHP脚本为我工作 .
Export:
Import:
Job Import plugin 是从另一个Jenkins实例导入作业的简便方法 . 只需要提供源Jenkins实例的URL . Remote Jenkins URL可以采用以下任何类型的URL:
http://$JENKINS
- 获取远程实例上的所有作业http://$JENKINS/job/$JOBNAME
- 获得一份工作http://$JENKINS/view/$VIEWNAME
- 获取特定视图中的所有作业转到Jenkins服务器的首页,单击页面底部的REST API:
要创建新作业,请使用查询参数
name=JOBNAME
将config.xml
发布到此URL . 您需要发送Content-Type: application/xml
标头 . 如果创建成功,您将获得200
状态代码,如果失败,您将获得4xx/5xx
代码 .config.xml
是Jenkins用于将项目存储在文件系统中的格式,因此您可以在Jenkins主目录中查看它们的示例,或者从/job/JOBNAME/config.xml
中检索现有作业的XML配置 .Jenkins将作业导出到目录
导入工作
Jenkins有一个相当不错的wiki,虽然你刚接触CI软件时很难阅读...
他们为moving jobs between servers提供了一个简单的解决方案
诀窍可能是需要从Jenkins配置页面重新加载配置 .
感谢Larry Cai的回答,我设法创建了一个脚本来备份我所有的Jenkins工作 . 我创建了一个每周运行一次的工作 . 如果有人发现它有用,这里是:
只需下载插件名称即可
Job Import Plugin
输入Remote Jenkins服务器的URL,它将自动导入作业
有一个名为Job Import Plugin的插件,可能就是你要找的东西 . 我用过它 . 它确实存在从不允许匿名访问的服务器导入项目的问题 .
完整性:如果您对两者都有命令行访问权限,则可以执行Khez为Moving, Copying and Renaming Jenkins Jobs提到的过程 .
这不适用于现有的工作,但有Jenkins job builder .
这允许人们在yaml文件和git repo中保留作业定义,这非常便携 .
手动导入作业:替代方式
将作业上传到Git(版本控制)基本上传作业的config.xml .
如果Linux服务器:
重启詹金斯
可能使用jenkins命令行是另一种选择,参见https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI
create-job:通过将stdin作为配置XML文件读取来创建新作业 .
get-job:将作业定义XML转储到stdout
所以你可以做到
它适用于我,我习惯存储在我的版本控制系统内
对于我们这些在Windows世界中可能有或没有Bash可用的人来说,这是我的PowerShell端口 Katu 和 Larry Cai 的方法 . 希望它可以帮到某人 .