Копаемся в закромах 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 "Hello"</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, то вот здесь есть много полезных скриптов.
На этом все.. Если у вас есть чем поделиться, пишите, давайте шарить знания вместе.