6 полезных плагинов Jenkins для повышения производительности


Оглавление (нажмите, чтобы открыть):

Как улучшить производительность сервера Jenkins?

Наш сервер Jenkins (Linux-машина) замедляется в течение определенного периода времени, и он становится невосприимчивым. Все задания выполняются неожиданно долго (хотя они работают на подчиненных устройствах, которые являются разными машинами с сервера). Одна из вещей, которую я наблюдал, — увеличение количества открытых файлов. Число, кажется, увеличивается, как показано на рисунке ниже. Есть ли у кого-нибудь решение продолжить проверку без перезагрузки сервера? Кроме того, существуют ли какие-либо конфигурации/настройки, которые могли бы повысить производительность сервера jenkins?

Мы используем Jenkins в течение одного года, и мы старались поддерживать его в актуальном состоянии (Jenkins + плагины). Как и вы, мы экспериментировали с некоторыми неудобствами, в зависимости от новых версий Jenkins или плагинов. Поэтому мы решили остановить это «непрерывное» обновление

Худшим было обновление плагина Active Directory (от 1,36 до 1,37), проверка подлинности заняла несколько минут.

Смиренно, вот несколько советов:

  • Обновите Jenkins, но используйте только версии с поддержкой «Долгосрочной поддержки» (последняя версия — 2.73.3).
  • Перезагрузите Дженкинса каждую ночь.
  • Добавить RAM на ваш сервер. Дженкинс много использует файловую систему, и это улучшит кеширование.
  • Определите параметры памяти min/max JVM с тем же значением, чтобы избежать динамического перераспределения, например: -Xms4G -Xmx4G
  • Добавить подчиненные устройства и выполнять задания только на подчиненных устройствах

Пишем плагин для Jenkins — шаг сборки

Сегодня — вторая статья из цикла про плагины в Jenkins. В предыдущем посте мы научились работать с глобальными настройками конфига, а сегодня я расскажу как написать свой собственный шаг сборки (или несколько =)).

В терминах Jenkins, любой шаг сборки представляет собой либо Builder (осуществляет непосредственно сборку), либо Publisher (проделывает послесборочные операции). Чтобы было понятнее, поясню на простых примерах. Запустить ant, maven, сборку debian-пакета или скопировать артефакты (необходимые для сборки) из другого проекта — это всё builder’ы. Обновить тикеты в Jira, отправить нотификацию по email или в jabber, поместить в pull-request резульаты тестов — типичные publisher’ы.

Как ты понимаешь, разделение это довольно условное. Например, статический анализ кода может быть как builder’ом, так и publisher’ом. Это зависит от того, считает ли команда успешное прохождение этого шага обязательной частью процесса сборки или нет. Пусть наш шаг будет publisher’ом — свой плагин чаще всего нужен для интеграции с какой-то внутренней системой, для остального есть MasterCard уже готовые плагины.

Итак, наш publisher состоит из двух частей — конфигурации и непосредственно кода. Разберёмся для начала с кодом. Твой класс должен наследовать абстрактный класс Publisher, который уже @deprecated =). Вместо него предлагается использовать одного из наследников — Recorder или Notifier. Первый выносит вердикт о статусе билда (на основе информации от других шагов или чего-то еще), а второй — оповещает людей или другие системы об этом статусе.

Нашему шагу наверняка потребуются какие-то параметры — они передаются через конструктор с аннотацией @DataBoundConstructor . А переданные в конструктор значения сохраним для дальнейшего использования:

Непосредственно действия сборочного шага выполняются в методе perform :

В этом методе нам доступны:

  • build — из него можно получить настройки билда и всевозможную информацию о нём
  • launcher — нам пока не нужен
  • listener — из него можно получить логгер, а также управлять результатом сборки

Есть еще один интересный метод, который может тебе пригодиться:

Он используется для синхронизации с другими сборками в рамках задачи. По сути, это атавизм, оставшийся со времён когда не было параллельных сборок, и желательно не использовать разделяемых ресурсов в своём workflow. Однако это может пригодиться при интеграции с внутренними инструментами, не поддерживающими параллельное использование. Этот метод может возвращать одно из трёх значений:

  • BuildStepMonitor.BUILD — если шаг требует отсутствия незавершённых сборок
  • BuildStepMonitor.STEP — если шаг требует отсутствия незавершённых аналогичных шагов в других сборках
  • BuildStepMonitor.NONE — если синхронизаци не требуется

Когда сам сборочный шаг написан, остаётся провязать это с настройками в web-интерфейсе (чтобы нужные параметры приходили в конструктор). Делается это аналогично глобальным настройками через дескриптор:

В общем случае этого достаточно для написания большинства сборочных и интеграционных плагинов. В следующих постах я расскажу про валидацию данных, локализацию и тестирование (куда же без него). Если тебе интересно что-то еще — вэлкам в коменты =).

Моды для улучшения производительности Fallout 4

Мы продолжаем рубрику, связанную с моддингом и настройкой Fallout 4. В прошлой статье мы разобрались в вопросе и теперь применим полученные знания на практике: рассмотрим четыре самых важные модификации для улучшения производительности.

В статье будут даны расширенные описания каждого из представленных плагинов, а также инструкции по их безопасной установке. Напоминаем, что содержание рубрики зависит от того, что именно посетители портала хотят увидеть в ней. Все предложения и пожелания пишите в комментарии!

Итак, вы установили самую свежую версию игры. Первое, с чем вы скорее всего столкнетесь, это не самая лучшая оптимизация. Bethesda в своей манере выпустила одну из самых «больших» игр, но не потрудилась отшлифовать ее до блеска. С исправлением тоже не задалось: с момента релиза прошло больше месяца, а официальных патчей раз-два и обчелся, да и к тому же они не очень-то помогли тем, кто жалуется на постоянные подтормаживания, просадки FPS и прочие неприятности.

И тут на сцену выходят моды, которые уже сейчас могут существенно помочь любителям пост-ядерного Бостона, повысив заветный счетчик частоты кадров до вполне играбельного значения.

ENBoost

Этот весьма полезный инструмент является своеобразным «маст-хевом» для любого, кто играет в Fallout 4. Даже если вас полностью устраивает базовая игра, и моды вы ставить не собираетесь, но мы все равно рекомендуем использовать ENBoost.

Этот инструмент позволяет расширить видео-память (VRAM), которая используется игрой, за счет оперативной памяти (RAM), а также вмешивается в процесс распределения памяти в игре. Это позволяет избежать вылетов на рабочий стол, которые могут происходить на слабых машинах, а также по возможности исправляет неприятные фризы и возможную порчу файлов сохранений, которая иногда случается по самым разным причинам.

Особенно полезным этот мод будет для тех, у кого процессор имеет только два ядра, а также тем, у кого слабая видеокарта с объемом памяти меньше 2 ГБ. Владельцам мощных конфигураций использование ENBoost мало что даст, разве что 2-3 лишних кадра в секунду, но в перспективе мод также сможет значительно улучшить графику за счет эффектов ENBSeries, которые разработчик постепенно добавляет в новые версии.

Чтобы установить ENBoost, сначала скачиваем архив с самой свежей версией (на момент написания статьи — 0.288), распаковываем содержимое папки WrapperVersion из архива в папку, где находится EXE-файл игры (Fallout4.exe).

Далее необходимо правильно настроить файл enblocal.ini. Для этого нужно знать, за что отвечают те или иные параметры:

ApplyStabilityPatch — исправление возможных вылетов и порчи сохранений.

UsePatchSpeedhackWithoutGraphics — отключает использование графических функций, которые представлены в enbseries.ini. Пока что автор только тестирует воздействие их на производительность, так что не рекомендуем их выключать.

ForceVideoMemorySize — включает расширение видео-памяти за счет оперативной памяти, это главная изюминка мода.

VideoMemorySizeMb — задает точное значение памяти, которое будет использоваться в качестве VRAM. Это значение является суммой доступной памяти вашей видеокарты и вашей оперативной памяти, внимательно отнеситесь к этому параметру, узнайте точное количество памяти, которое предоставляет ваша видео-карта и прибавьте к этому значению объем вашей оперативной памяти, например если у вас видеокарта на 4 ГБ видеопамяти и 8 гигабайт «оперативки», то X будет равен 4096+8192, то есть 12288.

