Создание Jenkins Job для автоматической установки#
Настройка credentials для Ansible-Vault#
Создать файл с паролем, с помощью которого при автоматической установке будут расшифровываться пароли, зашифрованные через ansible-vault в параметрах
varsвыбранного inventory.

Зайти в Jenkins в свой проект, перейти во вкладку «Credentials», далее выбрать ваш проект:

Открывается страница, где необходимо выбрать «Global credentials (unrestricted)»:

Далее перейти во вкладку «Add Credentials»:

После перехода будут доступны поля для заполнения:
«Kind» — в выпадающем списке выбрать параметр Secret file;
«File» — загрузить созданный файл с паролем;
«ID» — указать наименование, которое придумываете самостоятельно (данный ID необходимо будет указать в Jenkins Job в параметре
vault_cred);«Description» — необязательное поле, в котором можно добавить описание.
Нажать кнопку Create — Credentials для Vault созданы:

Создание Jenkins Job для установки#
Содержимое дистрибутива
./EVPT-scripts-[version]-distrib.zipпоместить в Git-репозиторий.Выбрать в Jenkins New Item для создания нового Jenkins Job:

2.1. Добавить название создаваемого Jenkins Job. Нельзя использовать в названии русские буквы, спецсимволы (название может быть любым, например, scheduler_VM).
2.2. Выбрать Pipeline и нажать кнопку «ОК»:

2.3. На появившейся странице необходимо заполнить поля в блоке Pipeline:
Изменить значение параметра „Definition“ на «Pipeline script from SCM»;
Изменить значение параметра SCM на «Git»;
Заполнить параметр „Repository URL“, в параметре указать путь до вашего Git-репозитория;
Заполнить параметр „Credentials“, в параметре указать ваши Credentials с правами на чтение;
В параметре „Branches to build“ выбрать ветку, в которой находятся скрипты;
В параметре „Script Path“ указать путь до groovy-скрипта: «Pipeline/scheduler_vm.groovy»;
Убедиться, что НЕ стоит галочка Lightweight checkout.
Сохранить получившийся Jenkins Pipeline.
На появившейся странице в меню боковой панели выбрать «Собрать сейчас». Запускается первоначальная сборка:

Необходимо обновить страницу.
Затем выбрать в меню боковой панели «Собрать с параметрами»:

На появившейся странице необходимо заполнить следующие параметры и нажать кнопку «Собрать»:
jenkins_slave– имя агента Jenkins для сборки;ansible_version– указание Jenkins Tool с необходимой версией Ansible. Конкретное значение необходимо получить у администратора Jenkins.
Необходимо обновить страницу и после окончания работы Jenkins Job снова нажать «Собрать с параметрами».
Появится страница со всем списком настраиваемых параметров, отвечающих за установку EVPT.
Параметры для установки на ВМ:
job_config_renew– отвечает за обновление Jenkins Job. При установке приложения должен быть выключен (false). Для обновления текущих параметров и сохранения значений по умолчанию должен быть включен (true);inventory– имя inventory для установки;nexusUrl– указать ссылку на переданный дистрибутив компонента EVPT./EVPT-bin-[version]-distrib.zip;emailto– указать почту, на которую придет рассылка о статусе установки компонента;playbook– выбрать необходимый сценарий установки. Где:scheduler_vm.yml – устанавливает компонент EVPT;
prerequirements.yml — playbook для автоматической настройки пререквизитов: устанавливает необходимые пакеты, модифицирует лимиты, настройки сети, прописывает sudo права для использования сервисов и создает директории установки/логов/данных;
reencrypt_passwords.yml – перешифровывает пароли;
<название сервиса>_system_service.yml – устанавливает system service для указанного компонента;
<название сервиса>_user_service.yml – устанавливает user service для указанного компонента.
tags– cписок тегов. При пустом значении выполняется установка или обновление EVPT:backup_create — создание резервного копирования;
backup_remove — удаление резервного копирования;
backup_restore — восстановление из резервного копирования;
distribute — распаковка дистрибутива на конечных хостах;
install — запуск блока установки;
restart – перезапуск компонента;
start — запуск компонента;
status — статус компонента;
stop — остановка компонента;
uninstall – удаление evpt.
select_all_hosts– отвечает за выполнение playbook на всех host из выбранного inventory;only_on_host– отвечает за выполнение playbook на выбранных host;custom_vault_password– отвечает за ручной ввод пароля для Ansible Vault;jenkins_slave— выбор Jenkins slave;jdk_tool— указание Jenkins Tool с нужной версией JDK, конкретное значение необходимо получить у администратора Jenkins;ansible_branch— ветка скриптов развертывания;ansible_version— указание Jenkins Tool с необходимой версией Ansible. Конкретное значение необходимо получить у администратора Jenkins;nexus_user_cred— Jenkins username with password credential ID для выкачивания дистрибутива. При заданииsecman_url– полный путь в HashiCorp Vault до пользователя и пароля. Например:{Jenkins *vault app role* credential ID для получения секретов из SecMan}|path/to/nexus:{user},{password}.vault_cred— Jenkins secret file credential ID со строкой для расшифровки паролей (ansible vault) (несколько через запятую). При заданииsecman_url– полный путь в HashiCorp Vault до пароля. Например:{Jenkins *vault app role* credential ID_1}|/path/to/vault:{password_1}, {Jenkins *vault app role* credential ID_2}|/path/to/vault:{password_2}. В качестве пароля можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например, myVaultBase64.server_ssh_cred– указать Jenkins ssh key Credential ID для подключения к серверам. При задании параметраsecman_url— указать полный путь в Hashicorp Vault до секрета. Например{Jenkins *vault app role* credential ID для получения секретов из Hashicorp Vault}|/.../KV/ssh:{user},{key},{passphrase}. В качестве ключа можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например myPrivateKeyBase64;secman_url— URL для подключения к HashiCorp Vault.ssl_verify— проверяем, являются ли сертификаты HashiCorp Vault/Nexus доверенными;second_hand_approve— подтверждение запуска другим администратором (контроль «второй рукой»). Двухэтапное подтверждение запуска, требующее действия другого администратора для запуска задания Jenkins Job. При активации этой опции одному администратору будет недоступна возможность запуска задания Jenkins Job без подтверждения со стороны другого администратора;inventories_repo,inventories_branch,inventories_path— необязательные параметры. Позволяют указать inventory в стороннем репозитории.
Успешным результатом работы Jenkins job будет запущенный EVPT на hosts, указанных в inventory.
Создание Jenkins Job db_action#
Задание Jenkins db_action используется для настройки базы данных.
Выбрать в Jenkins New Item для создания нового Jenkins Job:

