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

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

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

Далее необходимо перейти во вкладку «Add Credentials»,

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

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

2.1. Добавьте название создаваемого задания Jenkins. Нельзя использовать в названии кириллицу и спецсимволы.
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/SYN_custom.groovy;Убедитесь, что НЕ стоит галочка Lightweight checkout.
Сохраните получившийся Jenkins Pipeline.
На появившейся странице, в меню боковой панели выберите Собрать сейчас. Запускается первоначальная сборка.

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

На появившейся странице необходимо заполнить следующие параметры и нажать кнопку Собрать:
jenkins_slave— имя агента Jenkins для сборки;ansible_version— название Jenkins Tool, отвечающий за используемую версию Ansible.
Необходимо обновить страницу и после окончания работы задания Jenkins снова нажать Собрать с параметрами.
Появится страница со всем списком настраиваемых параметров, отвечающих за установку EVTP:
job_config_renew— отвечает за обновление Jenkins Job. При установке приложения должен быть выключен (false). Для обновления текущих параметров и сохранения значений по умолчанию должен быть включен (true);inventory— укажите имя inventory для установки;nexusUrl— укажите ссылку на переданный дистрибутив./EVTP-flink-[version]-distrib;emailto— укажите почту, на которую придет рассылка о статусе установки приложения;playbook— выберите необходимый сценарий установки, где:flink.yml — устанавливает EVTP;
<название сервиса>_system_service.yml — устанавливает системный сервис для EVTP;
<название сервиса>_user_service.yml — устанавливает пользовательский сервис для EVTP;
prerequirements.yml — playbook для автоматической настройки пререквизитов: устанавливает необходимые пакеты, модифицирует лимиты, настройки сети, прописывает sudo права для использования сервисов и создает директории установки/логов/данных;
reencrypt_passwords.yml — принудительное перешифрование паролей в конфигурационных файлах;
<название сервиса>_rolling_update_flink_jks.yml — обновляет jks сертификаты для EVTP;
<название сервиса>_rolling_upgrade.yml — обновляет EVTP до новой версии;
tags— список тегов. При пустом значении выполняется установка или обновление EVTP. При теге uninstall выполняется удаление EVTP: для playbook «flink.yml»:run_only — выбрать конкретный обработчик;
backup_create — создание backup;
backup_remove — удаление backup;
backup_restore — восстановление из backup;
distribute — распаковка дистрибутива;
flink_jobs — выбрать определенные job;
generate_defaults - используется в flink_utils, проставляется самостоятельно;
generate_flink_conf — изменение конфигурационного файла;
generate_logback — генерация шаблонов логбэка;
generate_pem — генерация pem;
generate_savepoint — генерация сейвпоинта;
generate_vault_properties — изменения файла vault properties;
install — запуск блока установки;
jobmanager_leader — получение адреса лидера jobmanager;
jobmanager_restart — перезапуск jobmanager;
jobmanager_start — запуск jobmanager;
jobmanager_stop — остановка jobmanager;
remove_fingerprint — удаление отпечатков;
restart — перезапуск приложения;
restart_flink_jobs_sequential — последовательный перезапуск job;
start — запуск сервиса;
start_flink_jobs — запуск job флинка;
status — статус сервиса;
stop — остановка сервиса;
stop_flink_jobs — остановка job флинка;
taskmanager_restart — перезапуск taskmanager;
taskmanager_start — запуск taskmanager;
taskmanager_stop — остановка taskmanager;
telemetry — генерация конфигурации OpenTelemetry. В зависимости от значения параметра telemetry.enable в файле vars.yml;
uninstall — удаление EVTP;
update_certificates — позволяет обновлять сертификаты на конечном host.
flinkJobs— используется фильтр с конкретными flink job;select_all_hosts— отвечает за выполнение playbook на всех host из выбранного inventory;only_on_host— отвечает за выполнение playbook на выбранных host;custom_vault_password— отвечает за ручной ввод пароля для Ansible Vault;jenkins_slave— выбор jenkins slave;jdk_tool— выбор jenkins tool для java, используемой при установке;ansible_branch— ветка скриптов развертывания;ansible_version— указание Jenkins Tool с необходимой версией Ansible. Конкретное значение необходимо получить у администратора Jenkins;nexus_user_cred— Jenkins username with password credential ID для выкачивания дистрибутива. При заданииsecman_url— полный путь в HashiCorp Vault до user и пароля. Например:{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 flink_config_create#
Jenkins Job flink_config_create, используется для создания конфигурационных дистрибутивов с настройками для репликации и публикации их в Nexus. Задания создаются аналогично SYN_custom.groovy, только вместо SYN_custom.groovy задается скрипт flink_config_create.groovy.
Список настраиваемых параметров, отвечающих за установку config_create:
job_config_renew— отвечает за обновление Jenkins Job. При установке приложения должен быть выключен (false). Для обновления текущих параметров и сохранения значений по умолчанию должен быть включен (true);majorVersion— мажорная версия создаваемого конфигурационного дистрибутива. Пример полный версии дистрибутива -${majorVersion}.001.00-00;nexusUrl— ссылка на пространство в Nexus для публикации конфигурационных дистрибутивов;nexusReleaseUrl— ссылка на релизное пространство в Nexus для определения актуальной версии дистрибутива. Можно оставить пустым, если определяем версию и номер сборки из пространства, в которое идет публикация;nexusСred— Jenkins username with password credential ID для публикации конфигурационного дистрибутива. При заданииsecman_url– полный путь в HashiCorp Vault до имени пользователя и пароля. Например:{Jenkins vault app role credential ID для получения секретов из SecMan}|path/to/nexus:{user},{password};configManualUpload— загрузка конфигурационного дистрибутива вручную; если значение «false» то конфигурация будет скачиваться из Git и необходимо заполнить параметры:issueID,gitPath,gitUrl,gitCred,gitBranch;issueID— поле для указания номера задачи (пример: XXXX-12345);gitPath— путь до файлов конфигурации в репозитории;gitUrl— ссылка на репозиторий;gitCred— Jenkins Username With Password Credential ID или Jenkins SSH Username With private key Credential ID для выкачивания конфигурационных файлов из Bitbucket. Чтобы получить username и password для Nexus из HashiCorp Vault, необходимо заполнить параметр secman_url в формате:JenkinsCredID|SecManPath:SecManKeys|SecManParams, где:JenkinsCredID — Jenkins Vault App Role Credential ID с реквизитами для подключения к HashiCorp Vault;
SecManPath — путь к секретам в HashiCorp Vault;
SecManKeys — имена полей для ssh_username и pssh_key, ssh_key_passphrase в HashiCorp Vault (через запятую). Ssh_key_passphrase не указывается, если у ssh ключа нет пароля;
SecManParams — параметры для подключения к HashiCorp Vault (через точку с запятой). Если данные параметры по умолчанию, то пропускаются вместе с «|». Примеры:
SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ssh_username,ssh_key;
SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ssh_username,ssh_key,ssh_key_passphrase;
SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ssh_username,ssh_key,ssh_key_passphrase|engineVersion:2;
Если поле ssh_key не содержит строки PRIVATE KEY, то это поле воспринимается как пароль, а не как ssh ключ, и аутентификация производится по имени пользователя и паролю, а не по имени пользователя и ssh ключу.
gitBranch— ветка репозитория;secman_url— URL для подключения к HashiCorp Vault;ssl_verify— проверить, являются ли сертификаты HashiCorp Vault/Nexus доверенными;rebuildVersion— версия конфигурационного дистрибутива для сборки (пересборки), например D-30.123.00 (или пусто, если выпускается новый релиз);jenkinsSlaveNode— выбор Jenkins Slave;ansible_branch— ветка скриптов развертывания (в настройках Jenkins указать ${ansible_branch});userID— идентификатор клиента для формирования JMX метрик (необязательное поле);emailto— указать почту, на которую придет рассылка о статусе выполнения операции.
Создание Jenkins Job для установки flink_config_deploy#
Jenkins Job flink_config_deploy, используется для установки конфигурационных дистрибутивов, выпущенных Jenkins Job flink_config_create. Задания создаются аналогично SYN_custom.groovy, только вместо SYN_custom.groovy задается скрипт flink_utils.groovy.
Список настраиваемых параметров, отвечающих за установку config_deploy:
job_config_renew— отвечает за обновление Jenkins Job. При установке приложения должен быть выключен (false). Для обновления текущих параметров и сохранения значений по умолчанию должен быть включен (true);inventory— имя inventory для установки;nexusUrl— указать ссылку на конфигурационный дистрибутив, который был создан на этапе создания Jenkins Job flink_config_create;userID— идентификатор клиента для формирования JMX метрик (необязательное поле);emailto— указать почту, на которую придет рассылка о статусе установки конфигурационного дистрибутива;all_releases_from_conf— Работаем со всеми релизами из inventories/$inventory/flink_releases.conf;custom_releases_from_conf— Работаем с выбранными релизами из inventories/$inventory/flink_releases.conf;custom_job_release— Кастомная версия обработчика (не current из используемого релиза);tags– cписок тегов. При пустом значении выполняется установка или обновление EVTP. При теге uninstall выполняется удаление EVTP:start_flink_jobs — Запуск flink job;
stop_flink_jobs — стоп flink job;
restart_flink_jobs_sequential — последовательный перезапуск job;
generate_defaults — используется в flink_utils, проставляется самостоятельно;
status — статус flink job.
isTrace— Включение трассировки времени выполнения каждого шага обработчика;custom_vault_password— отвечает за ручной ввод пароля для Ansible Vault;jenkins_slave— выбор jenkins slave;ansible_branch— ветка скриптов развертывания;ansible_version— указание Jenkins Tool с необходимой версией Ansible. Конкретное значение необходимо получить у администратора Jenkins;nexus_user_cred— Jenkins username with password credential ID для выкачивания конфигурационного дистрибутива. При заданииsecman_url– полный путь в HashiCorp Vault до user и пароля. Например:{Jenkis 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}, {Jenkis 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 до секрета, например{Jenkis vault app role credential ID для получения секретов из Hashicorp Vault}|/.../KV/ssh:{user},{key},{passphrase}(в качестве ключа можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например, myPrivateKeyBase64);secman_url— URL для подключения к HashiCorp Vault;jdk_tool— указание Jenkins Tool с нужной версией JDK. Конкретное значение необходимо получить у администратора jenkins;ssl_verify— проверить, являются ли сертификаты HashiCorp Vault/Nexus доверенными;second_hand_approve— подтверждение запуска другим администратором (контроль «второй рукой»). Двухэтапное подтверждение запуска, требующее действия другого администратора для запуска задания Jenkins Job. При активации этой опции одному администратору будет недоступна возможность запуска задания Jenkins Job без подтверждения со стороны другого администратора;inventories_repo,inventories_branch,inventories_path— необязательные параметры. Выкачивание inventory из стороннего репозитория.
Запуск установки с помощью Jenkins#
Запустите задание Jenkins с помощью пункта меню Собрать с параметрами.
Выберите необходимое значение из списка inventory.
Заполните параметр nexusUrl ссылкой на конфигурационный дистрибутив.
Нажмите кнопку Собрать.
Дождитесь окончания выполнения задания Jenkins.
В рамках работы задания Jenkins проверяется корректность создания и запуска EVTP.