ForceVSync — активирует вертикальную синхронизацию, включайте этот параметр только если вертикальная синхронизация отключена в настройках игры и настройках драйвера видеокарты.

EnableFPSLimit — задействует ограничение частоты кадров, нет смысла включать, если вы играете со включенной вертикальной синхронизацией.

FPSLimit — значение, которое не будет превышать частота кадров при использовании EnableFPSLimit.

DisableFakeLights — исправляет очень неприятный баг освещения, из-за которого все персонажи оказываются подсвечены как бы изнутри, из-за чего незначительно увеличивается нагрузка на компьютер и создается неестественный блеск у персонажей.

Остальные параметры мы расшифровывать не будем, так как они уже выставлены разработчиком в должном виде.

При запуске игры в левом верхнем углу экрана вы будете видеть информацию о том, что ENBoost задействован. Вы также можете на лету менять некоторые параметры, если нажмете SHIFT+ENTER. Также вы сможете выводить счетчик частоты кадров нажатием «*», а также делать некоторые другие полезные мелочи, которые в конфиге enblocal.ini вынесены в секцию [INPUT].

Shadow Boost

Еще один полезный инструмент для повышения производительности от того же автора. Он настраивается гораздо проще, но при этом может дать даже больший эффект.

Чтобы установить Shadow Boost, сначала скачиваем архив с самой свежей версией (на момент написания стаьи — 1.2.37.0), распаковываем содержимое папки Bin (именно содержимое, а не саму папку!) в директорию, где находится EXE-файл игры (Fallout4.exe).

fTargetFramerate — частота кадров, которую вы хотите получить.

fDistChangeSpeed — скорость изменения дальности прорисовки теней, допустимые значения варьируются от 0.5 до 5.0.

fShadowDrawDistMin — минимальная дистанция прорисовки теней, которую может выставлять Shadow Boost.

fShadowDrawDistMax — соответственно, максимальная дистация прорисовки.

Ну и для того, чтобы закрепить эту информацию, приведем пример оформления файла:


Texture Optimization Project

Итак, теперь наша игра использует большее количество памяти для работы с графикой, а также может динамически изменять дальность прорисовки теней. Теперь пришла пора заняться текстурами, которые по обыкновению разработчиков Bethesda Game Studios оказались довольно криво оптимизированными. Они имеют большой размер и детализацию, однако из-за не самого правильного алгоритма сжатия требуют большого времени для загрузки. От этого страдает и частота кадров, и внешний вид игры, потому что текстуры банально не успевают прогружаться, так что игрок может часто сталкиваться с размазанными и нечеткими стенами и объектами.

Texture Optimization Project создавался с целью уменьшить размер текстур, но при этом сохранить их качество. Автор не стал экономить время как Bethesda и сразу отказался от потоковой обработки всего массива текстур. Вместо этого он вручную обрабатывал все текстуры в игре. Благодаря этому объем, занимаемый ими, снизился в полтора раза. Соответственно, повысилась частота кадров и скорость прогрузки. Также это помогло исправить очень неприятный эффект, когда после переключения оружия в игре приходилось ждать по несколько секунд, пока персонаж его достанет.

Обратная сторона медали — небольшое снижение детализации текстур, которое будет заметно, если специально сравнивать скриншоты обычной версии игры и модифицированной.

Мод можно установить двумя способами — вручную и с помощью программы-органайзера Nexus Mod Manager, которую можно скачать на том же сайте. Ручная установка может быть различна для каждого мода, поэтому большинство моддеров рекомендуют именно автоматический метод установки NMM, так как он обладает следующими преимуществами:

  • не требует ручной распаковки архивов и проходит в атоматическом режиме;
  • установленные моды хранятся отдельно от игры, а потому не могут повредить ее.

После установки Nexus Mod Manager переходим на страницу мода Texture Optimization Project, кликаем на вкладку FILES ниже заголовка и скачиваем компоненты мода. На момент написания статьи самая актуальная версия мода — 0.17, соответственно список загрузки получается следующий:

  • TOP — Base 1 of 4
  • TOP — Base 2 of 4
  • TOP — Base 3 of 4
  • TOP — Base 4 of 4
  • TOP — Hotfix 7
  • 0.13 Update
  • 0.14 Update
  • 0.15 Update
  • 0.16 Update
  • 0.17 Update
  • optional hotfix for grass being wierd — исправление для тех, у кого наблюдаются проблемы с отображением травы

Для скачивания через NMM нажимайте кнопку «DOWNLOAD WITH MANAGER» и тогда программа начнет загрузку архива. После этого вам нужно будет в порядке загрузки активировать каждый из скачанных архивов.

Теперь игра будет использовать новые текстуры, меньшие по объему, что даст существенный прирост частоты кадров тем, у кого не самая мощная видеокарта. Особенно это заметно в городских зонах, где наиболее часто происходят просадки FPS.

FogOut

Наверняка во время игры вы замечали странный туман в помещениях. Если на открытой местности его еще как-то можно понять, ведь он неплохо прячет размытые удаленные пространства, частично закрывая их собой, то в помещениях такой странный атмосферный эффект только зря расходует ресурсы компьютера. Поэтому последним модом, который мы рассмотрим в рамках данной статьи, будет FogOut.

Эта небольшой плагин поможет убрать туман в Fallout 4 и поставляется в двух вариациях:

  • Базовая (FogOut.esp) — мод задействован только в помещениях;
  • Облегченная (FogOut-Interiors.esp) — работает и в помещениях, и на открытой местности;

Для того, чтобы установить FogOut, заходим на страницу мода, скачиваем один из этих архивов, затем открываем NMM и нажимаем кнопку с зеленым плюсом на левой панели. Указываем путь к скачанному архиву, программа сразу же добавит его в список модов. Активируем нажатием на кнопку с зеленой стрелкой и не забываем проверить наличие галочки напротив названия плагина во вкладке «Plugins».

Это последний из четырех модов, которые мы рассмотрим сегодня. Практика показывает, что все вместе они могут существенно улучшить производительность Fallout 4 на слабых системах, а также дать небольшое количество дополнительных FPS на более мощных. Конечно, весь процесс настройки занимает довольно много времени, а также требует некоторых познаний, но ведь как может быть иначе, если мы говорим о моддинге?

DevOps. Continuous Integration на примере Jenkins

November 28, 2020 Jazz Team Технические статьи , 0

В данной статье будут изложены основные идеи Continuous Integration, а также приведен пример быстрого развёртывания Jenkins на проекте.

Термины и определения

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

Непрерывная интеграция (CI, Continuous Integration) — практика разработки программного обеспечения, которая заключается в слиянии рабочих копий в общую основную ветвь разработки несколько раз в день и выполнении частых автоматизированных сборок проекта для скорейшего выявления потенциальных дефектов и решения интеграционных проблем. [wiki]

Jenkins — проект для непрерывной интеграции с открытым исходным кодом, написанный на Java. [jenkins.io]

Автоматизированное тестирование – это процесс верификации программного обеспечения, при котором основные функции и шаги теста, такие как запуск, инициализация, выполнение, анализ и выдача результата, выполняются автоматически при помощи инструментов для автоматизированного тестирования. [protesting]

Немного о CI

В настоящее время Continuous Integration — одна из практик, применяемых в Agile методологии. В подобных методологиях она удачно сочетается с другими практиками, такими как unit тестирование, рефакторинг, стандарт кодирования. Но даже без них можно получить пользу от непрерывной интеграции. Из определения Continuous Integration следует его самая главная идея — найти ошибку на ранней стадии проще для разработки и дешевле для бизнеса. Поэтому, если в проект вносятся достаточно большие изменения, необходимо обязательно проводить тестирование (unit-тесты, автоматизированные тесты).

Мастер Йода рекомендует:  Задачи повышенной сложности — всё по этой теме для программистов

Стоит отметить, что режимов запусков может быть несколько:

  • тесты запускаются после каждого коммита — это идеальный вариант для unit-тестов и спорный для end-to-end, почему поясню ниже;
  • тесты запускаются один раз в сутки (чаще всего ночью). Этот вариант не подойдет для unit-тестов, поскольку приложение долгое время может оставаться в нерабочем виде, но достаточно неплохой вариант для автоматизированных функциональных end-to-end тестов, особенно когда тесты занимают длительное время;
  • тесты запускают перед выпуском релиза — один из самых плохих вариантов использования, но и его можно тоже использовать в условиях ограниченных ресурсов, а новая функциональность, разрабатываемый в своей ветке, проверяется один или несколько раз в день.

