Jenkins: копирование проекта на другой сервер

Автор: | 13/03/2019

Имеется старый Jenkins с пачкой iOS джоб, которые надо перенести на новый сервер.

Документация предлагает:

Move a job from one installation of Jenkins to another by simply copying the corresponding job directory.

Т.е. вариант первый, самый простой – просто скопировать всю папку jobs, или вложенных задач.

Недостаток (или преимущество, в зависимости от задачи) такого подхода – будет скопирована вся история билдов, логи, артефакты и прочее.

Другой вариант – с использованием Jenkins CLI, и позволяет создать точно такую же джобу – но “с нуля”.

Jenkins CLI

Переходим в Manage Jenkins > Jenkins CLI, загружаем файл:

Копируем ссылку, загружаем:

[simterm]

$ sudo wget -O /usr/local/bin/jenkins-cli.jar https://jenkins.example.com/jnlpJars/jenkins-cli.jar

[/simterm]

Проверяем, в -auth передаём логин:пароль или логин:api-токен, в -s – URL хоста.

Тут запускаем локально, на старом CI, используя его jenkins-cli.jar:

[simterm]

root@jenkins:/backups# java -jar /data/jenkins/war/WEB-INF/jenkins-cli.jar -auth user:pass -s http://localhost:8080/ version
2.89.4

[/simterm]

Импортируем джобу с именем Unit Test из папки iOS Projectname в файл Projectname_Unit_Test_job.xml: с помощью cat читаем содержимое файла, и через пайп | – передаём данные в CLI:

[simterm]

root@jenkins:/backups# java -jar /data/jenkins/war/WEB-INF/jenkins-cli.jar -auth user:pass -s http://localhost:8080/ get-job 'iOS Projectname/Unit Test' > Projectname_Unit_Test_job.xml

[/simterm]

Проверяем файл:

[simterm]

root@jenkins:/backups# head Projectname_Unit_Test_job.xml
<?xml version='1.0' encoding='UTF-8'?>
<project>
  <actions/>
  <description>Runs test, and delivers feedback to slack</description>
  <keepDependencies>false</keepDependencies>
  <properties>
    <com.coravy.hudson.plugins.github.GithubProjectProperty plugin="[email protected]">
      <projectUrl>https://github.com/Projectname-dev/Projectname-iOS/</projectUrl>
      <displayName></displayName>
    </com.coravy.hudson.plugins.github.GithubProjectProperty>

[/simterm]

Загружаем на новый сервер в папку iOS Projectname:

[simterm]

root@jenkins:/backups# cat Projectname_Unit_Test_job.xml | java -jar /data/jenkins/war/WEB-INF/jenkins-cli.jar -auth user:pass -s https://ci.example.com create-job 'iOS Projectname/Unit Test'

[/simterm]

Проверяем:

Готово.