SynapseInstaller#
Jenkins Job, в котором происходит установка конфигураций из дистрибутива в проект системы оркестрации приложений.
Результатами работы Jenkins Job являются:
Загруженные конфигурационные файлы в проект
В артефакты сборки кладутся все сгенерированные конфигурации из шаблонов и используемые стендозависимые параметры.
Особенности:
Отправляет в систему анализа и статистики информацию о дистрибутиве и стенде для установки перед тем, как установить конфигурации из дистрибутива в проект системы оркестрации приложений.
Расшифровывает secret(s) из репозитория SCM (подробности см. в подразделе «Работа с secret(s)» раздела «Полезные материалы» текущего документа).
От вашего проекта нужно скопировать токен для доступа в проект и поместить в Credentials пространства Jenkins или в HashiCorp Vault. Можно использовать OrchestratorToken (описанного в подразделе «Pipelines» раздела «Дополнительная документация» текущего документа). Также можно вводить пароль руками, активировав параметр needInputOrchestratorLogin.
Перед каждой загрузкой может выполнять команду apply с ключом --dry-run=true и --dry-run=server для валидации изменений (стандартным схемам системы оркестрации и компонентой VALD (при наличии)), которые вносят конфигурационные файлы.
Имеется возможность включения подтверждения "второй рукой" (параметр needSecondApprove). Список разрешенных людей (логины) для подтверждения "второй рукой" прописывается в SubmitterAllowed.
Установка конфигурационных файлов в проект системы оркестрации приложений производится в следующем порядке: VirtualServices, DestinationRules, все остальное, Gateways, Deployments.
Может производить проверку наличия всех необходимых стендозависимых параметров в репозитории (шаг CheckTemplateParams.groovy (описан в подразделе «Шаги» раздела «Дополнительная документация» документа «Руководство прикладного разработчика»)).
По завершении работы проставляет в Jira задачу и в Jira Release, в рамках которых передается дистрибутив комментарий с результатами установки.
После успешной установки может передвинуть Jira задачу, в рамках которой передается дистрибутив, в необходимый статус. (для этого необходимо добавить два заполненных дополнительных файла teamSettings.json и jiraTransitionsMap.json (описаны в подразделе «Дополнительные файлы (additionalFiles)» раздела «Дополнительная документация» документа «Руководство прикладного разработчика»)).
Работа с templates подробно описана в подразделе «Работа с template в SynapseInstaller» раздела «Полезные материалы» текущего документа.
Вызов проверки результатов установки (параметр needSynaiCheck). Происходит вызов компоненты SYTL.
Откат к исходному состоянию в случае неуспешной установки.
Сравнение устанавливаемых конфигураций и того, что находится в проекте. Изменения отображаются в виде pull-request в репозитории SCM.
Возможность установки бэкапа из репозитория, собранным BackupMaker (описанного в подразделе «Pipelines» раздела «Дополнительная документация» текущего документа) или конфигураций из репозитория стендозависимых параметров. Важно! Для установки бэкапа одного проекта в другой, данный бэкап необходимо перенести в репозитории с бэкапами в каталог, названный именем проекта, в котором его планируют устанавливать.
Jenkins Job использует:
tool
helmдля обработки Helm Chart;tool
pythonдля запуска Python скриптов;tool
executorдля работы с системой оркестрации приложений;tool
processorдля работы с системой оркестрации приложений;tool
precheckExecutorдля запуска dry-run установки конфигураций;tool
yqдля чтения YAML конфигураций.
Для настройки Jenkins Tool необходимо ознакомиться с разделом «Взаимодействие с Jenkins Tools» документа «Руководство по системному администрированию».
Функции Jenkins Job:
Название функции |
Описание функции |
Инструкция по настройке/включению |
|---|---|---|
Удаление ресурсов |
«Удаление ресурсов в проекте системы оркестрации приложений» раздел «Полезные материалы» текущего документа |
Не требуется настройка/включение |
Включение подтверждения удаления конфигураций "второй рукой" |
При удалении конфигураций, после подтверждения удаления инициатором запуска Jenkins Job, потребуется подтверждение другого пользователя |
В пользовательском конфигурационном файле в репозитории конфигураций SMDL.Configs определить параметр needSecondApproveDeleteConfigs равным |
Увеличение количества реплик у новой версии приложения при канареечном развертывании до уровня старой версии приложения |
Количество реплик старой версии приложения будет увеличено, если у новой версии приложения количество реплик меньше, чем у старой версии |
В пользовательском конфигурационном файле в репозитории конфигураций SMDL.Configs определить параметр needScaleNewPods равным |
Включение возможности выбора Helm Charts, которые необходимо установить |
Возможность выбора устанавливаемого Helm Charts, которые расположены в дистрибутиве |
На экране запуска Jenkins Job задать параметр needInstallSelectedCharts равным |
Зануление количества реплик устаревших версий приложения при канареечном развертывании |
Количество реплик старых версий приложения будет приведено к 0 |
В пользовательском конфигурационном файле в репозитории конфигураций SMDL.Configs определить параметр needDownOldPods равным |
Задание |
Возможность задания |
На экране запуска Jenkins Job задать параметр helmReleaseName |
Параметры запуска Jenkins Job:
Параметр |
Обязательность |
Возможность изменить предопределенные значения |
Описание |
|---|---|---|---|
ClusterName |
+ |
+ |
Кластер для установки |
ClustersXml |
- |
- |
Структура хранения информация о принадлежности проектов к кластерам |
deleteResources |
- |
+ |
Ресурсы для удаления, разделенных ',' или ';'. Пример ввода:deployment.apps/bsp-egressgateway;service/bsp-egressgateway |
Division |
+ |
- |
Сегмент (Dev, Psi, Prom) |
federalName |
- |
+ |
Имя федерации, для федеративной канареечной установки |
gavParam |
- |
+ |
GAV параметры: |
needCanaryUpload |
- |
+ |
Включение режима канареечной установки. Используется для загрузки новой версии приложения при наличии старой. |
needCheckTemplateParams |
- |
+ |
Флаг проверки templates из дистрибутивов на наличие переменных из templates в репозитории стендозависимых параметров |
needCompareConfigs |
- |
+ |
Нужно ли производить сравнение устанавливаемых конфигураций с тем, что установлено в проекте |
needConvert |
- |
+ |
Нужно ли актуализировать apiVersion в конфигурационных файлах. Конвертация выполняется с помощью команды convert. |
needInputOrchestratorLogin |
- |
+ |
Флаг, отвечающий за авторизацию по логину/паролю (вводится во время работы pipeline динамически, маскируется) |
needInputVault |
- |
+ |
Флаг, отвечающий за ввода пароля для шифрации/дешифрации secret(s)/конфигураций (вводится во время работы pipeline динамически, маскируется) |
needLocalTemplateProcessing |
- |
+ |
Флаг, отвечающий за добавление ключа --local=true для обработки шаблонов конфигурационных файлов инструментом клиента системы оркестрации без подключения к серверу |
needOrchestratorValidate |
- |
+ |
Добавление ключа --validate=true при загрузке конфигураций. Будет произведена валидация конфигураций по схемам системы оркестрации. |
needPreCheck |
- |
+ |
Флаг запуска dry-run прогона перед установкой. |
needServerPreCheck |
- |
+ |
Нужно ли проверить устанавливаемые конфигурации перед установкой |
needServerSideForceConflicts |
- |
+ |
Нужно ли при apply конфигураций добавлять флаги --server-side=true и --force-conflicts. Только при использовании клиента kubectl |
needSynaiCheck |
- |
+ |
Нужно ли вызывать компоненту SYTL для проверки успешности установки |
needToUpdateVSandDR |
- |
+ |
Нужно ли обновить VS и/или DR в проекте, в котором они уже есть. Опция необходима в связи с ограничениями систем оркестрации приложений на перезаписывание VS и DR. |
needUploadSecret |
- |
+ |
Выбор режима загрузка secret(s). Для расшифровки должен быть задан параметр AnsibleVaultCredentialsId, содержащий файл с паролем,либо использован параметр needInputVault. Дополнительно нужно заполнить параметр projectsConfigResourcesList: prepare-namespace/secrets/secret-1.yml,prepare-namespace/secrets/secret-2.yml |
needInstallSelectedCharts |
- |
+ |
Флаг, отвечающий за включение возможности выбора Helm Charts, которые необходимо установить |
nexusLink |
- |
+ |
Ссылка для скачивания дистрибутива |
orchestratorProject |
- |
+ |
Имя проекта |
orchestratorProjectArray |
- |
+ |
Проекты по умолчанию. Если orchestratorProject пуст, выбираете из предложенных |
projectApiURL |
+ |
- |
Ссылка на проект. Заполняется на основе ClusterName |
projectsConfigGitBranchSources |
- |
+ |
Ветка репозитория стендозависимых параметров или репозитория с бэкапами |
projectsConfigGitUrlSources |
- |
+ |
Адрес репозитория стендозависимых параметров или репозитория с бэкапами. |
projectsConfigResourcesList |
- |
+ |
Список ресурсов, разделенных ' , ' или ' ; ', из каталога проекта репозитория с конфигурационными файлами для установки. |
ReposXml |
- |
- |
Структура хранения информации об адресах репозиториев |
skipChangeWeightCanary |
- |
+ |
Если параметр равен true, то будет только установлена новая версия сервиса, но при этом нагрзка на нее подаваться не будет. Нагрузка останется 100% на старой версии |
skipGetInfoByCI |
- |
+ |
Флаг, отвечающий за пропуск сбора информации по КЭ |
CIXml |
- |
- |
Структура хранения информацию о связи КЭ с Nexus и Docker Registry. |
helmReleaseName |
- |
+ |
Источники параметров:
projectConfig - конфигурация проекта. Параметры, которые считываются из репозитория конфигурации SMDL.
jenkinsParams - параметры, которые передаются в pipeline, путем заполнения их на экране запуска Jenkins Job, после нажатия кнопки "Собрать с параметрами". Их описание можете посмотреть выше.
libraryParams - параметры, которые заданы командой разработки SMDL.
Параметры Pipeline:
Параметр |
Принцип валидации |
Значение по умолчанию |
Источник |
Описание |
|---|---|---|---|---|
nexusCredentialsId |
requiredNotEmpty |
— |
projectConfig |
Credential дя работы с Nexus |
nexusUrl |
requiredNotEmpty |
— |
libraryParams |
Ссылка на Nexus |
Division |
requiredNotEmpty |
— |
projectConfig |
Сегмент (Dev, Psi, Prom) |
AnsibleVaultCredentialsId |
requiredNotEmpty |
— |
projectConfig |
ID CredentialsId для шифрации и дешифрации (тип: Secret file). Пример: dev_common_ansible_vault_secret |
ciCred |
requiredNotEmpty |
— |
projectConfig |
Credential технической учетной записи DevOps команды |
priorityUploadConfigs |
requiredNotEmpty |
— |
libraryParams |
Порядок загрузки конфигураций в проект |
whiteListMetaInfo |
requiredNotEmpty |
['labels', 'name', 'annotations'] |
libraryParams |
Список разрешенных полей в метаинформации |
blackListMetaInfo |
requiredNotEmpty |
['clusterIP', 'externalIPs', 'nodePort', 'kubectl.kubernetes.io/last-applied-configuration'] |
libraryParams |
Список запрещенных полей в метаинформации |
removeIfNullMetaInfo |
requiredNotEmpty |
['tcp','tls'] |
libraryParams |
Список полей в метаинформации, которые надо удалить, если их значение |
needReplaceNamespace |
setPropsIfNotExist |
— |
libraryParams |
Флаг для явного указания в командах ОС проекта |
needPreCheck |
setPropsIfNotExist |
— |
libraryParams |
Флаг запуска холостого прогона перед установкойdafault: true |
needStopAfterPreCheck |
setPropsIfNotExist |
false |
libraryParams |
Флаг, отвечающий за функционал подтверждения админимтратором корректности холостой установки конфигурационных файлов |
needSecondApprove |
setPropsIfNotExist |
— |
libraryParams |
Флаг, отвечающий за подтверждения второй рукой продолжения работы установки после preCheck |
customDevLogic |
setPropsIfNotExist |
— |
libraryParams |
Параметр для особенности dev сборок |
checkDeploymentStatusTimeLimit |
setPropsIfNotExist |
— |
libraryParams |
Время, через которое будет произведена проверка готовности Deployment-а (в секундах) |
needCheckStatusOfDeployments |
setPropsIfNotExist |
— |
libraryParams |
Флаг проверки работы deployment |
needInputOrchestratorLogin |
setPropsIfNotExist |
— |
libraryParams |
Флаг, отвечающий за авторизацию по логину/паролю (вводится во время работы pipeline динамически, маскируется) |
devMode |
setPropsIfNotExist |
— |
libraryParams |
Флаг для канарейки. при False автоматически ставится 100 на новой версии |
needLeaveCommentInJira |
setPropsIfNotExist |
— |
libraryParams |
Флаг, регулирующий отбивку в Jira по результатам сборки |
needMoveTicketInJira |
setPropsIfNotExist |
— |
libraryParams |
Флаг, регулирующий движение тикетов Jira |
needCheckTemplateParams |
setPropsIfNotExist |
— |
libraryParams |
Флаг проверки template |
orchestratorToken |
setPropsIfNotExist |
— |
libraryParams |
Авторизация по токену |
orchestratorCred |
setPropsIfNotExist |
— |
libraryParams |
ID CredentialsId для доступа к системе оркестрации приложений |
needToUpdateIstioConfigs |
setPropsIfNotExist |
— |
libraryParams |
Если вам необходимо обновить Istio конфигурации в проекте, в котором они уже есть. Опция необходима в связи с ограничениями на перезаписывание Istio конфигураций |
needScaleNewPods |
setPropsIfNotExist |
false |
libraryParams |
Флаг отвечающий за увеличение количества подов для новой версии приложения. Если задано значение |
PULL_REQUEST_FROM_BRANCH |
optionalParam |
— |
jenkinsParams |
Ветка с какой ветке идет ПР |
PULL_REQUEST_TO_BRANCH |
optionalParam |
— |
jenkinsParams |
Ветка к какой ветке идет ПР |
PULL_REQUEST_URL |
optionalParam |
— |
jenkinsParams |
Ссылка на ПР |
PULL_REQUEST_ID |
optionalParam |
— |
jenkinsParams |
ID ПР |
dockerRegistryURL |
optionalParam |
— |
libraryParams |
Ссылка на registry |
dockerRegistryCI |
optionalParam |
— |
jenkinsParams |
Достается из xml |
dockerRegistryRepo |
optionalParam |
— |
libraryParams |
Репозиторий registry |
dockerRegistryProject |
optionalParam |
— |
jenkinsParams |
Берется из CIXml |
dynamicOrchestratorTokenPrefix |
optionalParam |
— |
libraryParams |
Префикс динамического токена |
nexusLink |
optionalParam |
— |
jenkinsParams |
URL для скачивания дистрибутива |
gavParam |
optionalParam |
— |
jenkinsParams |
GAV параметр |
needServerSideForceConflicts |
optionalParam |
— |
jenkinsParams |
Нужно ли при apply конфигураций добавлять флаги --server-side=true и --force-conflicts. Только при использовании клиента kubectl |
federalName |
optionalParam |
— |
jenkinsParams |
Имя федерации для канареечной установки |
needValidateYaml |
optionalParam |
— |
libraryParams |
Флаг включения валидации конфигураций |
needLocalTemplateProcessing |
setPropsIfNotExist |
false |
libraryParams |
Флаг для подстановки стендозависимых параметров в шаблоны локально с помощью клиента оркестровщика |
needPushConfigsToRepo |
setPropsIfNotExist |
— |
libraryParams |
параметр запуска шага загрузки успешно установленных template в Bitbucket |
needCheckSecurity |
setPropsIfNotExist |
— |
jenkinsParams |
Нужна ли проверка конфигураций на безопасность |
timeoutWaitSynaiScan |
setPropsIfNotExist |
— |
libraryParams |
Время ожидания проверки Synai (в минутах) |
needAdditionalConfirmAfterInstall |
setPropsIfNotExist |
false |
projectConfig |
Флаг включения дополнительного подтверждения после установки конфигураций в проект |
additionalConfirmation |
optionalParam |
— |
projectConfig |
Map c дополнительными сообщениями, которые нужно добавить к подтверждающему input |
distrNameRegexForCanary |
optionalParam |
— |
libraryParams |
Регулярное выражение для получения имени дистрибутива из конфигураций канареечного развертывания |
orchestratorResourceNameRegex |
optionalParam |
— |
libraryParams |
Регулярное выражение для определения является ли заданная строка именем конфигурации |
needIgnoreSynaiError |
setPropsIfNotExist |
true |
projectConfig |
Флаг, отвечающий за обработку ошибок от SynAI. Если флаг имеет значение |
needSecondApproveDeleteConfigs |
setPropsIfNotExist |
false |
projectConfig |
Флаг, отвечающий за подтверждения второй рукой удаления конфигураций |
needInstallSelectedCharts |
setPropsIfNotExist |
false |
libraryParams |
Флаг, отвечающий за включение возможности выбора Helm Charts, которые необходимо установить |
needDownOldPods |
setPropsIfNotExist |
false |
libraryParams |
Флаг, отвечающий за обнуление Pods устаревших версий приложения |
helmReleaseName |
setPropsIfNotExist |
— |
libraryParams |
Имя Helm Release, которое будет подставляться в Helm Charts в .Release.Name |
Минимально необходимые права для работы pipeline в системе оркестрации приложений:
rules:
# oc login
- verbs:
- get
apiGroups:
- ''
- project.openshift.io
resources:
- namespaces
- projects
# oc process файл-темплейт
- verbs:
- create
apiGroups:
- template.openshift.io
resources:
- processedtemplates
# oc get тип_ресурсов (кроме secrets)
- verbs:
- get
- list
apiGroups:
- apps
- apps.openshift.io
- networking.istio.io
- ''
resources:
- deployments
- deploymentconfigs
- virtualservices
- destinationrules
- services
- configmaps
#- secrets
# oc apply тип_ресурсов (кроме secrets)
- verbs:
- create
- patch
apiGroups:
- apps
- networking.istio.io
- ''
resources:
- deployments
- virtualservices
- destinationrules
- services
- configmaps
#- secrets
# oc scale deploy
- verbs:
- get
- update
- patch
apiGroups:
- apps
resources:
- deployments/scale
# oc delete тип_ресурсов(кроме secrets)
- verbs:
- delete
apiGroups:
- ''
- apps.openshift.io
- apps
- networking.istio.io
- autoscaling
- route.openshift.io
resources:
- configmaps
- services
#- secrets
- deploymentconfigs
- deployments
- replicasets
- destinationrules
- envoyfilters
- gateways
- serviceentries
- sidecars
- virtualservices
- horizontalpodautoscalers
- routes
Используемые шаги:
Все указанные ниже исполняемые скрипты в формате .groovy расположены в подразделе «Шаги» раздела «Дополнительная
документация» документа «Руководство прикладного разработчика».
Название stage |
Используемый шаг |
|---|---|
Загрузка инструментов для выполнения pipeline |
|
Валидация параметров |
|
Подготовка к сборке |
|
Скачивание репозиториев SCM |
|
Скачивание дистрибутива |
|
Применяем конфигурации |
|
Всегда выполняются в конце |
UploadRollbackConfigs |