Инструментов для CI существует достаточно много:

  • из локальных можно выделить — GitLab CI, TeamCity, Bamboo, Jenkins, Hudson, Circle CI;
  • облачные — BitBucket Pipelines, Heroku CI, Travis, Codeship, Buddy CI, AWS CodeBuild.

Jenkins

Почему стоит использовать именно Jenkins:

  • бесплатный и надёжный;
  • большое количество мануалов по работе, а значит учиться работать с ним проще;
  • легко забэкапить и развернуть на другой машине в течение 5 минут;
  • осуществлять управление можно конфигурированием и перемещением xml файлов.

Из минусов отметил бы:

  • частый выход новых версий, если используется не LTS;
  • интеграция с различными сервисами завязана на множество различных плагинов;
  • иногда может появится задача, которая требует нестандартного подхода.

Приведу запомнившийся пример. Необходимо поддерживать несколько версий продукта, которые работают с разными версиями java и если проект запускался не с той версией, то тесты стабильно начинали падать. Для этого пришлось добавлять плагин — Environment Injector, также добавить дополнительный шаг в сборке, который в зависимости от версии продукта изменял параметры рабочего окружения для использования конкретной версии java:

В случае возникновения кейса, описанного в примере выше, на TeamCity достаточно было указать версию java при запуске прогона.

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

Идеальный процесс разработки можно представить так:

  • разработчик отправляет код в репозиторий;
  • на сервере непрерывной интеграции изменения объединяются с основным кодом, выполняются юнит-тесты;
  • полученные на предыдущем шаге артефакты загружаются в отдельную тестовую среду, где приложение тестируется автотестами;
  • дальше всё проверяется для попадания на продакшн;
  • развёртывание на продакшене.

Установка Jenkins

Про установку написано достаточно много и подробно, самый лучший мануал конечно от разработчиков — Installing Jenkins.

В свою очередь хочу поделиться своим опытом резервного копирования и последующей установкой из сохраненной копии.

Резервное копирование

Можно использовать встроенные плагины, но могут быть проблемы совместимости разных версий плагинов, поэтому для этой цели мы пришли к использованию bash скриптов которые входили в отдельную сборку, которая запускалась несколько раз в день\неделю, Например скрипт jenkins-backup.sh — выполнял сохранение текущей рабочей конфигурации: view, job, настроек окружения, плагинов, которые сохранялись в отдельный архив, который можно переносить и использовать далее.

Установка из сохраненной копии

1.Необходимо установить java и инструмент архивации, в нашем случае unzip.

2. Разархивировать ранее сохранённый файл (предварительно перейдя в каталог с сохранным архивом):


unzip Jenkins.zip -d %path_To_Jenkins%

3. Перейти в каталог Jenkins и выполнить запуск Jenkins командой

cd %path_To_Jenkins% && java -jar jenkins.war

4. Зайти в WEB интерфейс по порту 8080.

Если вы работаете с linux машиной по ssh, то после закрытия соединения вероятно Jenkins будет остановлен. Для того чтобы избежать такого поведения можно использовать такой приём: выполнить команду с добавлением символа & — в результате команда будет выполняться в фоне, а управление будет возвращено обратно в командную строку, а для того чтобы при отключении от удаленной системы не завершались запущенные задачи можно использовать утилиту nohup, которая позволяет процессам продолжать работу даже после того, как вы выйдете из системы:

nohup java -jar jenkins.war &

Добавление Jenkins в службы

Для того чтобы в linux системах избежать ситуации, описанной в предыдущем абзаце, можно установить Jenkins как службу, для того чтобы каждый раз после перезагрузки Jenkins стартовал автоматически. Для этого необходимо создать файл /etc/systemd/system/jenkins.service командой:

и добавить содержимое в jenkins.service:

Выполнить перезапуск службы сервисов: sudo systemctl daemon-reload

Команда для запуска сервиса jenkins: sudo systemctl start jenkins.service

перезапуска sudo systemctl restart jenkins.service

Важно отметить, что файл jenkins.war может быть расположен где угодно. Для того чтобы “подхватились” текущие параметры проекта, можно использовать команду, которая выполнит монтирование раздела Jenkins к работающему jenkins:

sudo mount -o bind /%path_To_Jenkins%/

Такой вариант будет работать только до перезагрузки системы, поэтому можно создать симлинк в директории

/ && sudo ln -s /%path_To_Jenkins%/ .jenkins

Добавление и подготовка к работе node в Jenkins

Данный раздел написан с учетом практики, что жизненный цикл у Jenkins и node ограничен, например, 2 неделями или месяцем.

Для добавления slave node в Jenkins можно добавить каждую машину руками, но из-за этого требуется постоянно заходить на машину и выполнять одни и те же операции, а это приводит к мысли, что всё можно максимально автоматизировать.
Для этого достаточно создать несколько Job, которые будут последовательно выполнять:

  1. заказ машин для добавления в качестве slave node Jenkins;
  2. добавлять ранее заказанные машины в Jenkins с использованием rest api или Jenkins cli;
  3. выполнять развертывание необходимого окружения.

Все выше названные действия можно выполнять, используя дополнительные инструменты: ansible — для развертывания и настройки необходимых параметров и docker — как для развертывания Jenkins, так и для установки окружения на slave nodes.

jenkins Начало работы с дженкинсами

замечания

Jenkins — инструмент непрерывной интеграции с открытым исходным кодом, написанный на Java. Проект был раздвоен из Хадсона после спора с Oracle .

Jenkins предоставляет услуги непрерывной интеграции для разработки программного обеспечения. Это серверная система, работающая в контейнере сервлетов, таком как Apache Tomcat. Он поддерживает инструменты SCM, включая AccuRev, CVS, Subversion, Git, Mercurial, Perforce, Clearcase и RTC и может выполнять проекты на основе Apache Ant и Apache Maven, а также произвольные сценарии оболочки и командные команды Windows. Первым разработчиком Дженкинса является Кохсуке Кавагути . Выпущенный под лицензией MIT, Дженкинс является свободным программным обеспечением.

Сборка может запускаться различными способами, в том числе инициироваться фиксацией в системе управления версиями, путем планирования через механизм, подобный cron, путем построения, когда другие сборки завершены, и путем запроса определенного URL-адреса сборки.

Версии

Дженкинс

Версия Дата выхода
1,656 2020-04-03
2,0 2020-04-20

Дженкинс 1.x против Дженкинса 2.x

Дженкинс (и по сей день) является системой непрерывной интеграции (CI), которая позволяет автоматизировать процесс разработки программного обеспечения, такой как создание кода для триггеров фиксации SCM. Однако растущая потребность в непрерывной доставке (CD) потребовала, чтобы Дженкинс эволюционировал для чистой системы CI к соединению CI и CD. Кроме того, потребность в индустриализации рабочих мест Дженкинса растет, и классические работы Jenkins 1.x Freestyle/Maven jobs стали слишком ограниченными для определенных потребностей.

Под Jenkins 1.xa плагин под названием workflow-plugin появился, чтобы позволить разработчикам писать код для описания заданий. Jenkins 2 идет дальше, добавляя встроенную поддержку Pipeline as Code . Главное преимущество заключается в том, что конвейеры, являющиеся файлами сценариев Groovy, могут быть более сложными, чем автономные пользовательские задания freestyle, и могут контролироваться версиями. Jenkins 2 также добавляет новый интерфейс, который позволяет легко визуализировать различные «этапы», определенные в конвейере, и следить за ходом всего конвейера, например, ниже:

Полный обзор того, что Jenkins 2 добавляет к Jenkins, см. В обзоре Jenkins 2 .

Кроме того, полный журнал изменений доступен на веб-сайте Jenkins.

Настроить проект в Дженкинсе

Здесь мы будем проверять последнюю копию кода нашего проекта, запускать тесты и делать приложение вживую. Чтобы достичь этого, выполните следующие шаги:

  1. Откройте Jenkins в браузере.
  2. Нажмите ссылку « Создать работу» .
  3. Введите название проекта и выберите ссылку « Создать бесплатный проект» .
  4. Нажмите кнопку « ОК» .
  5. В разделе «Управление исходным кодом» выберите поле рядом с инструментом управления исходным кодом. В моем случае я выбрал Git .

Укажите URL-адрес git-репо, например git://github.com/example/example.git

  1. В разделе триггеров Build выберите радиоканал рядом с SCM опроса .
  2. Предоставьте ***** в поле « Расписание» . Этот блок отвечает за запуск сборки через регулярные промежутки времени. ***** указывает, что задание будет запускаться каждую минуту для изменений в git repo.
  3. В разделе « Сборка » нажмите кнопку « Добавить шаг» , а затем выберите вариант, по которому вы хотите построить проект. Я выбрал Execute Shell . В командной строке напишите команду для сборки, запуска тестов и развертывания в prod.
  4. Прокрутите вниз и выберите «Сохранить» .

Итак, выше мы создали базовый проект в Jenkins, который будет запускать сборку каждую минуту для изменения вашего репозитория git. Примечание. Чтобы настроить сложный проект, возможно, вам придется установить некоторые плагины в Jenkins.

Настройте простой проект сборки с помощью сценария сценария Jenkins 2

Здесь мы создадим Groovy-конвейер в Jenkins 2, чтобы сделать следующие шаги:

  • Проверяйте каждые 5 минут, если новый код был зачислен в наш проект
  • Код заказа из репозитория SCM
  • Maven компилирует наш код Java
  • Запустите наши интеграционные тесты и опубликуйте результаты

Вот шаги, которые мы сделаем:

Убедитесь, что у нас есть версия 2.0 Jenkins (вы можете проверить это в нижнем правом углу страницы), например:

На домашней странице Дженкинса нажмите « Новый элемент»

Введите название проекта и выберите « Трубопровод»


В разделе « Сборка триггеров » выберите вариант опроса SCM и добавьте следующие расписания CRON за 5 минут: */5 * * * *

В разделе « Трубопровод » выберите « Сценарий трубопровода» или « Сценарий трубопровода» из SCM

Если на предыдущем шаге вы выбрали Pipeline Script из SCM , теперь вам нужно указать URL-адрес репозитория SCM (Git, Mercurial, Subversion) в URL-адрес репозитория, например http://github.com/example/example.git . Вам также необходимо указать путь к скрипту вашего файла сценария Groovy в репозитории example.git, например, pipelines/example.groovy

Скопируйте следующий код Groovy либо непосредственно в окне сценария Groovy, если ранее вы нажали на Pipeline Script или в вашем example.groovy если вы выбрали Pipeline Script из SCM

Здесь вы должны теперь скомпилировать и протестировать свой первый проект Jenkins, используя трубопровод Jenkins 2 Groovy.

Монтаж

Для систем, основанных на apt-get, таких как Ubuntu

Добавьте репозиторий Jenkins:

wget -q -O — https://jenkins-ci.org/debian/ Jenkins-ci.org.key | sudo apt-key

Обновите источники и установите Jenkins:

sudo apt-get update

sudo apt-get install jenkins

Пользователь jenkins теперь создан, и по умолчанию Jenkins будет работать на порту 8080.

Для распределений на основе RPM, таких как Red Hat Enterprise Linux (RHEL), CentOS, Fedora или Scientific Linux

Чтобы загрузить файл репозитория для стабильной версии:

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo

Или, если вам нужны последние еженедельные выпуски:

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo

Импорт открытого ключа:

sudo rpm —import https://jenkins-ci.org/redhat/jenkins-ci.org.key

Установите Jenkins с помощью yum:

sudo yum install jenkins

Jenkins требует java для запуска, чтобы установить его:

sudo yum install java

Для запуска / остановки / перезапуска использования дженкинсов:

sudo service jenkins start/stop/restart

