Мигратор конфигурации jinja2 - Helm#

Настроить JOB Jenkins#

  1. Из дистрибутива bin забрать скрипт по пути package/scripts/helm-conf-migrator/pipeline/migrate-from-jinja2-to-helm.groovy

  2. Создать новый Git-репозиторий, если такой не был создан ранее, для хранения данного скрипта в SCM BitBucket-cd. Если репозиторий уже создан, необходимо убедиться, что скрипт в нем соответствует скрипту из дистрибутива.

2.1 Добавьте в новый репозиторий (или уже имеющийся) скопированный скрипт из дистрибутива.

2.2 Можно создать новую ветку от текущей ветки master и работать в ней, сохраняя изменения.

2.3 В скрипте необходимо произвести изменение в блоке пайплайн параметра agent:

pipeline {
    agent {label 'pvmdevop'}
...

Необходимо передать в agent либо параметр any, чтоб запускать скрипт на любом агенте Jenkins:

pipeline {
   agent any

либо то значение, которое требуется для запуска, если any не подойдет:

pipeline {
    agent {label 'name_of_agent'}

2.4 Сохраните скрипт после внесения изменений.

2.5 Выполните отправку изменений ветки репозитория

git push origin <name_of_branch>
  1. В Jenkins, создать Jenkins Job - тип пайплайн, в проекте, где присутствуют или будут созданы Jenkins credentials - для доступа к Git/Nexus;

  2. В секции пайплайн настроить доступ до репозитория со скриптом.

4.1. Указать путь до репозитория и credentials для доступа к репозиторию со скриптами.

JenkinsPipeline01

4.2. Указать путь до скрипта в самом репозитории:

JenkinsPipeline02

  • Произвести инициализацию параметров, запустив этот пайплайн без параметров (подгрузятся, после первичного запуска), первичный запуск упадет с ошибкой, так как будет запущен без параметров.

  • Параметры job следующие:

#####################################
Легенда:

FP_SRC: FP репозиторий источник, из него забираем исходные параметры (SOURCE_FP_REPO_URL + SOURCE_FP_REPO_BRANCH).
COMMON_SRC: COMMON репозиторий источник с глобальными переменными (SOURCE_COMMON_REPO_URL + SOURCE_COMMON_REPO_BRANCH).
FP_DST: FP репозиторий назначения, в него публикуем смигрированные настройки (DESTINATION_FP_REPO_URL + DESTINATION_FP_REPO_BRANCH).

#####################################

SOURCE_FP_REPO_URL: Репозиторий FP_SRC, из которого будут браться значения окружения, например, ssh://git@GIT_HOST:GIT_PORT/SOME_PROJECT/FP_REPO_SRC.git
SOURCE_FP_REPO_BRANCH: Ветка репозитория FP_SRC, из которого будут браться значения окружения, например - r/5.1.40
SOURCE_COMMON_REPO_URL: Репозиторий COMMON_SRC, откуда будут взяты дополнительные глобальные переменные, например ssh://git@GIT_HOST:GIT_PORT/SOME_PROJECT/COMMON_REPO_SRC.git
SOURCE_COMMON_REPO_BRANCH: Ветка репозитория COMMON_SRC, из которого будут браться глобальные значения окружения, например - master
DESTINATION_FP_REPO_URL: Репозиторий FP_DST, куда будут публиковаться файлы values-*.yaml с мигрированными значениями, может совпадать с SOURCE_FP_REPO_URL, если мы производим миграцию в рамках одного FP репозитория
DESTINATION_FP_REPO_BRANCH: Ветка репозитория FP_DST, куда будут публиковаться файлы values-*.yaml с мигрированными значениями, необходимо указать новую ветку например r/6.0-migration
DESTINATION_FP_REPO_BLOCK_FOLDER: Блок конфигурации в COMMON_SRC/FP_SRC, например ci00380023_efs_unimon_inda_st/FP_BLOCK_FOLDER/conf. Используется для сбора настроек окружений COMMON_SRC/FP_SRC, если указать через "|", например - dev|new_dev - то рендер будет брать окружение dev (COMMON/FP), а смигрирует с новым названием new_dev (FP_DST), если указать в формате dev или dev|dev - то будет использован блок конфигурации с именем - dev в FP_DST.
SOURCE_GIT_REPO_CREDENTIALS_ID: Jenkins credentials для SSH доступа к исходному Git репозиториям (FP_SRC/COMMON_SRC) - тип секрета SSH Username with private key.
SOURCE_COMMON_REPO_SUBSYSTEM_NAME: [ОПЦИОНАЛЬНО] Имя подсистемы - в файле subsystems.json, если используются переменные в связке, например, mulitclusters.json + subsystem.json.
SOURCE_COMMON_REPO_CLUSTER_NAME: [ОПЦИОНАЛЬНО] Имя cluster/namespace - если используются переменные в блоке (datacenters.${CLUSTERNAME}.*:) в файле mulitclusters.json.
SOURCE_COMMON_REPO_SECTOR: [ОПЦИОНАЛЬНО] Имя сектора/каталога extra_${SECTOR_NAME} в COMMON_REPO, в котором дополнительно лежит *.conf конфигурация, т.е. используется функциональность секторов.
DESTINATION_GIT_REPO_CREDENTIALS_ID: Jenkins credentials для SSH доступа к целевому FP_DST репозиторию с правами git push. Может совпадать с SOURCE_GIT_REPO_CREDENTIALS_ID, в случае, если FP_DST=FP_SRC или если настроен общий ssh credentials. Тип секрета SSH Username with private key.
FILE_MIGRATION_MAP (migration_map.yaml): YAML файл с картой миграции, который необходимо загрузить в Jenkins Job.
NEXUS_CREDENTIALS_ID: Jenkins credentials для доступа к скачке дистрибутива из Nexus (тип секрета - Username with password).
NEXUS_DISTRIB_URL: Ссылка на NEXUS distrib компонента, для которого выполняется миграция.

Подготовить файл карты миграции#

Файл карты миграции migrate_map.yaml (размещен в дистрибутиве по пути /package/scripts/ в дистрибутиве bin).

В файле есть указание с какой версии FP - репозитории с Jinja в какой репозиторий подсистемы с Helm будет проходить миграция.

### MIGRATION_MAP INDA ###
name: inda
version:
  from: 5.1.59
  to: 6.0.10

Запуск миграции#

Важно

Перед запуском, необходимо актуализировать параметры так же и на стороне пользователя. Пример indicator.ose.deployments.partsOf = dev тут метка dev может не соответствовать стенду в который происходит миграция.

Выполнить следующие шаги:

  1. Вложить файл карты миграции migrate_map.yaml в созданный job мигратора (параметр FILE_MIGRATION_MAP)

  2. Указать source компоненты. Репозиторий INDA (параметр SOURCE_FP_REPO_URL).

  3. Указать ветку. Ветку из которой job будет делать миграцию (параметр SOURCE_FP_REPO_BRANCH).

  4. Указать source common репозитория. В котором находятся такие файлы как environment.json и subsystems.json (параметр SOURCE_COMMON_REPO_URL). Так же должен быть хотя быть как минимум 1 файл .conf по расположению [имя ветки из шага 3] /installer/system/efs/config/parameters/*.conf. Иначе может быть ошибка

grep -h '\S' 'common-repo/dev/installer/system/efs/config/parameters/*.conf'
grep: common-repo/dev/installer/system/efs/config/parameters/*.conf: No such file or directory
  1. Указать ветку common репозитория (параметр SOURCE_COMMON_REPO_BRANCH).

  2. Указать репозиторий куда будет внесены изменения (параметр DESTINATION_FP_REPO_URL).

  3. Указать ветку репозитория куда будет внесены изменения (параметр DESTINATION_FP_REPO_BRANCH).

  4. Указать DESTINATION_FP_REPO_BLOCK_FOLDER

Если указать через - dev|new_dev - то рендер будет брать окружение dev (COMMON/FP), а смигрирует с новым названием new_dev (DESTINATION_FP_REPO)

  1. Указать, если необходимы, SOURCE_COMMON_REPO_SUBSYSTEM_NAME, SOURCE_COMMON_REPO_SECTOR, SOURCE_COMMON_REPO_CLUSTER_NAME

  2. Указать набор credentials, для доступов в nexus репозиторий.

  3. Нажать на кнопку собрать и дождаться завершения миграции.

  4. Проверить что шаг миграции завершился успешно. Если нет проверить правильность выполнения шагов до этого.

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

"error: failed to push some refs to"

В таком случае job следует перезапустить повторно.

Примечание#

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

Известная проблема при работе мигратора: возможна некорректная миграция ott:host и ott:port, необходимо после миграции обязательно проверить значения в values-env.yaml.