Вступление
Планирование работы в Jenkins очень полезно, когда дело доходит до разработки отличного продукта. Представьте себе, какое огромное преимущество - превратить трудоемкую задачу в автоматизированную работу. Он не требует никакого надзора, и пока в рабочем процессе нет ошибок, вам не о чем беспокоиться.
В сегодняшней статье мы создадим задание, которое будет выполняться каждые пять минут и будет иметь следующий результат:
Hello, World!
Today's:
<<date>>
Here's the current time:
<<time>>
Кроме того, мы создадим задание, которое отслеживает другой проект и, в зависимости от его статуса, распечатывает автоматическую выписку.
Примеры использования для автоматизации с Jenkins
Но прежде чем мы погрузимся в техническую часть, давайте на минутку рассмотрим, что можно автоматизировать в Jenkins. Конечно, проявив немного воображения, вы сможете решить большинство проблем и автоматизировать их. Давайте рассмотрим пример, который можно автоматизировать с помощью Jenkins, если у вас есть немного (больше) терпения, и вы также хотите углубить свои навыки Jenkins.
Такие продукты, как Amazon Echo и Alexa, можно настроить для вызова заданий Jenkins, которые выполняют различные действия. Вы можете относительно легко интегрировать его в свой умный дом:
- Скажите: «Алекса, запри двери» (это будет триггером , то есть Дженкинс будет слушать это событие).
- Навык Алекса активирует работу Дженкинса.
- Работа Дженкинса будет использовать скрипт для вызова API системы блокировки умных дверей.
- Алекса ждет, пока работа Дженкинса будет завершена, и расскажет, как она прошла: «Дверь успешно заперта» , «Двери уже заперты» или «Двери не могут быть заперты» .
Конечно, это не работа CI / CD, но она находится в пределах возможностей существующей технологии с Jenkins.
Требования
- Сервер Jenkins - в этом руководстве мы будем использовать официальный образ Docker для настройки сервера Jenkins.
- Работа, которую вы хотели бы автоматизировать
Создание работы Jenkins
Войдите в свое приложение Jenkins и нажмите « Создать работу» . Тип работы не имеет значения. Это может быть Freestyle , Maven и т. Д. Все, что имеет значение, - это то, как мы настраиваем планировщик.
В этой статье мы будем использовать Pipeline . Выберите имя для своего проекта и сохраните его:
{.ezlazyload}
Теперь, прежде чем мы займемся частью планирования, давайте настроим сценарий Pipeline Groovy, который будет печатать сообщение из введения.
Прокрутите вниз до конвейера и добавьте следующий скрипт:
pipeline {
agent any
stages {
stage('Write Greetings') {
steps {
echo 'Hello, World!'
}
}
stage('Write Date') {
steps {
print 'Today\'s '
print new Date().format("dd-MM-yyyy", TimeZone.getTimeZone("UTC"))
}
}
stage('Write Hour') {
steps {
print 'Here\'s the current time '
print new Date().format("HH:mm:ss", TimeZone.getTimeZone("UTC"))
}
}
}
}
Сценарий состоит из трех этапов: написание приветствия , дата записи и час записи . Мы используем этапы, чтобы лучше определить и структурировать наш сценарий. Также этапы можно просмотреть в пользовательском интерфейсе Jenkins.
Если один из них выйдет из строя, вы узнаете, какой из них:
{.ezlazyload}
Выполнение работы
Наша работа готова к запуску! Нажмите на Build Now и проверим вывод:
{.ezlazyload}
Started by user Alex
Running in Durability level: MAX_SURVIVABILITY
Running on Jenkins in /var/jenkins_home/workspace/Scheduled Pipeline
Hello, World!
Today's:
24-12-2020
Here's the current time:
16:00:38
Finished: SUCCESS
Вы также можете увидеть на странице вакансии среднее время для каждого этапа:
{.ezlazyload}
Есть много способов запустить задание Jenkins: вручную (конечно) , с помощью выражения Cron, хуков, просмотра других проектов и т. Д.
Планирование заданий Дженкинса с помощью Cron
Начнем с запуска задания через утилиту Cron. Мы будем выбирать периодическую сборку, а для поля «Расписание» используем следующее выражение:
H/5 * * * *
{.ezlazyload}
Это выражение означает, что задание будет выполняться каждые 5 минут. Вот несколько полезных примеров других шаблонов:
0 0 13 1/1 * ? *
â € «каждый час, начиная с 13:00;0 0 17 ? * MON-FRI *
- каждый рабочий день, в 17:00;
Если вы не хотите изучать этот тип форматирования для планирования своей работы, вы можете использовать генератор выражений Cron, например CronMaker .
Посмотрим на результат. Для этого нам придется подождать. Через 10 минут вы должны увидеть, что 2 задания были запущены автоматически:
{.ezlazyload}
Обратите внимание, что первое задание было выполнено в 21:12, затем в 21:17 и последнее - в 21:22. Итак, правило сработало! У нас есть работа, которая выполняется каждые 5 минут.
Планирование работы Дженкинса путем просмотра других проектов
Теперь, когда мы увидели, как можно периодически планировать задание, давайте создадим еще одно, которое запускается каждый раз, когда первое было успешным. Создайте еще один проект конвейера и добавьте следующий код:
pipeline {
agent any
stages {
stage('It worked') {
steps {
echo 'The other job worked!'
}
}
}
}
У нас есть сценарий конвейера, давайте его запланируем. На вкладке «Триггеры сборки » выберите « Сборка после сборки других проектов» .
Войдите в проект, за которым нужно смотреть, и выберите случаи, когда он должен запускаться:
{.ezlazyload}
Сохраните и подождем немного. Вы должны видеть, что новое задание запускается каждый раз, когда первое успешно выполняется. Вы можете увидеть подробную информацию о первом запуске этого второго задания, которое было инициировано ранее созданным заданием:
{.ezlazyload}
Вот результат:
Started by upstream project "Scheduled Pipeline" build number 7
originally caused by:
Started by timer
Running in Durability level: MAX_SURVIVABILITY
Running on Jenkins in /var/jenkins_home/workspace/The other job worked
The other job worked!
Finished: SUCCESS
Заключение
Автоматизация очень полезна и является одной из ключевых вещей, которые приносят нам технологии, независимо от процесса, который вы хотите автоматизировать.
В этой статье мы рассмотрели, как запланировать задание в Jenkins для периодического запуска с использованием шаблона Cron, а также для запуска при построении других проектов.