是否有可能在两个不同的詹金斯之间交换工作?我正在寻找出口/进口工作的方法。
答案 0 :(得分:169)
可能使用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
它适用于我,我习惯存储在我的版本控制系统
中答案 1 :(得分:148)
詹金斯有一个相当不错的维基,虽然你刚接触CI软件时很难阅读......
他们为moving jobs between servers
提供了一个简单的解决方案诀窍可能是需要从Jenkins配置页面重新加载配置。
答案 2 :(得分:129)
单行:
$ 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
:
$ 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 @-
答案 3 :(得分:24)
有一个名为Job Import Plugin的插件可能正是您要找的。我用过它。它确实存在从不允许匿名访问的服务器导入项目的问题。
完整性: 如果您对两者都有命令行访问权限,则可以执行Khez为Moving, Copying and Renaming Jenkins Jobs提到的过程。
答案 4 :(得分:13)
转到Jenkins服务器的首页,单击页面底部的REST API:
创建工作
要创建新作业,请使用查询参数config.xml
将name=JOBNAME
发布到此网址。您需要发送Content-Type: application/xml
标头。如果创建成功,您将获得200
状态代码,如果失败,您将获得4xx/5xx
代码。 config.xml
是Jenkins用于将项目存储在文件系统中的格式,因此您可以在Jenkins主目录中查看它们的示例,或者从/job/JOBNAME/config.xml
检索现有作业的XML配置。
答案 5 :(得分:10)
在我的Jenkins实例(版本1.548)中,配置文件位于:
/var/lib/jenkins/jobs/-the-project-name-/config.xml
由jenkins用户和jenkins组拥有644权限。在此处复制文件应该可以正常工作。我没有尝试直接更改它,但是如果需要再次设置项目,则从这个位置备份配置。
答案 6 :(得分:8)
Job Import plugin 是从其他Jenkins实例导入作业的简便方法。只需要提供源Jenkins实例的URL。 Remote Jenkins URL可以采用以下任何类型的URL:
http://$JENKINS
- 获取远程实例上的所有作业
http://$JENKINS/job/$JOBNAME
- 获得一份工作
http://$JENKINS/view/$VIEWNAME
- 获取特定视图中的所有作业
答案 7 :(得分:6)
感谢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
答案 8 :(得分:4)
Jenkins export jobs to a directory
clipTotal = 4
for i in range(1, clipTotal+1):
clipName = self.clipName+str(i)+.text()
Import jobs
#! /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
答案 9 :(得分:3)
在网络浏览器中访问:
http://[jenkinshost]/job/[jobname]/config.xml
只需将文件保存到磁盘上即可。
答案 10 :(得分:1)
这对现有作业无效,但有Jenkins job builder。
这允许我们在yaml文件和git repo中保留作业定义,这是非常便携的。
答案 11 :(得分:1)
简单的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);
}
答案 12 :(得分:1)
对于我们这些在Windows世界中可能有也可能没有Bash的用户,这里有我的PowerShell端口 Katu 和 Larry Cai &#39的方法。希望它可以帮到某人。
$timeout
答案 13 :(得分:1)
答案 14 :(得分:1)
直接访问机器的最简单方法是将作业文件夹从第一个jenkins复制到另一个文件夹(您可以排除工作空间-workspace
文件夹),因为整个作业配置都存储在xml中文件放在磁盘上。
然后在新的jenkins中,只需在全局设置中reload configuration
(需要管理员访问权限)就足够了,如果还不够,那么您将需要重新启动Jenkins工具。
另一种方法是使用本文上面提到的插件。
编辑:
-以防万一您还可以排除modules
个文件夹
答案 15 :(得分:1)
(tab_layout as TabLayout).setBackgroundColor(ContextCompat.getColor(mContext, R.color.colorPrimary))
(tab_layout as TabLayout).setSelectedTabIndicatorColor(ContextCompat.getColor(mContext, R.color.white))
(tab_layout as TabLayout).setTabTextColors(ContextCompat.getColor(mContext, R.color.white),
ContextCompat.getColor(mContext, R.color.white))
,请使用相同的内容进行导入:config.xml
我正在通过HTTPS连接并使用curl -k -X POST 'https:///<user>:<token>@<jenkins_url>/createItem?name=<job_name>' --header "Content-Type: application/xml" -d @config.xml
禁用了证书验证。
答案 16 :(得分:0)
手动导入作业:替代方式
将作业上传到Git(版本控制) 基本上传Job的config.xml。
如果Linux服务器:
cd /var/lib/jenkins/jobs/<Job name>
Download the config.xml from Git
重启Jenkins
答案 17 :(得分:0)
默认情况下,此设置为〜/ .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)删除工作,但是这样做的方式是,如果需要的话,您可以稍后将其复活。您可以通过转到$ 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编写的,您可以在此page中找到一些示例。
URL选项
http://[jenkins-server]/[command]
[命令]可以存在的地方
答案 18 :(得分:0)
作为Web用户,您可以通过转到作业配置历史记录,然后导出XML来导出。
我无法访问Jenkins正在运行的计算机,并想导出为备份计算机。
关于将xml作为Web用户导入,我仍然想知道。
答案 19 :(得分:0)
2021 和进出口过程是痛苦的!!
如果您对两个 jenkins 实例具有 shell 访问权限:旧的和新的,请按照以下步骤执行成功的作业迁移:
在你的旧詹金斯
在你的新詹金斯中: