Копаемся в закромах Jenkins

Такая вот темка, о которой захотелось написать после альфа релиза Jenkins 2.0. У нас всех на проектах есть CI сервер. У вас нету? Плохо, нужно срочно завести. Если вы не знаете, что такое Jenkins, можете посмотреть видео, либо почитать о способах настройки Jenkins CI у себя на проекте.

В этой же заметке хочу немного пролить свет на то, как и где хранятся созданные вами задачи, ну и описать такой инструмент как Jenkins Job Builder, о котором я услышал от Алексея Солдатенко на прошедшем SeleniumCamp 2016. Только спустя неделю удалось попробовать этот инструмент.

Сейчас все большую популярность набирает DevOps направление, а автоматизаторы как никто близки по духу к этой специализации в IT. Когда автоматизатор умеет самостоятельно развернуть тестовую инфраструктуру - это круто. Так вот, чтобы ваша инфраструктура соответствовала духу InfrastructureAsCode, нужно очень хорошо разбираться в инструментах и их особенностях. Скажем, на моем прошлом проекте я был ответственен за настройку и поддержку Jenkins сервера и естественно переживал, дабы чего не хлопнулось, - поэтому делал бекапы. Правда, делал я это косо: просто архивировал папку ${USR_HOME}/.jenkins в tar архив. Достаточно топорно, зато надежно =)

Теперь же хочу поделиться некоторыми полезными советами, которые, возможно, помогут кому-то на проекте.

Начну с того, что сейчас я предпочитаю запускать Jenkins в Docker контейнере. Делается это простой командой:

docker run --name myjenkins -p 8080:8080 -p 50000:50000
-v /your/home:/var/jenkins_home jenkins

Эта штука отлично работает, в особенности если вам нужен Jenkins для каких-либо экспериментов. Более того, вы можете собрать Jenkins с предустановленными плагинами. Для этого нужно следовать инструкциям, описанным в разделе документации Installing more tools.

Мое мнение: если следовать этим путем, то можно каждый раз запускать Jenkins со всеми нужными плагинами, не тратя время на их ручную установку. Очень сильно экономит время, к тому же, не нужно держать в голове все имена нужных вам плагинов.

P.S. Почему-то на Windows 10 у меня эта штука не завелась.

Если же вы хотите установить какой-то плагин, а его нету в Jenkins репозитории или вам нужна конкретная версия. Вы можете свободно скачать .hpi файлы из этого репозитория и потом просто скопировать их в папку .jenkins/plugins и рестартовать ваш сервер.

Теперь давайте посмотрим на создание Job Item. Раньше я создавал все задачи вручную и особо не переживал, но вот, оказывается, есть отличный инструмент Jenkins Job Builder, с помощью которого можно хранить конфигурации в Yaml файлах. По умолчанию все созданные задачи хранятся в config.xml файлах в папке .jenkins/jobs/${job_name}. Вот пример такого config.xml для задачи, которая всего лишь извлекает shell команду echo "Hello":

config.xml

<?xml version='1.0' encoding='UTF-8'?>
<project>
  <actions/>
  <description></description>
  <keepDependencies>false</keepDependencies>
  <properties/>
  <scm class="hudson.scm.NullSCM"/>
  <canRoam>true</canRoam>
  <disabled>false</disabled>
  <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
  <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
  <triggers/>
  <concurrentBuild>false</concurrentBuild>
  <builders>
    <hudson.tasks.Shell>
      <command>echo &quot;Hello&quot;</command>
    </hudson.tasks.Shell>
  </builders>
  <publishers/>
  <buildWrappers/>
</project>

Достаточно массивно, потому что в Yaml формате это выглядит так:

config.yaml

- job:
    name: Test JJB
    description: 'Do not edit this job through the web!'
    project-type: freestyle
    builders:
    - shell: echo "Hello"

Мое мнение: достаточно удобно, так как можно хранить конфигурации под системой контроля версий вместе с файлом плагинов и не переживать о возможном сбое сервера и потере всех настроек. Правда, разбираться с Jenkins Job Builder тоже придется, так как не каждый может взять и сразу написать валидный Yaml файл :) Но штука классная.

Увы про слейвы ничего такого нету, вы можете просто хранить в git файлы конфигурации из папки .jenkins/nodes/${node_name}/config.xml, так как они не слишком большие.

Если вы хотите как-то похачить Jenkins, то вот здесь есть много полезных скриптов.

На этом все.. Если у вас есть чем поделиться, пишите, давайте шарить знания вместе.