Обновление jenkins (установки RPM)

  1. Резервное копирование домашней директории jenkins
  2. Замените jenkins.war в следующем месте с новым файлом WAR. / USR / Библиотека / Jenkins / jenkins.war`
  3. Перезапустить Дженкинса
  4. Проверьте прикрепленные плагины и отмените при необходимости
  5. Перезагрузка конфигурации с диска

Примечание. Для обновлений Jenkins 2 для JENKINS_AJP_PORT=»-1″ сервера приложений причала отключите порт JENKINS_AJP_PORT=»-1″ (установите JENKINS_AJP_PORT=»-1″ ) в /etc/sysconfig/jenkins .

Установка плагина из внешнего источника

Клиент JAR должен быть JI-файлом CLI, а не тем же JAR / WAR, который запускает Jenkins. Уникальные идентификаторы можно найти на соответствующей странице плагинов на Wiki Jenkins CLI ( https://wiki.jenkins-ci.org/display/JENKINS/Plugins)

Дженкинс полный Введение в одном месте

1. Дженкинс:

Jenkins — инструмент непрерывной интеграции с открытым исходным кодом, написанный на Java. Проект был раздвоен из Хадсона после спора с Oracle.

В двух словах, Jenkins является ведущим сервером автоматизации с открытым исходным кодом. Построенный с Java, он предоставляет сотни плагинов для поддержки строительства, тестирования, развертывания и автоматизации практически для любого проекта.

Особенности: Jenkins предлагает следующие основные функции из коробки, и многие другие могут быть добавлены через плагины:

Простота установки: просто запустите java -jar jenkins.war, разверните его в контейнере сервлетов. Нет дополнительной установки, нет базы данных. Предпочитаете установщик или собственный пакет? У нас есть и те. Простая конфигурация: Jenkins можно полностью настроить из своего дружественного веб-интерфейса с обширными проверками на лету и встроенной справкой. Богатая экосистема плагинов: Jenkins интегрируется практически с любым SCM или встроенным инструментом, который существует. Просмотр плагинов. Расширяемость: большинство частей Jenkins могут быть расширены и изменены, и легко создавать новые плагины Jenkins. Это позволяет вам настроить Jenkins в соответствии с вашими потребностями. Распределенные сборки: Jenkins может распространять сборки / тестовые нагрузки на несколько компьютеров с различными операционными системами. Создание программного обеспечения для OS X, Linux и Windows? Нет проблем.

Монтаж :

Каталог JENKINS_HOME Дженкинсу необходимо пространство на диске для выполнения сборки и хранения архивов. Вы можете проверить это местоположение на экране конфигурации Дженкинса. По умолчанию этот параметр установлен в

/ .jenkins, но вы можете изменить его одним из следующих способов: Установите переменную окружения «JENKINS_HOME» в новый домашний каталог перед запуском контейнера сервлета. Установите системное свойство «JENKINS_HOME» в контейнер сервлетов. Задайте запись среды JNDI «JENKINS_HOME» в новый каталог. Дополнительную информацию о том, как это сделать для контейнера, см. В сборке конкретных контейнеров. Вы можете изменить это местоположение после того, как вы использовали Дженкинса какое-то время. Для этого полностью остановите Дженкинса, переместите содержимое из старого JENKINS_HOME в новый дом, установите новый JENKINS_HOME и перезапустите Jenkins. JENKINS_HOME имеет довольно очевидную структуру каталогов, которая выглядит следующим образом:

JENKINS_HOME

Jenkins Build Jobs:

Создание нового задания для сборки в Jenkins очень просто: просто нажмите на пункт меню «New Job» на панели инструментов Jenkins. Jenkins поддерживает несколько различных типов заданий построения, которые представлены вам, когда вы решите создать новое задание

Проект программного обеспечения Freestyle

Работы по созданию фристайла — это задания общего назначения, которые обеспечивают максимальную гибкость.


Проект Maven «Проект maven2 / 3» — это работа по сборке, специально адаптированная к проектам Maven. Дженкинс понимает файлы Maven pom и структуры проекта и может использовать информацию, полученную из файла pom, чтобы уменьшить работу, необходимую для настройки вашего проекта.

Workflow

Организует длительные действия, которые могут охватывать несколько подчиненных устройств. Подходит для строительства трубопроводов и / или организации сложных мероприятий, которые нелегко вписываются в тип работы в свободном стиле.

Мониторинг внешнего задания Задание задания «Мониторинг внешнего задания» позволяет следить за неинтерактивными процессами, такими как задания cron.

Задача многоконфигурации «Проект многоконфигурации» (также называемый «матричным проектом») позволяет запускать одно и то же задание сборки во многих разных конфигурациях. Эта мощная функция может быть полезна для тестирования приложения во многих разных средах, с разными базами данных или даже с разными машинами сборки.

1. Построение программного проекта (свободный стиль)

Дженкинс может использоваться для выполнения типичной работы сервера сборки, такой как непрерывная / официальная / ночная сборка, запуск тестов или выполнение некоторых повторяющихся пакетных задач. Это называется «программным проектом свободного стиля» в Дженкинсе. Настройка проекта. Перейдите на верхнюю страницу Jenkins, выберите «Новое задание», затем выберите «Построить проект со свободным стилем». Этот тип задания состоит из следующих элементов: необязательный SCM, например CVS или Subversion, где находится исходный код. дополнительные триггеры для управления, когда Дженкинс выполнит сборку. какой-то скрипт сборки, который выполняет сборку (ant, maven, shell-скрипт, командный файл и т. д.), где реальная работа выполняет дополнительные шаги для сбора информации из сборки, такие как архивирование артефактов и / или запись javadoc и test Результаты. необязательные шаги для уведомления других людей / систем с результатом сборки, таких как отправка электронной почты, мгновенных сообщений, обновление трекера и т. д.

Создает проекты, не связанные с источником. Иногда бывает необходимо создать проект просто для демонстрационных целей или недоступен доступ к хранилищу SVN / CVS. Выбрав для настройки проекта как «Нет» в разделе «Управление исходным кодом», вам необходимо:

  1. Постройте проект хотя бы один раз (он не удастся), но Дженкинс создаст структуру jenkins / workspace / PROJECTNAME /
  2. Скопируйте файлы проекта в jenkins / workspace / PROJECTNAME /
  3. Постройте снова и настройте соответствующим образом

Дженкинс устанавливает переменные среды

Когда выполняется задание Дженкинса, он устанавливает некоторые переменные среды, которые вы можете использовать в своем сценарии оболочки, командах пакетной обработки, сценарии Ant или Maven POM. См. Список переменных, нажав на ENVIRONMENT_VARIABLE.

Настройка автоматических сборок

Сборка в Jenkins может запускаться периодически (по расписанию, указанному в конфигурации) или когда исходные изменения в проекте были обнаружены или их можно автоматически запускать, запросив URL-адрес:

Это позволяет подключать Jenkins к различным настройкам. Для получения дополнительной информации (в частности, с помощью включенной безопасности) см. API удаленного доступа.

Создает с помощью исходных изменений

Вы можете заставить Jenkins опросить вашу систему контроля версий за изменения. Вы можете указать, как часто Дженкинс опробовывает вашу систему контроля версий, используя тот же синтаксис, что и crontab в Unix / Linux. Однако, если ваш период опроса короче, чем требуется для опроса вашей системы контроля версий, вы можете получить несколько сборок для каждого изменения. Вы должны либо настроить период опроса дольше, чем время, затрачиваемое на опрос вашей системы контроля версий, или использовать триггер после фиксации. Вы можете просмотреть журнал опроса для каждой сборки, чтобы узнать, сколько времени потребовалось для опроса вашей системы.

В качестве альтернативы вместо опроса с фиксированным интервалом вы можете использовать триггер URL (описано выше), но с / polling вместо / build в конце URL-адреса. Это заставляет Дженкинс опробовать SCM для изменений, а не для немедленного создания. Это предотвращает запуск Jenkins сборки без каких-либо существенных изменений для коммитов, влияющих на модули или ветви, не связанные с заданием. При использовании / опросе задание должно быть настроено для опроса, но расписание может быть пустым.

Создает по электронной почте (sendmail)

Если у вас есть учетная запись root вашей системы, и вы используете sendmail, я нашел ее проще всего настроить / etc / aliases и добавить следующую запись: jenkins-foo: «| / bin / wget -o / dev / null

а затем запустите команду «newaliases», чтобы сообщить об этом изменениям в sendmail. Всякий раз, когда кто-то отправляет электронное письмо в «jenkins-foo @ yoursystem», это вызовет новую сборку. Подробнее см. В настройке sendmail. Создает по электронной почте (qmail) С помощью qmail вы можете написать /var/qmail/alias/.qmail-jenkins следующим образом: | / bin / wget -o / dev / null http: // YOURHOST / jenkins / job / PROJECTNAME / build «

2. Создание проекта Maven

Дженкинс предоставляет тип задания, посвященный Maven 2/3. Этот тип работы объединяет Дженкинса с Maven 2/3 и обеспечивает следующие преимущества по сравнению с более общим программным проектом свободного стиля.

Дженкинс разбирает Maven POMs, чтобы получить большую часть информации, необходимой для выполнения своей работы. В результате размер конфигурации резко сокращается.

Дженкинс слушает исполнение Maven и выясняет, что нужно делать, когда он сам по себе. Например, он автоматически записывает отчет JUnit, когда Maven запускает тестовую фазу. Или, если вы запустите цель javadoc, Дженкинс автоматически запустит javadoc.

Jenkins автоматически создает зависимости проекта между проектами, которые объявляют зависимости SNAPSHOT между собой. Увидеть ниже. Таким образом, в основном вам просто нужно настроить информацию SCM и какие цели вы хотите запустить, а Дженкинс все выяснит.

Этот тип проекта может автоматически предоставлять следующие функции:

Архивные артефакты, созданные сборкой

Опубликовать результаты тестирования

Запуск заданий для проектов, которые являются зависимыми от нисходящего потока

Разверните свои артефакты в репозиторий Maven

Результаты тестирования прорыва по модулю

Необязательно перестраивать только измененные модули, ускоряя ваши сборки

Автоматическое построение цепочки из зависимостей модулей

Дженкинс читает зависимости вашего проекта от вашего POM, и если они также построены на Jenkins, триггеры настроены таким образом, что новая сборка в одной из этих зависимостей автоматически запустит новую сборку вашего проекта. Дженкинс понимает все виды зависимостей в POM. А именно, родительский POM

Этот процесс учитывает версии, поэтому вы можете иметь несколько версий / ветвей вашего проекта на одном Jenkins и правильно определять зависимости. Обратите внимание, что диапазоны версий зависимостей не поддерживаются, см. [ Https://issues.jenkins-ci.org/browse/JENKINS-2787][1] по этой причине.

Эта функция может быть отключена по требованию — см. Параметр конфигурации Сборка при каждом создании зависимости SNAPSHOT

Монтаж :

1. войдите в Управление Jenkins >> configure System

  1. в maven tab «Нажмите на установку maven .

Вы можете либо заставить Jenkins автоматически установить определенную версию Maven, либо указать путь к локальной установке Maven (вы можете настроить столько версий Maven для своих проектов сборки, сколько захотите, и использовать разные версии Maven для разных проектов. Если вы установите флажок «Установить автоматически», Jenkins загрузит и установит запрошенную версию Maven для вас и установит ее в каталог инструментов в домашнем каталоге Jenkins.

Как это использовать

Сначала вы должны настроить установку Maven (этот шаг можно пропустить, если вы используете DEV @ cloud). Это можно сделать, перейдя на экран конфигурации системы (Manage Jenkins-> Configure System). В разделе «Установка Maven»: 1) нажмите кнопку «Добавить», 2) укажите имя «Maven 3.0.3», а затем 3) выберите версию из раскрывающегося списка.

Теперь Jenkins автоматически установит эту версию в любое время (например, на любых новых машинах), загрузив ее из Apache и разархивируя ее.

Создайте новую работу Maven:

  1. Нажатие «Новое задание / Новый элемент» слева
  2. Дайте ему имя
  3. Выберите «Build a Maven 2/3 project»
  4. Сохраните свою работу

Теперь вам нужно настроить свою работу

Выберите SCM, который вы хотите использовать (например, с помощью git)

выберите цель maven для вызова


добавить URL-адрес репозитория и учетные данные.

проверить частное личное сообщение maven:

Вы также можете определить путь custome для этого же.

5. Проект строительства

Создайте свой проект, нажав на сборку сейчас и нажмите на индикатор выполнения в левой руке «Build Executor Status», чтобы посмотреть, как jenkins устанавливают Maven, проверяют ваш проект и строят его с помощью maven.

Логирование:

Консоль сценариев:

Полезно для устранения неполадок, диагностики или пакетных обновлений заданий. Jenkins предоставляет консоль скриптов, которая дает вам доступ ко всем внутренним компонентам Jenkins. Эти скрипты написаны в Groovy, и вы найдете некоторые образцы из них на этой странице .

Перемещение Дженкинса с одного компьютера на другой

Это помогло мне перейти от Ubuntu 12.04 (Jenkins ver. 1.628) к Ubuntu 16.04 (Jenkins, версия 1.651.2). Сначала я установил Дженкинса из репозиториев .

Скопируйте JENKINS_HOME (например, / var / lib / jenkins) со старого сервера на новый. С консоли на новом сервере:

rsync -av username@old-server-IP:/var/lib/jenkins/ /var/lib/jenkins/

Возможно, вам это не понадобится, но мне пришлось

  • Manage Jenkins и Reload Configuration from Disk .
  • Отключите и снова подключите все ведомые устройства.
  • Убедитесь, что в Configure System > Jenkins Location Jenkins URL правильно назначен новому серверу Jenkins.

Настройка прокси-сервера Nginx

На самом деле Дженкинс работает на порту 8080. Мы можем установить прокси-сервер из порта 80 -> 8080, чтобы доступ к Jenkins был доступен через:

Начните с установки Nginx.

sudo aptitude -y install nginx

Удалить настройки по умолчанию для Nginx

sudo rm default ../sites-enabled/default

Создайте новый файл конфигурации

sudo touch jenkins

Скопируйте следующий код во вновь созданный файл jenkins .

Создайте символическую связь между доступными сайтами и сайтами:

sudo ln -s /etc/nginx/sites-available/jenkins /etc/nginx/sites-enabled/

Перезапустите службу прокси-сервера Nginx

sudo service nginx restart

Теперь Дженкинс будет доступен из порта 80.

Дженкинс для чайников

Jenkins – лидер среди решений автоматизации с открытым исходным кодом, Дженкинс предоставляет сотни плагинов для поддержки, создания, развертывания и автоматизации любого проекта. Сам Jenkins написан на Java и, по субъективным оценкам пользователей, является, мягко скажем, не самым быстрым решением непрерывной интеграции для девопс

Однако это достаточно гибкий инструмент, который применяется для автоматического выполнения различного рода задач. Для проектов по разработке это могут быть тесты сборок, проверка ошибок, генерация отчетности и документации и многое другое. Например, нетипичным, но вполне рабочим решением является использование Jenkins в качестве системы мониторинга. Почему это возможно ? Потому что задачи для Jenkins описываются в файле xml. После формирования файла сервер по расписанию или вручную выполняет его содержимое. Каждая задача содержит набор команд: например, создание папок и запуск скрипта инсталляции приложения.

Как было сказано выше, Для интеграции с другими системами и расширения функционала Jenkins имеет большое количество плагинов. Так, в случае автоматизации задач, связанных с разработкой необходимо работать с репозитариями. Для каждого из которых есть свой плагин.

Вообще, для общего понимания стоит сказать, что сам Jenkins ничего не умеет, он только управляет другими процессами и плагинами. Например, если Вы боритесь за чистоту кода в PHP проекте, Вас может заинтересовать следующая конфигурация:

На Linux сервере установлен Jenkins, пакеты PHP CodeSniffer, PHP Mess Detector, PHP Copy/Paste Detector и подобные, создан скрипт, с помощью которого будут запущены вышеперечисленные пакеты с определенными параметрами и получен результат.

С точки зрения Jenkins в таком случае нужно будет создать проект-задачу, которая подтянет новую версию с хранилища кода, запустит процесс сборки, что в нашем случае будет означать проверку PHP кода с помощью вышеозвученных пакетов, распарсит полученные результаты работы скрипта с помощью плагинов, заданных в Post-Built Actions при создании задачи. Там же можно указать необходимость рассылки уведомлений о результатах работы.

Конечно же на практике все немного сложнее: например для того, чтобы работала рассылка уведомлений нужно указать в настройках сервера параметры SMTP. Но поскольку основная цель этой публикации – показать принцип работы продукта Jenkins, эти и многие другие нюансы остаются за кадром.

Jenkins. Continuous Integration – это просто. Ну, почти☺

У нас есть сервер, на котором лежит множество проектов на WordPress и Magento CMS. Мне как PHP-разработчику была поставлена задача внедрить Jenkins для этих проектов, чтобы публикация изменений исходного кода на сервер происходила быстрее.

К чему нам Continuous Integration?

Вопрос повышения эффективности разработки и сопровождения программных продуктов для меня, как для веб-разработчика, всегда был и остается актуальным и интересным. Процессы сборки проекта и публикации его на сервер являются тем звеном, которое может быть легко автоматизированно при помощи средств Continuous Integration (CI).

CI многими уже давно и успешно применяется. Использование этого метода разработки позволяет существенно сократить время на публикацию проекта на сервер, сводя эту работу к исполнению нескольких консольных команд. Кроме того, при применении CI имеется возможность в любое время оперативно вернуться к предыдущей версии проекта, благодаря тому, что Continuous Integration неразрывно связана с репозиторием системы контроля версий.

Принцип работы CI довольно прост. В моем случае участвовало 3 сервера:

  • Сервер системы контроля версий (СКВ), где хранится репозиторий с рабочей версией проекта, в который разработчик сохраняет свои изменения.
  • Сервер Continuous Integration, на котором установлена одна из систем управления CI.
  • Сервер, где развернута рабочая версия проекта.

Сразу после изменения репозитория в системе контроля версий, сервер СКВ инициирует выполнение задачи на сервере CI (как правило, с помощью веб-хука). Эта задача выполняет сборку и развертывание исходного кода из репозитория СКВ на сервер рабочей версии проекта.

Развертывание исходного кода из репозитория СКВ на сервер рабочей версии проекта.

Более подробно о преимуществах, которые предоставляет использование Continuous Integration, можно почитать в этой статье.

Данное руководство собирает в себе информацию, достаточную для того, чтобы быстро сконфигурировать систему CI Jenkins и начать работу с ней. Также здесь представлена информация по настройке и организации взаимодействия такой популярной системы CI, как Jenkins и не менее известной системы контроля версий Git. В качестве веб-сервиса для git будем использовать GitHub.

Внимание, задача

Необходимо установить и настроить Jenkins таким образом, чтобы при push-е в репозиторий GitHub происходило обновление измененных файлов на сервере рабочей версии проекта. В наличии:


  • Сервер Debian 8.2 x64.
  • Система на локальной машине: Linux Mint 17.2.

Предварительным требованием является установленный git на обеих машинах. Про то, как его установить, можно прочитать здесь.

Решение

1. Установка Jenkins

Установку выполним на выделенном для CI сервере. Вводим следующие команды для добавления репозитория Jenkins в список репозиториев системы:

Обновим apt и установим Jenkins:

Теперь порт 8080 сервера CI будет «прослушиваться» Jenkins. Это значит, что при переходе в браузере по адресу 8080, пользователь попадет в панель управления Jenkins. Конечно, такой способ доступа является не очень удобным, поэтому на сервере CI можно настроить доступ к Jenkins с помощью виртуальных хостов в Apache или Nginx.

Приветственное окно Jenkins.

Следующим важным шагом является настройка прав доступа. Это очень важно, особенно если сервер доступен через Интернет. Без соответствующих настроек он будет открыт для всех.

2. Добавление администратора

Manage Jenkins → Configure Global Security (глобальная настройка безопасности).

1. Заполняем необходимую информацию:

  • Enable security — true; //включить защиту;
  • Jenkins’own user database — «Jenkins’ own user database»; //использовать для авторизации базу данных Jenkins;
  • Authorization — «Matrix-based security»; //матричное распределение прав доступа (распределение прав на уровне проектов);
  • User/group to add — «admin». //предоставляем пользователю «admin» право доступа в панель управления Jenkins.

2. Сохраняем настройки.

Теперь при попытке входа в панель управления Jenkins будет требовать от пользователя авторизоваться.

3. Создание пользователя для GitHub

Теперь необходимо создать учетные данные для доступа GitHub к серверу Jenkins.

В панели управления Jenkins переходим Manage Jenkins → Manage Users → Create User. Заполняем форму регистрации, идентичную той, которая была при регистрации администратора, нажимаем Sign Up.

После создания пользователя следует дать ему необходимые права. Для этого перейдем в Manage jenkins → Configure Global Security (настройка глобальной безопасности).

Из всех этих настроек нам необходима матрица безопасности.

Для начала добавим пользователя в эту матрицу. В поле «User/group to add» вводим имя созданного пользователя и нажимаем Add. Пользователь появится в матрице. Предоставим ему права на чтение и сборку. Для этого в подстолбцах Read и Build столбца «Job» напротив имени созданного пользователя устанавливаем чек-боксы и нажимаем Save.

Создание пользователя для GitHub.

4. Установка плагина для GitHub

Переходим в Manage Jenkins → Manage Plugins → Вкладка «Available». Выбираем для установки три плагина:

  • Github Authentication plugin;
  • GitHub plugin;
  • GitHub API Plugin.

Нажимаем на кнопку «Download now and install after restart» и ожидаем завершения установки.

5. Настройка сервера для работы с Jenkins

На продукционном сервере проекта (куда будет производиться автодеплой) необходимо создать пользователя «jenkins»:

Далее на сервере необходимо сгенерировать ssh ключи. От пользователя «jenkins» выполняем команду:

И вводим необходимую информацию.

Также для доступа необходимо добавить публичный ключ в файл. /jenkins/.ssh/authorized_keys (если файла нет, его необходимо создать)

Кроме этого требуется создать на GitHub открытый SSH ключ для данного сервера. О том, как это сделать, можно посмотреть здесь.

Данный этап завершен.

Если что-то по ssh-аутентификации является непонятным, рекомендую прочитать очень полезную статью на данную тему.

6. Настройка доступа к серверу

Для того чтобы Jenkins при автодеплое на сервере с рабочей версией проекта мог авторизовываться на нем, в панели управления требуется создать необходимые данные для аутентификации. Для этого в панели управления Jenkins переходим Credentials → Global credentials → Add Credentials и делаем следующее:

  1. В качестве Kind выбираем «SSH Username with private key»;
  2. Username — вводим имя созданного на сервере пользователя («jenkins») ;
  3. Private Key — «Enter directly», в текстовое поле копируем все содержимое файла приватного ключа jenkins-пользователя. («. /jenkins/.ssh/id_rsa»);
  4. Нажимаем «OK».

Настройка доступа к серверу.

Теперь необходимо настроить подключение к серверу. Для этого в панели управления jenkins перейдем Manage Jenkins → Manage Nodes → New Node. Производим следующие действия:

  1. Вводим имя продукционного сервера (к примеру — «target»), устанавливаем «Dumb Slave», нажимаем «OK»;
  2. Вводим путь к корневой директории Jenkins на продукционном сервере. В качестве корневой директории на целевом сервере обычно выбирается директория пользователя jenkins («. /jenkins»);
  3. Вводим «Labels»; например — «target_server». Label — это метка, по которой задача будет привязываться к конкретному серверу;
  4. Host — вводим имя хоста, к которому будем обращаться;
  5. Credentials — выбираем ранее созданные данные для аутентификации;
  6. Нажимаем «Save».

Настройка подключения к серверу.

Через некоторое время, подключение к серверу должно успешно установиться. Если все прошло успешно, в Manage Jenkins → Manage Nodes вы должны увидеть примерно следующую картину:

Настройка подключения к серверу.

Если подключение не устанавливается, нажимаем на созданное подключение («target»), выбираем «Log» в левом навигационном меню и смотрим, что произошло не так.

Наиболее распространенными ошибками являются:

Первое решение — изменить в настройках подключения корневую директорию на домашнюю директорию пользователя Jenkins.


Второе решение — предоставить пользователю Jenkins права на запись и чтение указанной в настройках подключения директории.

7. Настройка хука GitHub

Для GitHub-репозитория, который будет использоваться, необходимо настроить веб-хук так, чтобы при обновлении репозитория, хук отсылал запрос на обновление Jenkins. Для этого:

  • Переходим в созданный репозиторий на GitHub-е.
  • «Settings» → «Webhooks & services».
  • «Add webhook».
  • Вводим «Payload URL» (куда будет обращаться GitHub). Он должен иметь следующий формат

8. Создание задачи Jenkins

Теперь необходимо создать задачу, которая будет выполняться при обновлении репозитория. В панели администрирования Jenkins делаем следующее:

  • Нажимаем «New Item».
  • Вводим название задачи в поле «Item name».
  • Выбираем «Freestyle project» и нажимаем «OK».
  • «Restrict where this project can be run» — вводим имя метки, которое было выбрано при добавлении сервера (например — «target_server»).
  • «Source Code Management» — выбираем «Git» и вводим адрес репозитория в поле «Repository URL» (например — «git@github.com: TestCi/Continuous-integration.git»).
  • В поле «Credentials» выбираем ранее созданные учетные данные.
  • «Build Triggers» — «Build when a change is pushed to GitHub».
  • «Build» — «Execute shell» (shell-скрипт будет выполняться при каждом push-е на github):

Первая строка производит синхронизацию на продукционном сервере рабочей директории Jenkins с целевой директорией проекта. Вторая строка — установка владельца файлов проекта.

Чтобы не возникло никаких проблем с правами при выполнении команд, необходимо в файл sudoers с помощью команды visudo дописать пару строчек:

Вот и все! Теперь, при push-e кода в GitHub репозиторий, происходит автодеплой кода на продукционный сервер проекта. Цель достигнута!

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

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

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

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

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

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

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

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

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

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

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

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

P3 – производительность плагинов

P3 — Plugin Performance Profiler, узнай, какой плагин влияет на скорость сайта!

Мой опыт работы фрилансера показывает, что для сайтов разных тематик, требуются устанавливать разные плагины. Подобрать наиболее оптимальный набор плагинов, проверить на совместимость и убедиться, что все плагины настроены и работают с наибольшей эффективностью, может помочь плагин P3 — Plugin Performance Profiler.

После установки плагин размещается в разделе «Инструменты», имеет интуитивно понятный интерфейс, по умолчанию всего с единственной кнопкой «Start Scan» (начать сканировать).

P3 — Plugin Performance Profiler

Результаты сканирования можно посмотреть на нескольких графиках, которые смогут наглядно продемонстрировать, какие из плагинов реально утяжеляют сайт, чтобы принять решение, насколько они необходимы.

На моем сайте, помимо ожидаемых плагинов-тяжеловесов статистики SlimStat и WordPressSEO, оказались ContactForm и особенно ее Капча (Really Simple Capture). Причем Капча даже переплюнула SEO (13% против 12%).

результат в процентах

результаты на графике

Таким образом, для тех, кому интересно узнать, какие из плагинов на самом деле «тяжелые» и как они влияют на скорость работы сайта, могу посоветовать воспользоваться плагином P3 — Plugin Performance Profiler. Именно плагин P3 — Plugin Performance Profiler реально и наглядно покажет скорость загрузки всех плагинов в целом, и каждого плагина отдельно.

С таким помощником гораздо проще принять решение об использовании того или иного плагина для сайта на ВордПресс.

Jenkins. Continuous Integration – это просто. Ну, почти☺

У нас есть сервер, на котором лежит множество проектов на WordPress и Magento CMS. Мне как PHP-разработчику была поставлена задача внедрить Jenkins для этих проектов, чтобы публикация изменений исходного кода на сервер происходила быстрее.

К чему нам Continuous Integration?

Вопрос повышения эффективности разработки и сопровождения программных продуктов для меня, как для веб-разработчика, всегда был и остается актуальным и интересным. Процессы сборки проекта и публикации его на сервер являются тем звеном, которое может быть легко автоматизированно при помощи средств Continuous Integration (CI).

CI многими уже давно и успешно применяется. Использование этого метода разработки позволяет существенно сократить время на публикацию проекта на сервер, сводя эту работу к исполнению нескольких консольных команд. Кроме того, при применении CI имеется возможность в любое время оперативно вернуться к предыдущей версии проекта, благодаря тому, что Continuous Integration неразрывно связана с репозиторием системы контроля версий.

Принцип работы CI довольно прост. В моем случае участвовало 3 сервера:

  • Сервер системы контроля версий (СКВ), где хранится репозиторий с рабочей версией проекта, в который разработчик сохраняет свои изменения.
  • Сервер Continuous Integration, на котором установлена одна из систем управления CI.
  • Сервер, где развернута рабочая версия проекта.

Сразу после изменения репозитория в системе контроля версий, сервер СКВ инициирует выполнение задачи на сервере CI (как правило, с помощью веб-хука). Эта задача выполняет сборку и развертывание исходного кода из репозитория СКВ на сервер рабочей версии проекта.

Развертывание исходного кода из репозитория СКВ на сервер рабочей версии проекта.

Более подробно о преимуществах, которые предоставляет использование Continuous Integration, можно почитать в этой статье.

Данное руководство собирает в себе информацию, достаточную для того, чтобы быстро сконфигурировать систему CI Jenkins и начать работу с ней. Также здесь представлена информация по настройке и организации взаимодействия такой популярной системы CI, как Jenkins и не менее известной системы контроля версий Git. В качестве веб-сервиса для git будем использовать GitHub.

Внимание, задача

Необходимо установить и настроить Jenkins таким образом, чтобы при push-е в репозиторий GitHub происходило обновление измененных файлов на сервере рабочей версии проекта. В наличии:

  • Сервер Debian 8.2 x64.
  • Система на локальной машине: Linux Mint 17.2.

Предварительным требованием является установленный git на обеих машинах. Про то, как его установить, можно прочитать здесь.

Решение


1. Установка Jenkins

Установку выполним на выделенном для CI сервере. Вводим следующие команды для добавления репозитория Jenkins в список репозиториев системы:

Обновим apt и установим Jenkins:

Теперь порт 8080 сервера CI будет «прослушиваться» Jenkins. Это значит, что при переходе в браузере по адресу 8080, пользователь попадет в панель управления Jenkins. Конечно, такой способ доступа является не очень удобным, поэтому на сервере CI можно настроить доступ к Jenkins с помощью виртуальных хостов в Apache или Nginx.

Приветственное окно Jenkins.

Следующим важным шагом является настройка прав доступа. Это очень важно, особенно если сервер доступен через Интернет. Без соответствующих настроек он будет открыт для всех.

2. Добавление администратора

Manage Jenkins → Configure Global Security (глобальная настройка безопасности).

1. Заполняем необходимую информацию:

  • Enable security — true; //включить защиту;
  • Jenkins’own user database — «Jenkins’ own user database»; //использовать для авторизации базу данных Jenkins;
  • Authorization — «Matrix-based security»; //матричное распределение прав доступа (распределение прав на уровне проектов);
  • User/group to add — «admin». //предоставляем пользователю «admin» право доступа в панель управления Jenkins.

2. Сохраняем настройки.

Теперь при попытке входа в панель управления Jenkins будет требовать от пользователя авторизоваться.

3. Создание пользователя для GitHub

Теперь необходимо создать учетные данные для доступа GitHub к серверу Jenkins.

В панели управления Jenkins переходим Manage Jenkins → Manage Users → Create User. Заполняем форму регистрации, идентичную той, которая была при регистрации администратора, нажимаем Sign Up.

После создания пользователя следует дать ему необходимые права. Для этого перейдем в Manage jenkins → Configure Global Security (настройка глобальной безопасности).

Из всех этих настроек нам необходима матрица безопасности.

Для начала добавим пользователя в эту матрицу. В поле «User/group to add» вводим имя созданного пользователя и нажимаем Add. Пользователь появится в матрице. Предоставим ему права на чтение и сборку. Для этого в подстолбцах Read и Build столбца «Job» напротив имени созданного пользователя устанавливаем чек-боксы и нажимаем Save.

Создание пользователя для GitHub.

4. Установка плагина для GitHub

Переходим в Manage Jenkins → Manage Plugins → Вкладка «Available». Выбираем для установки три плагина:

  • Github Authentication plugin;
  • GitHub plugin;
  • GitHub API Plugin.

Нажимаем на кнопку «Download now and install after restart» и ожидаем завершения установки.

5. Настройка сервера для работы с Jenkins

На продукционном сервере проекта (куда будет производиться автодеплой) необходимо создать пользователя «jenkins»:

Далее на сервере необходимо сгенерировать ssh ключи. От пользователя «jenkins» выполняем команду:

И вводим необходимую информацию.

Также для доступа необходимо добавить публичный ключ в файл. /jenkins/.ssh/authorized_keys (если файла нет, его необходимо создать)

Кроме этого требуется создать на GitHub открытый SSH ключ для данного сервера. О том, как это сделать, можно посмотреть здесь.

Данный этап завершен.

Если что-то по ssh-аутентификации является непонятным, рекомендую прочитать очень полезную статью на данную тему.

6. Настройка доступа к серверу

Для того чтобы Jenkins при автодеплое на сервере с рабочей версией проекта мог авторизовываться на нем, в панели управления требуется создать необходимые данные для аутентификации. Для этого в панели управления Jenkins переходим Credentials → Global credentials → Add Credentials и делаем следующее:

  1. В качестве Kind выбираем «SSH Username with private key»;
  2. Username — вводим имя созданного на сервере пользователя («jenkins») ;
  3. Private Key — «Enter directly», в текстовое поле копируем все содержимое файла приватного ключа jenkins-пользователя. («. /jenkins/.ssh/id_rsa»);
  4. Нажимаем «OK».

Настройка доступа к серверу.

Теперь необходимо настроить подключение к серверу. Для этого в панели управления jenkins перейдем Manage Jenkins → Manage Nodes → New Node. Производим следующие действия:

  1. Вводим имя продукционного сервера (к примеру — «target»), устанавливаем «Dumb Slave», нажимаем «OK»;
  2. Вводим путь к корневой директории Jenkins на продукционном сервере. В качестве корневой директории на целевом сервере обычно выбирается директория пользователя jenkins («. /jenkins»);
  3. Вводим «Labels»; например — «target_server». Label — это метка, по которой задача будет привязываться к конкретному серверу;
  4. Host — вводим имя хоста, к которому будем обращаться;
  5. Credentials — выбираем ранее созданные данные для аутентификации;
  6. Нажимаем «Save».

Настройка подключения к серверу.

Через некоторое время, подключение к серверу должно успешно установиться. Если все прошло успешно, в Manage Jenkins → Manage Nodes вы должны увидеть примерно следующую картину:

Настройка подключения к серверу.

Если подключение не устанавливается, нажимаем на созданное подключение («target»), выбираем «Log» в левом навигационном меню и смотрим, что произошло не так.

Наиболее распространенными ошибками являются:

Первое решение — изменить в настройках подключения корневую директорию на домашнюю директорию пользователя Jenkins.

Второе решение — предоставить пользователю Jenkins права на запись и чтение указанной в настройках подключения директории.

7. Настройка хука GitHub

Для GitHub-репозитория, который будет использоваться, необходимо настроить веб-хук так, чтобы при обновлении репозитория, хук отсылал запрос на обновление Jenkins. Для этого:

  • Переходим в созданный репозиторий на GitHub-е.
  • «Settings» → «Webhooks & services».
  • «Add webhook».
  • Вводим «Payload URL» (куда будет обращаться GitHub). Он должен иметь следующий формат

8. Создание задачи Jenkins

Теперь необходимо создать задачу, которая будет выполняться при обновлении репозитория. В панели администрирования Jenkins делаем следующее:

  • Нажимаем «New Item».
  • Вводим название задачи в поле «Item name».
  • Выбираем «Freestyle project» и нажимаем «OK».
  • «Restrict where this project can be run» — вводим имя метки, которое было выбрано при добавлении сервера (например — «target_server»).
  • «Source Code Management» — выбираем «Git» и вводим адрес репозитория в поле «Repository URL» (например — «git@github.com: TestCi/Continuous-integration.git»).
  • В поле «Credentials» выбираем ранее созданные учетные данные.
  • «Build Triggers» — «Build when a change is pushed to GitHub».
  • «Build» — «Execute shell» (shell-скрипт будет выполняться при каждом push-е на github):

Первая строка производит синхронизацию на продукционном сервере рабочей директории Jenkins с целевой директорией проекта. Вторая строка — установка владельца файлов проекта.

Чтобы не возникло никаких проблем с правами при выполнении команд, необходимо в файл sudoers с помощью команды visudo дописать пару строчек:

Вот и все! Теперь, при push-e кода в GitHub репозиторий, происходит автодеплой кода на продукционный сервер проекта. Цель достигнута!

Добавить комментарий