如何将作业从一个实例复制到另一个实例?

时间:2012-01-27 19:13:40

标签: jenkins

我正在设置一个新服务器来运行Jenkins。我有一个现有的Jenkins服务器,里面有工作。现在,我想将作业从旧实例复制到新实例。

在新实例上,我处于“新建作业”屏幕。我注意到有一个“复制现有工作”选项。当我在旧实例上放置作业路径时,我不断收到错误消息“http://old-instance/job/jobName处没有这样的工作”。

如何将作业从一个实例复制到另一个实例?

10 个答案:

答案 0 :(得分:29)

根据手册https://wiki.jenkins-ci.org/display/JENKINS/Administering+Jenkins,只需将相应的作业目录移动到新的Jenkins实例。

“复制现有作业”选项要求作业存在于当前Jenkins实例上。可以选择将现有作业用作模板。它不能用于在实例之间移动作业。

答案 1 :(得分:15)

有一个非常插件可以在线进行,没有文件副本(也可以):作业导入插件:https://wiki.jenkins-ci.org/display/JENKINS/Job+Import+Plugin

问候

迪迪埃

答案 2 :(得分:4)

至少有三种方式

  1. 复制职位目录
  2. 使用导入插件 https://wiki.jenkins-ci.org/display/JENKINS/Job+Import+Plugin
  3. 使用Jenkins CLI列出作业,获取作业xml,然后创建一个 基于xml的新服务器上的作业

答案 3 :(得分:3)

Job Import Plugin是将作业从一个jenkins实例复制到其他实例的最简单方法。如果由于某些安全问题而无法正常工作,您可以将整个jobs目录从旧的jenkins实例复制到新的jenkins实例中。作业存在于{Jenkins_Home} \ jobs ..服务器上。

完成复制后,只需在新实例上重新加载配置即可。您可以从Jenkins->管理Jenkins->从磁盘重新加载配置

重新加载它

重新加载完成后,您可以看到自己的工作。 :)

答案 4 :(得分:3)

您也可以在命令行上执行此操作:

  1. 从您的用户的两个jenkins实例中收集身份验证API令牌:http://<jenkins-server>/user/<username>/configure
  2. 使用旧实例的配置在新实例上创建作业的Curl命令: curl -k -s http://<user>:<token>@OLD_JENKINS/job/JOBNAME/config.xml | curl -k -X POST https://<user>:<token>@http://NEW_JENKINS/createItem?name=JOBNAME --header "Content-Type: application/xml" -d @-
  3. (由https://stackoverflow.com/a/30575318/3891027提供)

答案 5 :(得分:1)

您只需创建一个与作业同名的目录,然后从原始Jenkins复制config.xml文件。

请注意,如果您需要保留构建编号,则需要在构建号文件中复制该编号,并且如果您在两个Jenkins服务器上都有不同的插件,请小心,正如@LeeMeador在他的评论中所说的那样。 / p>

答案 6 :(得分:0)

我使用Perl使用CLI自动执行此类流程(转到$ jenkins_URL / cli /并下载Jenkins-cli.jar)(脚本已更改为您的方案)

确保在新的Jenkins上安装了所有必要的插件非常重要,否则任何迁移方法都无法正常工作......

my $newJobPrefix = "New_Jenkins";
my $jobPrefix = "Old_Jenkins";
my $result = `"$java" -jar old-jenkins-cli.jar -noKeyAuth -s $jenkins_URL list-jobs All`;
@jobList = split("\n", $result);
foreach my $job (@jobList)
{
    # ---- Getting configuration of jobs ----
    print "Getting config for: $job \n";
    my $config = `"$java" -jar $jenkinsJar -noKeyAuth -s $jenkins_URL get-job $job`;

    my $file = "$jobPrefix\\$job.xml";
    unless(open FILE, '>', $file) {die "Unable to open $file";}
    print FILE $config;
    close FILE;

    # ---- Adding Job to new Jenkins ----
    my $result = `"$java" -jar new-jenkins-cli.jar -noKeyAuth -s $New_jenkins_URL create-job $job< $file`;
}
祝你好运!

答案 7 :(得分:0)

  1. 复制现有文件夹中的作业
  2. 将作业移至新文件夹

答案 8 :(得分:0)

我建议使用scp将作业目录从〜jenkins / jobs直接复制到目的地:

scp -r ~jenkins/jobs/{sourceJobName} user@remote:~jenkins/jobs/

答案 9 :(得分:0)

通过Jenkins CLI

  • .jenkins-cli .jenkins-cli_newserver 是包含

    的单行文件

    username:userapikey

  • 将旧服务器 get-job 响应中的XML输出管道到新服务器 create-job 请求中。

    java -jar ~/jenkins-cli.jar \
        -s http://oldserver:8080 \
        -auth @/.jenkins-cli \
        get-job "job name" \
    | java -jar ~/jenkins-cli_newserver.jar \
        -s http://newserver:8080 \
        -auth @/.jenkins-cli_newserver \
        create-job "new or existing job name"
    

    ⚠️请注意, create-job 可以重命名作业⚠️