转到Jenkins服务器的首页,单击页面底部的REST API:
创造工作
要创建新工作,请发布 config.xml 使用查询参数访问此URL name=JOBNAME 。你需要发一个 Content-Type: application/xml 头。你会得到 200 如果创建成功,则为状态代码,或 4xx/5xx 代码如果失败了。 config.xml 是Jenkins用于将项目存储在文件系统中的格式,因此您可以在Jenkins主目录中查看它们的示例,或者从以下位置检索现有作业的XML配置 /job/JOBNAME/config.xml 。
config.xml
name=JOBNAME
Content-Type: application/xml
200
4xx/5xx
/job/JOBNAME/config.xml
的 作业导入插件 强> 这是从另一个Jenkins实例导入作业的简单方法。只需要提供源Jenkins实例的URL。 Remote Jenkins URL可以采用以下任何类型的URL:
http://$JENKINS - 获取远程实例上的所有作业
http://$JENKINS
http://$JENKINS/job/$JOBNAME - 找一份工作
http://$JENKINS/job/$JOBNAME
http://$JENKINS/view/$VIEWNAME - 在特定视图中获取所有工作
http://$JENKINS/view/$VIEWNAME
作为Web用户,您可以通过转到“作业配置历史记录”,然后导出XML来导出。
我正处于无法访问Jenkins正在运行的机器并希望导出为备份的情况。
至于将xml导入为web用户,我还是想知道。
在我的Jenkins实例(版本1.548)中,配置文件位于:
/var/lib/jenkins/jobs/-the-project-name-/config.xml
由jenkins用户和jenkins组拥有644权限。在此处复制文件应该可以正常工作。我没有尝试直接更改它,但已经从这个位置备份配置,以防项目需要再次设置。
的 默认情况下,它设置为〜/ .jenkins,但您可以通过以下方式之一更改此设置: 强>
* Set "JENKINS_HOME" environment variable to the new home directory before launching the servlet container. * Set "JENKINS_HOME" system property to the servlet container. * Set JNDI environment entry "JENKINS_HOME" to the new directory.
的 有关如何为容器执行此操作的详细信息,请参阅容器特定文档集合。 强>
您也可以在使用Jenkins一段时间后更改此位置。为此,请完全停止Jenkins,将内容从旧的JENKINS_HOME移动到新的主页,设置新的JENKINS_HOME,然后重新启动Jenkins。
JENKINS_HOME有一个相当明显的目录结构,如下所示:
JENKINS_HOME +- config.xml (jenkins root configuration) +- *.xml (other site-wide configuration files) +- userContent (files in this directory will be served under your http://server/userContent/) +- fingerprints (stores fingerprint records) +- plugins (stores plugins) +- workspace (working directory for the version control system) +- [JOBNAME] (sub directory for each job) +- jobs +- [JOBNAME] (sub directory for each job) +- config.xml (job configuration file) +- latest (symbolic link to the last successful build) +- builds +- [BUILD_ID] (for each build) +- build.xml (build result summary) +- log (log file) +- changelog.xml (change log)
的 备份还原: 强>
所有设置,构建日志,工件存档都存储在JENKINS_HOME目录下。只需归档此目录即可进行备份。同样,恢复数据只是从备份中替换JENKINS_HOME目录的内容。
可以在不停止服务器的情况下进行备份,但在还原时,请停止服务器。
的 移动/复制/重命名作业 强>
您可以:
即使Jenkins运行,也可以完成这些操作。要使这些更改生效,您必须单击“重新加载配置”以强制Jenkins从磁盘重新加载配置。
的 批量重命名作业 强>
用下划线替换作业名称中的空格
$ rename 's/\s/_/g' *
的 归档未使用的作业 强>
有时你想从詹金斯那里删除一份工作,但是如果需要的话你可以在以后复活它。您可以通过转到$ JENKINS_HOME并创建作业目录的存档来完成此操作。以下命令说明了如何归档作业'xyz'并将其删除。
$ cd $JENKINS_HOME/jobs $ tar czf xyz.tgz xyz // go to Jenkins GUI "Manage Jenkins" page and "Reload Configuration from Disk"
只要您在创建存档时没有构建xyz项目,就可以在不使Jenkins脱机的情况下执行此操作。
另见 “搁置项目”插件 。
的 脚本控制台 强>
用于故障排除,诊断或批量更新作业Jenkins提供了一个脚本控制台,可让您访问所有Jenkins内部。 这些脚本是用Groovy编写的,你可以在其中找到它们的一些示例 页 。
的 网址选项 强>
http://[jenkins-server]/[command]
其中[命令]可以
直接访问机器最简单的方法是将作业文件夹从第一个jenkins复制到另一个jenkins(您可以排除工作区 - workspace 文件夹),因为整个作业配置存储在磁盘上的xml文件中。
workspace
然后在新的jenkins中 reload configuration 在全局设置(管理员访问是必需的)应该是足够的,如果没有,那么你将需要重新启动Jenkins工具。
reload configuration
另一种方法可以是使用上面提到的插件。
编辑: - 万一你可能也可以排除 modules 文件夹
modules
简单的PHP脚本为我工作。
的 出口: 强>
// add all job codes in the array $jobs = array("job1", "job2", "job3"); foreach ($jobs as $value) { fwrite(STDOUT, $value. " \n") or die("Unable to open file!"); $path = "http://server1:8080/jenkins/job/".$value."/config.xml"; $myfile = fopen($value.".xml", "w"); fwrite($myfile, file_get_contents($path)); fclose($myfile); }
的 进口: 强>
<?php // add all job codes in the array $jobs = array("job1", "job2", "job3"); foreach ($arr as $value) { fwrite(STDOUT, $value. " \n") or die("Unable to open file!"); $cmd = "java -jar jenkins-cli.jar -s http://server2:8080/jenkins/ create-job ".$value." < ".$value.".xml"; echo exec($cmd); }
可能使用jenkins命令行是另一种选择,请参阅 https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI
所以你可以做到
java -jar jenkins-cli.jar -s http://server get-job myjob > myjob.xml java -jar jenkins-cli.jar -s http://server create-job newmyjob < myjob.xml
它适用于我,我习惯存储在我的版本控制系统内
感谢Larry Cai的回答,我设法创建了一个脚本来备份我所有的Jenkins工作。我创建了一个每周运行一次的工作。如果有人发现它有用,这里是:
#!/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
只需下载插件名称即可
作业导入插件
输入Remote Jenkins服务器的URL,它将自动导入作业
这不适用于现有的工作,但有 詹金斯工作建设者 。
这允许人们在yaml文件和git repo中保留作业定义,这是非常便携的。
单行:
$ 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活跃( 看这里的细节 )
得到面包屑:
$ 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 :
-H 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 @-
有一个名为的插件 作业导入插件 这可能就是你要找的东西。我用过它。它确实存在从不允许匿名访问的服务器导入项目的问题。
完整性: 如果您对两者都有命令行访问权限,则可以执行Khez已经提到的过程 移动,复制和重命名Jenkins Jobs 。
手动导入作业:替代方式
将作业上传到Git(版本控制) 基本上上传Job的config.xml。
如果Linux服务器:
cd /var/lib/jenkins/jobs/<Job name> Download the config.xml from Git
重启詹金斯
Jenkins将作业导出到目录
#! /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