Интеграция Git & Jenkins для запланированных сценариев PowerShell

Если у вас и вашей команды слишком много скриптов PowerShell, лежащих где-то и выполняющихся бог знает где, то эту статью для вас. В этой статье вы узнаете, как настроить популярный сервер автоматизации Jenkins для управления и выполнения сценариев PowerShell!

Вы узнаете, как интегрировать систему управления версиями Git с Jenkins, а затем настроить и запланировать выполнение сценариев PowerShell по предварительно определенному расписанию.

Разрастание скриптов PowerShell: Это не работает

Как инженер по автоматизации, одной из основных проблем, с которой нам пришлось столкнуться с моей командой, было разрастание запланированных скриптов PowerShell. Я обнаружил десятки скриптов PowerShell, запланированных и запущенных из разных мест.

Каждый инженер или команда инженеров имела свой собственный сервер, на котором они планировали выполнение задач. Каждый тип скрипта выполнялся на сервере, который управлял этим сервисом.

  • A domain controller ran all of the Active Directory scripts.
  • Сервер Exchange выполнял все скрипты Exchange.
  • A member server ran all networking team scripts.
  • A member server ran all of the database scripts for the DBAs.
  • A member server ran all of the security team’s scripts.
  • …и так далее

Весь код, который запускался на любом из этих серверов, либо сохранялся как файл сценария во временном каталоге на этом сервере, либо как папка сценариев на общем диске. Это был кошмар!

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

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

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

Входит Jenkins.

Почему Jenkins?

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

Лучший контроль

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

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

Простое планирование

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

Управление версиями

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

Совместная регистрация

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

Предварительные требования

В этой статье будет показано, как настроить Jenkins для запуска сценариев PowerShell. Для этого вам понадобятся несколько вещей, чтобы следовать за нами.

Установка плагина PowerShell

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

  1. Нажмите на Управление Jenkins, а затем на Управление плагинами.
  2. Нажмите на вкладку Доступные.
  3. Справа на экране введите powershell в поле Фильтр. Вы должны увидеть появление плагина PowerShell, как показано ниже.
Looking for the PowerShell extension

4. Выберите флажок Установить и щелкните Установить без перезагрузки.

Установка плагина PowerShell создаст параметр создания Windows PowerShell при запуске сценария PowerShell немного позже.

Создание задания

В Jenkins есть концепция заданий. Задание – это набор инструкций, которые вы можете предоставить Jenkins, чтобы он знал, какие сценарии выполнять, какие графики соблюдать и т. д. В этом разделе вы создадите задание, которое будет выполнять сценарий PowerShell. Для этого вы настроите задание, которое будет клонировать репозиторий Git в Jenkins.

  1. После входа в Jenkins нажмите Новый элемент в верхнем правом углу.
New Item menu option

2. Затем вам будет предоставлено отображаемое ниже окно. Выберите Проект со свободной конфигурацией. Этот тип задания обеспечит наибольшую гибкость.

Creating a new Jenkins project

3. Назовите задание Hello World и нажмите OK.

Using Hello World for the project name

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

Source Code Management option

5. При нажатии на Git вы должны увидеть опцию, запрашивающую информацию о вашем репозитории Git. Это репозиторий Git, который содержит ваши сценарии PowerShell.

Setting the Git repo

Ниже приведено разбиение каждого поля:

  • URL репозитория – URL, указывающий на Git-репозиторий. В TFS, например, URL может выглядеть так: *http://SERVERNAME:8080/tfs//Messaging/_git/Dynamic Distro List*
  • Учетные данные – Имя пользователя/пароль, который имеет доступ к репозиторию. Если у вас еще нет настроенных учетных данных, вы можете создать их, нажав на Добавить.
  • Имя – Можно оставить пустым.
  • Refspec – Можно оставить пустым.
  • Branch Specifier – Это позволяет выбрать, какую ветку вы хотите использовать для этой задачи. По умолчанию он будет забирать ветку master, но если у вас есть другая тестовая ветка, которую вы хотите использовать, вы можете указать ее здесь.

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

Добавление шага сборки с использованием Windows PowerShell

Возможно, у вас есть сценарий в корне ветки master Git-репозитория с именем Hello World.ps1. Внутри этого сценария у вас есть одна строка:

Write-Host "Hello World, I'm a Jenkins build!"

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

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

  1. Нажмите на кнопку Добавить шаг сборки и выберите Windows PowerShell.
Windows PowerShell Build step

2. Внутри блока Command выполните dot source PowerShell-скрипт, расположенный в вашем Git-репозитории, как показано ниже. Вы можете видеть, что мы используем переменную среды PowerShell environment variable с именем WORKSPACE. Эта переменная представляет текущий рабочий каталог (корневая папка Git-репозитория).

Running the Hello World.ps1 script

3. Теперь нажмите Save, чтобы сохранить задание.

Теперь у вас должно быть настроено задание для вызова PowerShell-скрипта из Git-репозитория!

Выполнение PowerShell-скрипта

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

  1. Убедитесь, что вы находитесь на главном экране задания. Если вы использовали имя Hello World для этой задачи, URL по умолчанию будет http://localhost:8080/job/Hello world/.
  2. На главном экране задания щелкните Build Now слева, как показано ниже.
Running the build

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

4. Чтобы увидеть результаты, щелкните зеленую галочку рядом с сборкой.

Inspecting build results

Если все прошло согласно плану, вы увидите нечто подобное следующему в вашем выводе:

Build log results

Расписания и триггеры

Теперь у вас есть задача, которая может запускаться по необходимости и выводить сообщение Hello World. Но одним из основных преимуществ Jenkins является замена запланированных задач. Мы не хотим выполнять это вручную. Если вы откроете эту задачу снова, вы увидите раздел под названием Триггеры сборки.

Available build triggers

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

Создание расписания

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

  1. Выберите Собирать периодически. Этот триггер позволяет планировать задачи с использованием синтаксиса, подобного cron.

2. Настройте задачу на запуск в 7:30 утра понедельник, среду и пятницу, как показано ниже.

Setting schedule to 7:30AM MWF

3.  Сохраните изменения и подождите.

Когда наступит назначенная дата и время, вы увидите, что скрипт был выполнен, как задумано, в разделе История сборок.

Build running on schedule

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

Дополнительное чтение

Source:
https://adamtheautomator.com/powershell-jenkins/