1.1. Выбрать Pipeline и нажать кнопку ОК:

1.2. На появившейся странице необходимо заполнить поля в блоке Pipeline поля:
Изменить значение параметра «Definition» на Pipeline script from SCM;
Изменить значение параметра «SCM» на Git;
Заполнить параметр «Repository URL», в параметре указать путь до вашего Git-репозитория;
Заполнить параметр «Credentials», в параметре указать ваши сredentials с правами на чтение;
В параметре «Branches to build» выбрать ветку, в которой находятся скрипты;
В параметре «Script Path» указать путь до groovy-скрипта Pipeline/db_action.groovy;
Убедиться, что НЕ стоит галочка Lightweight checkout.
Сохранить получившийся Jenkins Pipeline.
На появившейся странице в меню боковой панели выбрать «Собрать сейчас». Запустится первоначальная сборка:

Необходимо обновить страницу.
Выбрать в меню боковой панели «Собрать с параметрами»:

На появившейся странице необходимо заполнить следующие параметры и нажать кнопку «Собрать»:
job_config_renew— отвечает за обновление Jenkins Job. Для обновления текущих параметров и сохранения значений по умолчанию должен быть включен (true).
Если параметры не появились, то в настройках необходимо самостоятельно добавить приведенные параметры.
Необходимо обновить страницу и после окончания работы Jenkins Job снова нажать «Собрать с параметрами».
Появится страница со всем списком настраиваемых параметров:
job_config_renew— перенастройка задания Jenkins. Данный параметр используется, если был добавлен новый inventory. Меняет значения по умолчанию всех параметров. Сохраняет предыдущее состояние параметров inventories_repo, inventories_branch, inventories_path;inventory— имя inventory для установки;nexusUrl— полный путь до дистрибутива (можно указать несколько через запятую);db_action— выбор действия, которое необходимо выполнить: update;jenkins_slave— выбор jenkins slave;jdk_tool— указание Jenkins Tool с нужной версией JDK, конкретное значение необходимо получить у администратора Jenkins;ansible_branch— используется для работы с несколькими ветками скриптов развертывания. Работает только при значении Branch Specifier (blank for „any“) равным ${ansible_branch};ansible_version— указание Jenkins Tool с необходимой версией Ansible. Конкретное значение необходимо получить у администратора Jenkins;nexus_user_cred— ID credential типа username with password для выкачивания дистрибутива компонента из Nexus. Чтобы получить username и password для Nexus из SecMan, необходимо заполнить параметр secman_url в формате:JenkinsCredID |SecManPath:SecManKeys|SecManParams, где:JenkinsСredID — Jenkins Vault App Role Credential ID c реквизитами для подключения к SecMan;
SecManPath — путь к секретам в SecMan;
SecManKeys — имена полей для username и password в SecMan (через запятую);
SecManParams — параметры для подключения к SecMan (через точку с запятой). Если данные параметры по умолчанию, то пропускаются вместе с «|». Примеры:
SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:username,password
SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:username,password|engineVersion:2
vault_cred— ID credential типа secret file со строкой для расшифровки паролей ansible vault (можно указывать несколько через запятую). Чтобы получить ansible vault password из SecMan, необходимо заполнить параметр secman_url в формате:JenkinsСredID|SecManPath:SecManKey|SecManParams, где:JenkinsСredID — Jenkins Vault App Role Credential ID с реквизитами для подключения к SecMan;
SecManPath — путь к секрету в SecMan;
SecManKey — имя поля для ansible vault password в SecMan;
SecManParams — параметры для подключения к SecMan (через точку с запятой). Если данные параметры по умолчанию, то пропускаются вместе с «|» (в качестве пароля можно использовать не строку, а файл в base64 формате и секрет в SecMan с именем, оканчивающимся на «Base640», например: myVaultBase64). Примеры:
SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password
SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password|engineVersion:2
SecManAppRoleCred1|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password1,SecManAppRoleCred2|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password2
SecManAppRoleCred1|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password1|engineVersion:2,SecManAppRoleCred2|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password2|engineVersion:2
secman_url— URL для подключения к HashiCorp Vault;ssl_verify— проверка, являются ли сертификаты HashiCorp Vault/Nexus доверенными;second_hand_approve— подтверждение запуска другим администратором (контроль «второй рукой»). Двухэтапное подтверждение запуска, требующее действия другого администратора для запуска задания Jenkins Job. При активации этой опции одному администратору будет недоступна возможность запуска задания Jenkins Job без подтверждения со стороны другого администратора;inventories_repo— репозиторий с inventory (ssh://);inventories_branch— ветка репозитория;inventories_path— путь до inventories от корня репозитория.