詹金斯的出口/进口工作

dam*_*uar 257 jenkins

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

Lar*_*Cai 174

可能使用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
Run Code Online (Sandbox Code Playgroud)

它适用于我,我习惯存储在我的版本控制系统内

  • 为此,旧服务器上的Java,新服务器和本地计算机需要具有相同的版本.否则,会出现奇怪的流/版本问题.您的jnlp端口也需要打开. (3认同)

Khe*_*hez 148

Jenkins有一个相当不错的wiki,虽然你刚接触CI软件时很难阅读...

它们为在服务器之间移动作业提供了简单的解决方

诀窍可能是需要从Jenkins配置页面重新加载配置.

  • 那么您需要访问安装了jenkins的系统吗?所以这不是普通用户的答案. (20认同)

Mar*_*atC 140

单行:

-H CRUMB


认证

-H CRUMB


使用Crumb,如果CSRF处于活动状态(请参阅此处的详细信息)

得到面包屑:

-H CRUMB

-H CRUMB

申请面包屑-H CRUMB:

-H CRUMB

  • curl -s http:// <USER>:<API_TOEKN> @ OLD_JENKINS/job/JOBNAME/config.xml | curl -X POST'http:// <USER>:<API_TOEKN> @ NEW_JENKINS/createItem?name = JOBNAME'--header"Content-Type:application/xml"-d @ - <br/>从中获取用户API密钥:http:// JENKIS_URL/user/<USER>/configure> API令牌>显示API令牌 (6认同)
  • 甚至不需要使用 curl 命令,因为您只需转到浏览器中的 `http://OLD_JENKINS/job/JOBNAME/config.xml` 链接即可获取 `config.xml` 文件。 (3认同)
  • 你需要在 `curl` 命令中使用 `--data-binary` 而不是 `-d`,因为 `-d` 可能会弄乱脚本中的空格。 (3认同)

jwe*_*rny 24

有一个名为Job Import Plugin的插件可能就是你想要的.我用过它.它确实存在从不允许匿名访问的服务器导入项目的问题.

完整性:如果您具有对两者的命令行访问权限,则可以执行Khez已提及的用于移动,复制和重命名Jenkins作业的过程.


Gay*_*tti 22

在 Web 浏览器中访问:

http://[jenkinshost]/job/[jobname]/config.xml
Run Code Online (Sandbox Code Playgroud)

只需将文件保存到您的磁盘。

  • 答案不完整:( (2认同)

use*_*755 13

转到Jenkins服务器的首页,单击页面底部的REST API:

创造工作

要创建新作业,请config.xml使用query参数发布到此URL name=JOBNAME.您需要发送Content-Type: application/xml标题.200如果创建成功,您将获得状态代码,4xx/5xx如果失败则获得代码.config.xml是Jenkins用于将项目存储在文件系统中的格式,因此您可以在Jenkins主目录中查看它们的示例,或者从中检索现有作业的XML配置/job/JOBNAME/config.xml.


jim*_*ont 12

在我的Jenkins实例(版本1.548)中,配置文件位于:

/var/lib/jenkins/jobs/-the-project-name-/config.xml

由jenkins用户和jenkins组拥有644权限.在此处复制文件应该可以正常工作.我没有尝试直接更改它,但已经从这个位置备份配置,以防项目需要再次设置.

  • 在 Windows `C:\Users\{admin-user}\.jenkins\jobs\-the-project-name-\config.xml` (2认同)

小智 8

Job Import插件是从其他Jenkins实例导入作业的简便方法.只需要提供源Jenkins实例的URL.Remote Jenkins URL可以采用以下任何类型的URL:

  • http://$JENKINS - 获取远程实例上的所有作业

  • http://$JENKINS/job/$JOBNAME - 找一份工作

  • http://$JENKINS/view/$VIEWNAME - 在特定视图中获取所有工作


Kat*_*atu 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
Run Code Online (Sandbox Code Playgroud)


小智 5

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
Run Code Online (Sandbox Code Playgroud)

导入工作

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
Run Code Online (Sandbox Code Playgroud)