Развертывание с использованием Platform V DevOps Tools#
Введение#
Данное руководство предназначено для описания установки SOWA в DropApp при помощи инструментов Platform V DevOps Tools (DOT).
В руководстве даны пояснения как сконфигурировать созданную Jenkins job, для установки SOWA в среду контейнеризации DropApp (Kubernetes).
Далее указана минимальная часть конфигурации необходимая для установки SOWA.
Более подробная информация по использованию компонента Deploy tools (CDJE) продукта Platform V DevOps Tools (DOT), представлена в документации на одноименный компонент.
Подготовка конфигурации CDJE#
Для подготовки конфигурации CDJE, необходимо пройти в репозиторий common, созданный в результате развертывания Platform V DevOps Tools (DOT), и сконфигурировать следующие файлы:
subsystems.json - параметры NEXUS репозитория с настройками артефакта (конфигурацией компонента). Пример представлен ниже:
{
// Секция по умолчанию. При миграции конфигурации из дистрибутива DevOpsTools перезаписывается.
"__default": {
"classifier": "distrib",
"packaging": "zip",
"groupId": "Nexus_GROUP",
"strict": "true",
"limit": 101,
"deployType": "manual"
},
// Блок настроек приложения. Настройки в этом блоке будут перекрывать соответствующие из блока __default
"SOWA": {
// Код компонента
"fpi_name": "sowa",
// GroupID загруженного в Nexus пакета
"groupId": "nexus.group.id.sowa",
// ArtifactId архива с конфигурационной частью
"artifactId": "sowa-cfg",
// Фильтр версий артефакта конфигурации, которые будут отображаться в UI CDJE
"versionFilter": "1.0",
// Режим миграции настроек ФП (true - будут мигрировать только файлы, начинающиеся на <fpi_name>, false - все конфигурационные файлы).
"strict": "false",
// Указывается тип приложения для фильтрации в Jenkins job. Для выбора нескольких вариантов необходимо указать в настройках job: FP_TYPE_FILTER=bts, bfs
"fpType": "fp",
// Тип автоматического развертывания (parallel - параллельный, consistently - последовательный)
"deployType": "consistently"
}
}
multiClusters.json - настройка кластеров DropApp, в которые будет производиться установка компонента. Пример представлен ниже:
{
"datacenters": {
// Наименование кластера, которое будет отображаться в UI Jenkins job
"dev-02": {
// api кластера DropApp
"openshiftCluster": "https://DropApp.my.company.ru:6443",
// Наименование проекта(project)
"openshiftProjectName": "myproject",
// id credential в jenkins содержащий токен доступа к проекту в DropApp
"openshiftSATokenCred": "openshift_credential",
// Cуффикс домена для сервисов кластера
"openshiftAppsDomain": "apps.DropApp.mycompany.ru",
// Cсылка на кластер для формирования корректной ссылки на проект в описании job для развертывания
"openshiftWebConsole": "https://console-DropApp-console.mycompany.ru/k8s/cluster/projects"
}
}
}
environment.json - основной конфигурационный файл. Пример представлен ниже:
{
// Секция по умолчанию. При миграции конфигурации из дистрибутива DevOpsTools перезаписывается.
"!__default": {
// Стандартные параметры для джобы
"components": {
"PIPELINE_EXTENSIONS": {
"stages": {
"MIGRATION": {
"script": "migrateScm.groovy"
}
},
"params": {
"branchPattern": "release_extensions/",
"versionConfParamName": "pipelineExtensionVersion"
}
}
},
"migrateConfigurationWithPipeline": false,
// Сценарии разверытвания для Depoly Job. При помощи данной настройки убираются неиспользуемые или включаются необходимые опции job (подробнее см документацию DOT).
"playbooks_fpi": {
// Миграция конфигурационных файлов из дистрибутива в созданный репозиторий стендозависимых параметров
"MIGRATION_FP_CONF": {
"id": 2
},
// Валидация конфигурационных файлов, нужен при создании структуры БД
"FP_CONF_CHECK": {
"id": 3
},
// Деплой приложения в k8s с помощью Helm
"HELM_DEPLOY": {
"id": 97
},
"HELM_UNDEPLOY": {
"id": 98
}
}
},
// Блок конфигурации приложения
"sowa": {
// Перечислены ID credentials созданных в Jenkins CD
"credentials": {
"SshKeyCreds": "tuz_for_SSH",
"UserPassCreds": "tuz_for_Nexus",
"UserPassCredsNexus": "tuz_for_Nexus"
},
"installer": {
// Компоненты DOT-инфраструктуры, необходимые для работы джобы, необходимо указать доступные версии
"common": {
"groupId": "groupId.CI0000_run4c",
"artifactId": "AS_EFS_Installer.Common",
"version": "D-01.000.00-000",
"classifier": "distrib",
"packaging": "zip"
},
"migration": {
"groupId": "groupId.CI0000_run4c",
"artifactId": "AS_EFS_Installer.Migration",
"version": "D-01.000.00-000",
"classifier": "distrib",
"packaging": "zip"
}
},
// Утилиты необходимые для работы джобы, так же нужно указать доступные в Jenkins версии
"initToolList": {
"mvn_tool": {
"tool": "Maven 3.9.6",
"subPath": "/bin",
"homeDir": "MAVEN_HOME"
},
"yq_tool": {
"tool": "yq-4.20.2"
},
"jq": {
"tool": "jq-1.6"
},
"kubectl_tool": {
"tool": "kubectl_v1.22"
},
"groovyToolName": {
"tool": "groovy-4.0",
"subPath": "/bin"
},
"helm": {
"tool": "helm-v3.8.0"
}
},
// Блок настройки "SEGMENT" (задается при создании джоб DOT)
"sowa-segment": {
// Для репозиториев DOT (common, pipeline)
"gitBaseUrl": "https://<адрес-git>/<git>-cd",
"nexusMavenMetadataAuth": "true",
// Для загруженных артефактов приложения
"nexus_host": "https://<адрес-nexus>/<nexus>-cd",
"nexusPathToArtifact": "repository",
"nexus_repo": "nexus_repo",
// Для поиска зависиимостей maven
"mavenPluginsUrls": [
"https://<адрес-nexus>/<nexus>-ci/repository/maven-public",
"https://<адрес-nexus>/<nexus>-ci/repository/maven-central"
],
"useMavenForDownload": "true",
"nexus.repo.url": "https://<адрес-nexus>/<nexus>-cd/repository/"
},
"idParentStand": "null",
"openshiftRegistry": "<адрес-registry>",
"openshiftMultiClusters": "true",
"openshiftMultiClustersNames": [
// Название блока кластеров что указано в файле "subsystems.json"
"dev-02"
],
"openShiftNewPasswords": "true",
"openshiftWaitForDeploySeconds": 240,
"openshiftWaitForDeployPollInterval": 10,
"openShiftPrecheck": "warning",
"openshiftCheckConfNames": "warning"
}
}
Deploy приложения#
После настройки конфигурационных файлов subsystems.json, multiClusters.json и environment.json необходимо выполнить шаги для установки приложения в кластер:
Выполнить миграцию стендозависимых параметров из дистрибутива в репозиторий со стендозависимыми параметрами. Для этого нужно выполнить
Deploy jobс опцией MIGRATION_FP_CONF.Выполнить деплой приложения в
Kubernetes, запустивDeploy jobс параметром HELM_DEPLOY.
Обновление приложения#
Для обновления приложения необходимо повторно запустить Deploy job с параметром HELM_DEPLOY, выбрав необходимую версию дистрибутива.
Откат на предыдущую версию#
Откат компонента на предыдущую версию выполняется посредством развертывания артефактов предыдущей версии с предварительным удалением текущей версии.
Запускаем
Deploy jobс опцией HELM_UNDEPLOY для удаленияЗатем запускаем
Deploy jobс параметром HELM_DEPLOY, выбрав необходимую версию дистрибутива.
Удаление ресурсов из namespace Kubernetes#
Удаление ресурсов из Kubernetes выполняется сценарием Deploy job с опцией HELM_UNDEPLOY.
Удаляются только объекты, подпадающие под фильтр, настроенный по полю объектов label.
Поле „label“ должно содержать параметры SUBSYSTEM и distribReleaseVersion, значения которых соответствуют значениям соответствующих параметров запуска Deploy job.
Предусловие#
Перед выполнением удаления рекомендуется проверить:
в Jenkins доступен Tool с kubectl;
наличие настройки имени tool в параметре kubectlToolName в environment.json;
наличие настройки имени tool в параметре helm в environment.json;
наличие настройки имени tool в параметре jqToolName в environment.json;
(опционально) для возможности удалять ресурсы, используя фильтр jq, должен быть доступен Tool с jq.