詹金斯的出口/进口工作

时间:2011-12-07 23:36:27

标签: jenkins

是否有可能在两个不同的詹金斯之间交换工作?我正在寻找出口/进口工作的方法。

20 个答案:

答案 0 :(得分:169)

可能使用jenkins命令行是另一种选择,请参阅https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI

  • create-job:通过将stdin作为配置XML文件读取来创建新作业。
  • get-job:将作业定义XML转储到stdout

所以你可以做到

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

应用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.xmlname=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)

只需下载插件名称

即可

Job Import Plugin

输入您的远程Jenkins服务器的URL,它将自动导入作业

答案 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 禁用了证书验证。

  • This是如何在Jenkins上生成用户api令牌。
  • 如果您单击Jenkins实例右下角的同名链接,则会看到Jenkins REST API详细信息。

答案 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目录的内容。

可以在不停止服务器的情况下进行备份,但是在还原时,请务必停止服务器。

移动/复制/重新命名作业

您可以:

  1. 只需复制相应的作业目录,即可将作业从一个Jenkins安装移至另一个安装。
  2. 通过使用不同的名称克隆作业目录来复制现有作业。
  3. 通过重命名目录来重命名现有作业。请注意,如果您更改工作名称,则将需要更改任何其他尝试调用重命名工作的工作。

即使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脱机。

另请参阅"Shelve Project" plugin

脚本控制台

对于作业的故障排除,诊断或批处理更新很有用。Jenkins提供了一个脚本控制台,可让您访问所有Jenkins内部组件。 这些脚本是用Groovy编写的,您可以在此page中找到一些示例。

URL选项

http://[jenkins-server]/[command]

[命令]可以存在的地方

  1. 退出关机詹金斯
  2. 重新启动重新启动詹金斯
  3. 重新加载以重新加载配置

答案 18 :(得分:0)

作为Web用户,您可以通过转到作业配置历史记录,然后导出XML来导出。

我无法访问Jenkins正在运行的计算机,并想导出为备份计算机。

关于将xml作为Web用户导入,我仍然想知道。

答案 19 :(得分:0)

2021 和进出口过程是痛苦的!!

如果您对两个 jenkins 实例具有 shell 访问权限:旧的和新的,请按照以下步骤执行成功的作业迁移:

在你的旧詹金斯

  • 在您的旧 jenkins 中找到 jenkins 家。通常/var/lib/jenkins。如果您使用的是 bitnami:/opt/bitnami/jenkins
  • 在 jenkins home 中,进入工作文件夹
  • 您应该会看到包含您的作业名称的文件夹。在这些文件夹中,您只需要 config.xml
  • 备份所有必需的作业。只是文件夹及其 config.xml。还有很多其他文件不是必需的。

在你的新詹金斯中:

  • 找到詹金斯的家
  • 将您的作业(以前的备份)复制到作业文件夹
  • 确保这些新文件夹的所有者为“jenkins”用户。如果不使用这个:chown jenkins:jenkins /var/lib/jenkins -R
  • 重启詹金斯
  • 使用你的工作:D