Руководство по системному администрированию#
В данном документе описаны сценарии администрирования программного компонента Deploy tools
(CDJE).
Сценарии администрирования#
Термины и определения#
Термин, сокращение |
Определение, расшифровка |
|---|---|
Dev |
Сокр. от англ. Development (разработка) |
DevOps |
Слияние англ. слов Development (разработка) и Operations (ИТ-операции) |
DPM |
DevOps Pipeline Management (управление конвейером DevOps) |
DevOps |
Слияние англ. слов Development (разработка) и Operations (ИТ-операции) |
DPM |
DevOps Pipeline Management (управление конвейером DevOps) |
JDBC |
Java Data Base Connectivity (стандарт взаимодействия Java-приложений с различными СУБД) |
Jenkins |
ПО для непрерывной интеграции |
Nexus |
Хранилище артефактов Nexus |
Kubernetes/OpenShift |
Платформа управления контейнерами корпоративного уровня |
UI |
User Interface |
АФТ |
Автоматизированное функциональное тестирование |
БД |
База данных |
ПРОМ |
Промышленная эксплуатация (PROD) |
СУБД |
Система управления базами данных |
ТУЗ |
Техническая учетная запись |
Для работы с pipeline существует два основных конфигурационных файла, взаимодействуя с которыми, администратор производит точечную настройку необходимых функциональных возможностей, а также производит управление стендозависимыми параметрами. Данные файлы располагаются в репозитории common и имеют названия environment.json и subsystems.json.
После обновления pipeline (см. Руководство по установке → раздел Обновление —→ подпункт Проведение последовательной миграции pipeline) через Service job в репозитории common создается/обновляется основной конфигурационный файл для pipeline – environment.json. Данный файл дает возможность управлять общими для всех развертываемых функциональных приложений стендозависимыми параметрами, такими как: адреса Nexus, credentials, используемые при развертывании; режимы развертывания, а также дополнительные функциональные возможности, выполненные в виде включаемых/отключаемых параметров. Все возможные параметры в файле environment.json представлены в следующем блоке кода:
Работа с файлом environment.json#
Все возможные параметры в файле environment.json представлены в следующем блоке кода:
{
"!__default":
{ // Блок с настройками по умолчанию. В ЭТОМ БЛОКЕ НИЧЕГО ПРАВИТЬ НЕ НУЖНО -- ОН ПОСТОЯННО ОБНОВЛЯЕТСЯ И ПЕРЕЗАПИСЫВАЕТСЯ
"doNotCheckInventoryOnNull": "false", // Флаг включения/выключения пропуска проверки inventory на заполненность (при true - inventory может быть пустым, при false будет падать с ошибкой, если не заполнен)
"openshiftDeploySafeMode": "false", // Флаг провекри иммутабельности критичных полей ОpenЫhift-конфигураций istio
"openShiftPrecheck": "warning", // Флаг включения/выключения валидации конфигураций дистрибутива openshift; fail/warning/off-режимы
"openShiftCheckConfNames": "off", // Флаг включения/выключения валидации именов .conf-файлов; fail/warning/off-режимы
"bluegreen":"false", // Флаг использования blue-green развертывания, по умолчанию false, если true - в Jenkins job появится чекбокс USE_BLUEGREEN
"approveGreen": "false", // Флаг подтверждения перед запуском green, по умолчанию false, если true, то после завершения установки на blue-хостах и перед запуском на green будет выведено подтверждение
"openshiftDeploySafeMode": "false", // Флаг проверки иммутабельности критичных полей openshift-конфигов istio
"openShiftPrecheck": "warning", // Флаг включения/выключения валидации конфигураций дистрибутива openshift; fail/warning/off-режимы
"openShiftCheckConfNames": "off", // Флаг включения/выключения валидации имен onf-файлов; fail/warning/off-режимы
"bluegreen":"false", // Флаг использования blue-green развертывания, по умолчанию false, если true - в UI Jenkins job появится опция USE_BLUEGREEN
"approveGreen": "false", // Флаг подтверждения перед запуском green, по умолчанию false, если true, то после завершения установки на blue-хостах и перед запуском на green будет выведено подтверждение
"openShiftNewPasswords": "false", // Переключатель(true/false) механизма разделения паролей OpenShift от сферы. При активации этого флага,
// пароль для расшифровки _passwords.conf будет браться из credentials.openshiftOpsPasswordsCred (ниже по списку)"
"openshiftMultiClusters": "false", // Переключатель(true/false) механизма для работы с несколькими кластерами. При активации часть параметров OpenShift будет браться из файла multiClusters.json"
"openshiftNginx": "false", // Переключатель(true/false) механизма балансировки трафика из nginxIAG в OpenShift"
"openshiftSecretsFilters": "false", // Переключатель(true/false) механизма разукрупнения секретов – установка только нужных секретов, описанных в distrib.yml"
"credentials": {
"openshiftOpsPasswordsCred": "vault_cred_openshift_ops", // "<пароль для расшифрования файла _passwords.conf aes-256-cbc"
"SshKeyCreds" : "_template_", // Блок с credentials: Credential ID для доступа в репозитории Git с использованием ssh-ключей (ssh ключ)
"UserPassCreds" : "_template_", // Credential ID (логин/пароль) для доступа в хранилище Nexus с ипользованием base аутентификации
"shiftDeployJobCred" : "user_pass_tech", // Credential ID (логин/пароль) для Jenkins job развертывания приложения в контейнере
"shiftDeployJobToken" : "user_pass_tech", // Credential ID
для Jenkins job развертывания приложения в контейнере (Authentication Token)
"testJobCred" : "85618fbf-6aac-4c69-be1d-d1fd1895d189", // Credential ID (логин/пароль) для АФТ Jenkins job
"testJobToken" : "token_tech", // Credential ID для Jenkins job АФТ (Authentication Token)
"ansible_vault_id" : "e8cfbea7-f1dd-4e3e-85db-0e7caa33b449", // Credential ID для файла ansible-vault (secret.yml)
"ansible_vault_id" : "dQw4w9WgXcQ", // Credential ID для файла ansible-vault (secret_ops.yml)
"jenkinsQAkitCred" : "85618fbf-6aac-4c69-be1d-d1fd1895d189", // Credential ID (логин/пароль) для Jenkins job закрытия тикета на КИТ
"jenkinsToken" : "token_tech", // Credential ID для Pipeline AD (Authentication Token) Jenkins job
"jenkinsCred" : "tech_creds", // Credential ID (логин/пароль) для Pipeline AD Jenkins job
"oggSecretVaultCred" : "vault_ogg_secret" // Credential ID
для Jenkins job Pipeline OGG (токен для доступа к операции управления процессами OGG)
},
"cloneRepoViaBash": "false", // false - выгрузка файлов из git репозиторий через плагин, true - выкачка файлов из Bitbucket через комманду
"enableFastGit": "false", // Если значение true, включается shallow clone и прочие логики на ускорение грузки файлов из Bitbucket
"propsPlaceholdersCompatability": "true", // false - выключение преобразования и раскрытия легаси плейсхолдеров ${} в процессе шаблонизации
"efsReleaseDistribRepo" : "ssh://git@<repository_address>", // SSH GIT путь до репозитория с белым спиской версий допущеных к установке. Если не задано, то функционал белых списков выключен
"efsReleaseDistribBranch" : "master", // Ветка этого репозитория. Eсли не задано, но задано efsReleaseDistribRepo , то по умолчанию считать "master"
"efsReleaseDistribFile" : "psi.yml", // Файл в этои репозитории. Если не задано, но задано efsReleaseDistribRepo, будет вызвана ошибка. Согласованная структура файла: <...>/efs_releases/browse/psi.yaml
"acl_common" : [], // Список пользователей, для доступа к редактированию ропозиториев Common через UI-admin. Пустое значение указывает на запрет всем
"alpha": { // Блок значений по-умолчанию для домена А (домен указывается в common.conf.yml в параметре domain либо переопределяется в jenkins.env.SEGMENT)
"nexus_host": "<nexus_host_address>" // Адрес хранилища nexus для сегмента сети A
},
"sigma": {
"nexus_host": "<nexus_host_address>",
"serviceRegistry": "false" // Отключает функцию выгрузки в реестр сервисов, по умолчанию опция включена
},
"psidss": {
"nexus_host": "<nexus_host_address>",
"gitBaseUrl": "http://<psidss-bitbucket_address>" // Адрес Git для сети psidss
},
"playbooks_default":{
"default": ["WAS_SMOKE"], // Списки сценариев развертывания по умолчанию
"marker": ["WAS_SMOKE"] // Списки сценариев развертывания по умолчанию с созданием флагов
},
"atVersionFlags":{ // Настройки получения версии дистрибутива АФТ из флагов.
"parentEnv": "dev", // Стенд, во флагах которого будет осуществлен поиск версии дистрибутива АФТ
"api": ["smoke", "smart_regress", "nf"], // Префикс флагов, в которых будет осуществлен поиск версии API-тестов
"ui": ["smoke_ui"] // Префикс флагов, в которых будет осуществлен поиск версии UI-тестов
},
"qgFlags": { // Настройки флагов QG
"bvt": { // Префикс имени флага, к нему будет добавлено 'ok' или 'err'
"checkStages": ["WAS_SMOKE"], // Наименование стейжа (либо списка стейжей), который должен завершиться успешно для размещения флага 'ok'
"stand": "bar" // Стенд/перечень стендов, для которых будет установлен данный QG-флаг
},
"smoke": {
"checkStages": ["AFT_RUN_SMOKE"],
"stand": ["ift", "psi"]
},
"smoke_ui": {
"checkStages": ["AFT_RUN_UI"],
"stand": ["ift", "psi"]
},
"smart_regress": {
"checkStages": ["AFT_RUN_SMOKE"],
"stand": ["msv", "ift", "psi"]
},
"nf": {
"checkStages": ["AFT_RUN_SMOKE"],
"stand": ["ift", "psi"]
}
},
"manual_qa": { // Название флагов для Jenkins job Pipeline Manual QA (данные флаги доступны только на средах ИФТ и ПСИ)
"ift": "qa",
"psi": "uat"
},
"ULA": { // Реквизиты ULA
"groupId": "Nexus_PROD",
"artifactId": "CI01120794_ULA",
"version": "1.*",
"classifier": "distrib",
"packaging": "jar",
"ula_url": "http://<...>/api/result/zip"
},
"servicePeriods": { // Технологические окна (для работы Pipeline Scheduler)
"Пн": ["00:00-07:00", "12:30-14:00"],
"Вт": ["00:00-07:00", "12:30-14:00", "17:00-19:00"],
"Ср": ["00:00-07:00", "17:00-19:00"],
"Чт": ["12:30-14:00", "17:00-19:00"],
"Сб": ["00:00-07:00"],
"Вс": ["12:30-14:00"],
},
"nginxParallel": "false", // Запуск ролей развертывания на NGINX в параллель.
"importsParallel": "true", // Запуск импортов параллельно (true) либо последовательно (false).
"schedullerArtifatCheckLimit": 5, // Кол-во версий дистрибутива приложения, которые будут проверены для установки в Pipeline Scheduler
"emailList": [ "<...>" ], // Адреса рассылок отчетов работы Pipeline Scheduler
"nexus_host" : "<host_address>", // Адрес хранилища Nexus по умолчанию
"nexus_repo" : "Nexus_PROD", // Репозиторий в хранилище Nexus
"nexus_timeout" : 60, // Таймаут запросов в Nexus , сек
"playbook_ssd" : "playbook_fpi.yml", // Название файла-сценария для скриптов
"playbook_ssd_security": "playbook_fpi_security.yml", // Название файла-сценария для скриптов Security job
"securityInventory" : "UTIL_SECURE", // Название inventory для security pipeline
"jdk" : "JDK_1.7_45_Linux", // JDK на Jenkins slave (общая)
"jdkAt" : "jdk8", // JDK на Jenkins slave для АФТ
"mvnAt" : "Maven 3.3.9", // Maven на Jenkins slave для АФТ
"iag" : "true", // Если "true", то в меню pipeline появляется список выбора репозитория с конфигурациями "current", "last", "previous"
"jenkinsQAkit" : "<Jenkins_job_url_address>", // URL Jenkins job закрытия тикета на КИТ
"testsJob" : "http://localhost/atJob", // URL АФТ Jenkins job
"testsJobMvn" : "http://localhost/atJobMvn", // URL АФТ 2.0 Jenkins job (maven)
"testsJobSpo" : "http://localhost/atJobSPO", // URL АФТ Jenkins job для SPO job (EDOIN-2521)
"maxLogSize" : 500, // Максимальный размер лог-файла (Mb). В случае превышения, работа Pipeline будет прервана
"addMarker" : "false", // Включение/выключение добавления маркера в Nexus
"jobLogCopy" : "false", // Копирование каталога ANSIBLE_LOG на сервер логирования
"ticketID" : "false", // Если "true", то в параметрах Jenkins jon будет TICKET_ID (нужен для полигона КИТ)
"idParentStand" : "null", // Стенд, для которого требуется маркер успешного прохождения приложением (если null, то отключено).
// Можно указать только префикс -- тогда будет осуществлен поиск маркера <постфикс>*.ok, либо указать название флага полностью (bvr_ok.flag)
"ignoreErors" : "false", // Если "true", то будут игнорироваться ошибки ansible-ролей
"dpLibUrl" : "ssh://git@<library_rep_address>", // Для обновления DataPower. Путь к репозиторию библиотеки, представляемой отделом шлюзовых решений
"dpAnsibleGitUrl" : "ssh://git@<...>/ansible_dp_roles.git", // Для обновления DataPower. Путь к репозиторию роли Ansible, представляемой отделом шлюзовых решений
"dpVarsFiles" : "vars_dp.yml vars_con.yml secret.yml", // Для обновления DataPower. Список конфигурационных файлов для настройки процесса обновления IBM Data Power
"use_lieberman" : "false", // Для обновления DataPower. Переключение режимов использования источников шифрованных учетных данных Lieberman/ansible secret (по умолчанию secret.yml)
"nexusMavenMetadataAuth": "false", // Отключение авторизации для maven-metadata.xml
"schedullerArtifatCheckLimit": 10, // Лимит на поиск удачных версий в планировщике
"bwListRepoUrl": "ssh://git@<rep_address_blw_lists>", // Репозиторий с глобальными черно/белыми списками
"bwListRepoBranch" : "develop", // Ветка из которой должны браться глобальные черные/белые списки
"bwCheckMode" : "off", // Режим работы глобальных ч/б списков, подробнее о них можно прочитать по ссылке (см. ссылку в конце страницы)
"useMavenForDownload": "false", // Переключение выгрузки инсталятора на maven. Если выключен - будет выгружаться по rest-запросу. Выгрузка зависимых дистрибутивов (например, разделение common)
// возможно лишь с включением данного параметра
"nexus.plugins.repo.url": "<repository_mvn_plugins_address>", // Репозиторий в котором хранятся плагины maven (используется только если useMavenForDownload = "true")
"nexus.repo.url": "<...>/repositories/Nexus_PROD/", // Репозиторий в котором хранятся дистрибутивы (используется только если useMavenForDownload = "true")
"installerOutput": "./", // Локальный путь для распаковки установщика (используется только если useMavenForDownload = "true")
"distrOutput": "./ansible/tmp/nexus", // Локальный путь для распаковки дистрибутива (используется только если useMavenForDownload = "true")
"platform": { // Соотвествие версии платформы версиям "curr", "last", "prev"
"curr": "R18.3",
"last": "R18.5",
"prev": ""
},
"smsEnable": "true", // Если данный параметр включен, то происходит отправка СМС-уведомления ПОСЛЕ сборки
"smsPlaybooks": ["NGINX_DEPLOY", "WAS_FPI_DEPLOY"], // Список сценариев (playbook), по которым требуется отправка СМС уведомлений
"smsInitReport" : "true", // Если данный параметр включен, то происходит отправка СМС-уведомления ДО сборки
"platformVersionCheckMode": "false", // Если данный параметр включен, то в случае несоответсвия версии платформы из файла ci00380023_efs_releases с той, которая выбрана в Jenkins job,
// развертывание будет прервано. "warningCheck" -- только warning, "failedCheck" -- failed. Может принимать значения ['false', 'warningCheck', 'failedCheck']
"ogg_block_names": [ // Список блоков для Pipeline OGG Jenkins jobs
"arch1", // Первичная миграция конфигурационных файлов для репозитория "ci00380023_efs_<channel>_golden_gate_<envir>.conf"
"b1", // производится для всех блоков из этого списка
"b2",
"si1"
],
"jaas_keys_overwritre": "true", // Разрешить запись JAAS в файл паролей в репозиторий common.
// При отсутствии переменной или наличии переменной со значением "false" сценарий завершает работу.
"efsReleaseRepo": "https://<...>", // Репозиторий с соответствиями версий дистрибутивов приложения с версиями платформы
"efsReleaseBranch": "master", // Ветка репозитория с соответствиями версий дистрибутивов приложения с версиями платформы
"preventRemoteJobStart": "false" // Запрет на удаленный вызов Deploy job, минуя пользовательский интерфейс Jenkins (через REST API Jenkins)
"remoteJobStartTimeout": 5, // Минимальное время необходимое для запуска Jenkins job из интерфейса Jenkins
"envFastSecureRole": "false", // Параметр для автивации режима быстрого развертывания security job
"installer": { // Реквизиты установщика приложения (Installer) в хранилище Nexus
"jaas_keys_overwritre": "true", // Разрешить запись JAAS в файл паролей в репозиторий common.
// При отсутствии переменной или наличии переменной со значением "false" сценарий (playbook) завершает работу
"efsReleaseRepo": "https://<git-repository>/projects/CI00428440/repos/ci00380023_efs_releases", // Репозиторий с соответствиями версий дистрибутивов приложения с версиями платформы
"efsReleaseBranch": "master", // Ветка репозитория с соответствиями версий дистрибутивов приложения с версиями платформы
"preventRemoteJobStart": "false" // Запрет на удаленный вызов Deploy job, минуя пользовательский интерфейс Jenkins (через REST API Jenkins)
"remoteJobStartTimeout": 5, // Минимальное время необходимое для запуска Jenkins job из интерфейса Jenkins
"envFastSecureRole": "false", // Параметр для активации режима быстрого развертывания Security job
"installer": { // Реквизиты приложения Installer в хранилище Nexus
"base": {
"groupId": "Nexus_PROD",
"artifactId": "CI00000002_AS_EFS_Installer.Base",
"version": "D-01.000.00-*",
"classifier": "distrib",
"packaging": "zip"
},
"common": {
"jaas_keys_overwritre": "true", // Разрешить запись JAAS в файл паролей в репозиторий common
// При отсутствии переменной или наличии переменной со значением "false" сценарий (playbook) завершает работу
"efsReleaseRepo": "https://<git-repository>/projects/CI00428440/repos/ci00380023_efs_releases", // Репозиторий с соответствиями версий дистрибутивов приложения с версиями платформы
"efsReleaseBranch": "master", // Ветка репозитория с соответствиями версий дистрибутивов приложения с версиями платформы
"preventRemoteJobStart": "false" // Запрет на удаленный вызов Deploy job, минуя пользовательский интерфейс Jenkins (через REST API Jenkins)
"remoteJobStartTimeout": 5, // Минимальное время необходимое для запуска Jenkins job из интерфейса Jenkins
"envFastSecureRole": "false", // Параметр для автивации режима быстрого развертывания Security job
"installer": { // Реквизиты приложения Installer в хранилище Nexus
"common":
"groupId": "Nexus_PROD",
"artifactId": "CI00000001_AS_EFS_Installer.Common",
"version": "D-01.001.00-*",
"classifier": "distrib",
"packaging": "zip"
},
"migration": {
"groupId": "Nexus_PROD",
"artifactId": "CI00000006_AS_EFS_Installer.Migration",
"version": "D-01.001.00-*",
"classifier": "distrib",
"packaging": "zip"
},
"playbooks_fpi": { // Сценарии разверытвания для Pipeline AutoDeploy
// id - порядковый номер в списке playbooks в меню pipeline
"DB_UPDATE" : {"id": 1, "description": "Запуск liquibase скриптов"},
"NGINX_DEPLOY" : {"id": 2, "description": "Установка PL-компонентов приложения на группы серверов nginx/nginx_ui"},
"NGINX_II_DEPLOY" : {"id": 3, "description": "Установка PL-компонентов приложения на группу серверов nginx_ii"},
"NGINX_MM_DEPLOY" : {"id": 4, "description": "Установка PL-компонентов приложения на группу серверов nginx_mm"},
"WMQ_UPDATE_FP" : {"id": 5, "description": "Создание/обновление объектов WebSphere MQ"},
"WAS_FPI_XS_GRID_DEPLOY" : {"id": 6, "description": "Установка XS grid на WebSphere XS"},
"WAS_STOP_CLUSTER" : {"id": 7, "description": "Установка кластера WebSphere AS"},
"WAS_CLEAR_TEMP" : {"id": 8, "description": "Удаление временных файлов WebSphere AS"},
"WAS_FPI_COMMON" : {"id": 9, "description": "Настройка общих параметров WebSphere AS"},
"WAS_FPI_INSTALL" : {"id": 10, "description": "Настройка ресурсов приложения на WebSphere AS"},
"WAS_FPI_DEPLOY" : {"id": 11, "description": "Установка BH-компонентов приложения на WebSphere AS"},
"WAS_RESTART_NODES" : {"id": 12, "description": "Перезапуск серверов nodeagent WebSphere AS"},
"WAS_START_CLUSTER" : {"id": 13, "description": "Запуск кластера WebSphere AS"},
"WAS_SMOKE" : {"id": 14, "description": "Запуск smoke тестов"},
"WAS_RUN_AUTOTEST" : {"id": 15, "description": "Запуск АФТ(smoke)"},
"WAS_RUN_UI_AUTOTEST" : {"id": 21, "description": "Запуск АФТ(ui)"},
"VERSION_SNAPSHOT_SEARCH" : {"id": 16, "description": "Проверка наличия SNAPSHOT модулей в дистрибутиве приложения"},
"MIGRATION_FP_CONF" : {"id": 17, "description": "Миграция конфигурационных файлов приложения"},
"MIGRATION_AFT_CONF" : {"id": 18, "description": "Миграция тестовых данных приложения и настроек АФТ"},
"UPDATE_DP" : {"id": 19, "description": "Обновление DataPower"},
"DEPLOY_TO_OPENSHIFT" : {"id": 20, "description": "Развертывание приложения в контейнере"},
"OPENSHIFT_INGRESS_EGRESS_DEPLOY" : {"id": 21, "description": "Развертывание ingress/egress в OpenShift"},
"OPENSHIFT_EXTRACT_DUMP" : {"id": 22, "description": "Выгрузка дампов из Openshift POD's"},
"OPENSHIFT_INGRESS_DEPLOYMENT" : {"id": 23, "description": "Развертывание ingress Deployment в OpenShift"},
"OPENSHIFT_INGRESS_SERVICE" : {"id": 24, "description": "Развертывание ingress Service в OpenShift"},
"OPENSHIFT_INGRESS_GATEWAY" : {"id": 25, "description": "Развертывание ingress Gateway в OpenShift"},
"OPENSHIFT_INGRESS_ENVOYFILTER" : {"id": 26, "description": "Развертывание ingress EnvoyFilter в OpenShift"},
"OPENSHIFT_INGRESS_VIRTUALSERVICE" : {"id": 27, "description": "Развертывание ingress VirtualService в OpenShift"},
"OPENSHIFT_INGRESS_ROUTE" : {"id": 28, "description": "Развертывание ingress Route в OpenShift"},
"OPENSHIFT_INGRESS_DSR" : {"id": 29, "description": "Развертывание ingress DestinationRule в OpenShift"},
"OPENSHIFT_EGRESS_DEPLOYMENT" : {"id": 30, "description": "Развертывание egress Deployment в OpenShift"},
"OPENSHIFT_EGRESS_SERVICE" : {"id": 31, "description": "Развертывание egress Service в OpenShift"},
"OPENSHIFT_EGRESS_GATEWAY" : {"id": 32, "description": "Развертывание egress Gateway в OpenShift"},
"OPENSHIFT_EGRESS_SERVICEENTRY" : {"id": 33, "description": "Развертывание egress ServiceEntry в OpenShift"},
"OPENSHIFT_EGRESS_VIRTUALSERVICE" : {"id": 34, "description": "Развертывание egress VirtualService в OpenShift"},
"OPENSHIFT_EGRESS_ENVOYFILTER" : {"id": 35, "description": "Развертывание egress EnvoyFilter в OpenShift"},
"OPENSHIFT_EGRESS_DSR" : {"id": 36, "description": "Развертывание egress DestinationRule в OpenShift"},
"OPENSHIFT_ISTIO_SECRETS" : {"id": 37, "description": "Развертывание istio сертификатов в OpenShift"},
"OPENSHIFT_DEPLOY_DC" : {"id": 38, "description": "Развертывание deploymentConfig (не istio)"},
"OPENSHIFT_DEPLOY_SVC" : {"id": 39, "description": "Развертывание Services (не istio)"},
"OPENSHIFT_DEPLOY_HPA" : {"id": 40, "description": "Развертывание HPA (не istio)"},
"OPENSHIFT_DEPLOY_ROUTE" : {"id": 41, "description": "Развертывание Routes (не istio)"},
"OPENSHIFT_DEPLOY_SECRETS" : {"id": 42, "description": "Развертывание Secrets (не istio)"},
"OPENSHIFT_DEPLOY_CONFIGMAPS" : {"id": 43, "description": "Развертывание Configmaps (не istio)"}
},
"playbooks_security": { // Сценарии для Pipeline Security
"WAS_STOP_CLUSTER" : {"id": 1, "description": "Остновка кластера WebSphere AS"},
"WAS_FPI_UTIL_LDAP2" : {"id": 2, "description": "Настройка LDAP на WebSphere AS"},
"WAS_FPI_UTIL_ADMIN_ROLE" : {"id": 3, "description": "Настройка административных ролей WebSphere AS"},
"WAS_FPI_UTIL_LTPA_GENERATE_KEYS" : {"id": 4, "description": "Генерация LTPA ключей"},
"WAS_FPI_UTIL_LTPA_EXPORT_KEYS" : {"id": 5, "description": "Экспорт LTPA ключей WebSphere AS"},
"WAS_FPI_UTIL_LTPA_CONFIG" : {"id": 6, "description": "Настройка LTPA хранилища WebSphere AS"},
"WAS_FPI_UTIL_LTPA_IMPORT_KEYS" : {"id": 7, "description": "Импорт LTPA ключей в WebSphere AS"},
"WAS_FPI_UTIL_MODIFY_WMQCF" : {"id": 8, "description": "Обновление конфигурации WebSphere MQ"},
"WAS_FPI_UTIL_COPY_FILES" : {"id": 9, "description": "Копирование файлов на WebSphere AS"},
"WAS_FPI_UTIL_SSL" : {"id": 10, "description": "Настройка SSL WebSphere AS"},
"WAS_FPI_UTIL_DEL_RES" : {"id": 11, "description": "Удаление ресурсов WebSphere AS"},
"WAS_RESTART_NODES" : {"id": 12, "description": "Перезапуск серверов nodeagent WebSphere AS"},
"WAS_RESTART_DMGR" : {"id": 13, "description": "Перезапуск серверов DMGR WebSphere AS"},
"WAS_START_CLUSTER" : {"id": 14, "description": "Запуск кластера WebSphere AS"},
"WMQ_CONFIG" : {"id": 15, "description": "Настройка WebSphere MQ"},
"MIGRATION_COMMON_CONF" : {"id": 16, "description": "Миграция общих настроек"},
"OPENSHIFT_CERT_UPDATE" : {"id": 17, "description": "Массовое обновление секретов"},
"OPENSHIFT_DEL_RES" : {"id": 18, "description": "Удаление ресурсов в openshift"},
"OPENSHIFT_CHECK_CERTS" : {"id": 19, "description": "Проверка срока истечения указанных сертификатов"}
},
"playbooks_extra": { // Сценарии для Pipeline Deploy и Pipeline Security
"DEBUG" : {"id": 1, "description": "Debug режим"},
"WAS_FPI_UTIL_CLEARING" : {"id": 2, "description":
"Принудительная остановка задач развертывания на WebSphere AS" },
"WAS_FPI_UTIL_JOB_CONF" : {"id": 3, "description": "Перенастройка Jenkins job"},
"DELETE_LOCK_FILES" : {"id": 4, "description": "Удалить lock-файлы"},
"WAS_IGNORE_LOCK" : {"id": 5, "description": "Игнорировать lock-файлы"},
"FP_CONF_CHECK" : {"id": 6, "description": "Проверка конфигурационных файлов приложения" },
"JOB_LOG_COPY" : {"id": 7, "description": "Копирование лог-файла выполнения Jenkins job на удаленный сервер"},
"NGINX_CONF_RELOAD" : {"id": 8, "description": "Перезапуск сервера nginx"},
"ANSI_COLOR_DISABLE" : {"id": 9, "description": "Отключить цветной вывод лог-файлов в консоли Jenkins"},
},
"playbooks_custom": {
"DEFAULT_PLAYBOOKS_ENV" : {"id": 13, "description": "Запустить сценарии развертывания по умолчанию для среды"},
"DEFAULT_PLAYBOOKS_ENV_FLAG" : {"id": 14, "description": "Запустит сценарии развертывания по умолчанию для среды с отбрасыванием флага"},
"DEFAULT_PLAYBOOKS_FP" : {"id": 15, "description": "Запустить сценарии развертывания по умолчанию для приложения"},
"DEFAULT_PLAYBOOKS_FP_FLAG" : {"id": 16, "description": "Запустить сценарии развертывания по умолчанию для приложения с отбрасыванием флага"}
},
"playbooks_import": {
"IMPORT_ALL_PARAMS" : {"id": 12, "description": "Импорт параметров для всех возможных приложениЙ"},
},
"marker_success_playbooks" : ["DB_UPDATE", "NGINX_DEPLOY"], // Сценарии, при успешном прохождении которых будет создан маркер "ОК" (DEPRECATED!)
"subsystemSuffixToTenantCode" : {} // DEPRECATED см. описание файла /subsystems.json
},
"gf_mg" : { // Настройки среды "gf_mg". Параметры, указанные в данном блоке, будут перекрывать параметры по умолчанию
"jdk" : "JDK_1.7_45_Linux",
"credentials": {
"SshKeyCreds" : "099f4671-d96e-4a7e-979e-48e78d9a5c40",
"UserPassCreds" : "d72d56be-f76c-40b9-93f4-5cde75fac700",
"ansible_vault_id" : "e8cfbea7-f1dd-4e3e-85db-0e7caa33b449",
"openssl_cipher" : "aes-256-cbc" // Способ шифрования файла _password.conf. Необязательное поле - при его отсутствии по умолчанию используется aes-256-cbc
},
"playbooks_default": { // Списки сценариев (playbooks) по умолчанию для среды dev_test
"default": ["WAS_SMOKE"],
"marker": ["WAS_SMOKE"]
},
"wlVersions" : ["20572f4cce8", "6b34cf3355b", "e7b57628s8ab"], // Список разрешенных версий скриптов efs_scripts
"playbooks_service": {
"MIGRATION_PPL_DEPLOY" : {"id": 1, "description": "Миграция библиотек и скриптов Pipeline AD"},
"WAS_FPI_UTIL_JOB_CONF" : {"id": 2, "description": "Перенастройка Jenkins job"}
},
"fpConfigUrlJobParam": "false", // Включение параметров REPOFPCONFIG, REPOFPCONFIGBRANCH
"fpDistribUrlJobParam": "false", // Включение параметров FPFILESERVERURL, FPFILESURI
"ansiColorDisable": "false", // Отключение использование плагина ansiColor при формированиии вывода лог-файлов в консоли Jenkins
"markerName": "devbar", // Название создаваемого маркера
"jobsUrl": { // Адреса Jenkins jobs для Pipeline Scheduler
"adJob_dev_test": "https://jenkins.com/<...>/job/pipeline-fpi-deploy", // Адрес Pipeline Deploy job для стенда dev_test
"getTicketIJob": "https://jenkins.com/<...>/job/kit2.0" // Адрес Jenkins job получения тикета на портале КИТ
},
"acl": ["login_name1", "login_name2"], // ACL (access list) для среды "dev_test"
"enableAcl": "true", // Триггер на проверку acl списка
"openshift_params": { // Параметры для работы с удаленной Deploy job, развертывающей приложение в контейнере
"jobUrl": "https://jenkins/efs/job....", // Адрес Jenkins job, развертывающей приложение в контейнере
"jobParams": { // Дополнительные параметры запуска Jenkins job (сделано для пилота, для возможности быстро эксперементировать без изменения кода pipeline)
"p1": "v1",
"p2": "v2"
},
"envNotification": "true", // Включение баннера для оповещения о том, на какой среде запускается сборка, и требующего подтверждения (EDOIN-2989)
"envNotificationTimeout": "3", // Таймаут для падания Jenkins job, если пользователь не подтвердил сборку, 1 единица = 1 минута
"omPostUrl": "http://ouiefs-5019.vm.mos.cloud.ru:9090/om-service/create", // Указание адреса для отправки данных на сервер объективного мониторинга. Указано значение по умолчанию. Добавление данного параметра для стенда активирует механизм отправки данных.
// По умолчанию данные не отправляются
"omStartTypeJob": "manual", // Необязательный параметр для ручного запуска AD job (в случае активации "postUrlOM"). При запуске Jenkins job через scheduler или другой Jenkins job необходимо выставить значение "auto"
"dev" : {
"scriptsCustom": { // Для использования репозитория скриптов, отличной от используемой по умолчанию. Только если ENVIR начинается с dev или mmv. В дополнение см. параметр Job-ы NO_SCRIPTSCUSTOM .
// Учитывается для AD, SPO и Security jobs
"gitSshUrlFull": "ssh://git@<...>/CI00380023_efs_scripts.git",
"gitCreds": "03368280-ef6a-0000-8799-284bb15a46d7",
"gitRepoName": "ci00380023_efs_scripts"
}
},
[...]
}
Разбиение environment.json для возможности разделения параметров на группы#
В связи с большим количеством параметров, которые может нести в себе конфигурационный файл environment.json, была реализована функциональность, при помощи которой можно разделить данный файл на несколько составляющих. Реализация данной функции выполнена в виде возможности использования в теле файла в значении параметра особой псевдо-директивы: @@include=path/filename.json при этом:
Файлы, которые должны быть включены в environment.json, должны быть расположены в common репозитории в используемом блоке.
Возможно использование произвольного названия директории и файлов.
Количество используемых псевдо-директив и их вложенность не ограничена.
Пример использования#
Структура репозитория common:
common/b1
├─includes
│ └───playbooks.json
│ └───ift.json
├─environment.json
Основной файл: environment.json
{
"_default": {
...
"exampleParam": "test",
"playbooks_fpi": "@@include=includes/playbooks.json",
"exampleParam2": "test2",
..
},
"ift": "@@include=includes/ift.json"
}
Файл – источник данных: includes/playbooks.json
[
{
"name": "PLAYBOOK_1",
"id": 1
},
{
"name": "PLAYBOOK_2",
"id": 2
}
]
Файл – источник данных: includes/ift.json
{
...
"exampleParam": "anotherValue",
"exampleParam2": "anotherValue",
...
}
Итоговый файл после преобразований (environment.json):
{
"_default": {
...
"exampleParam": "test",
"playbooks_fpi": [
{
"name": "PLAYBOOK_1",
"id": 1
},
{
"name": "PLAYBOOK_2",
"id": 2
}
],
"exampleParam2": "test2",
..
},
"ift": {
...
"exampleParam": "anotherValue",
"exampleParam2": "anotherValue",
...
}
}
Вышеуказанные операции производятся в течение runtime при каждом запуске. В результате конфигурации будут считаны из финального обработанного файла (environment.json).
Автоматизация доставки изменений конфигурационных файлов из дистрибутива в репозиторий на среде (миграция)#
Для поставки в вышеуказанном формате, должны быть выполнены следующие условия:
Service job должна быть переключена в режим миграции конфигураций из common дистрибутива
В common дистрибутиве должны быть расположены файлы environment.json и подключаемые файлы.
В common дистрибутиве, в файле правил миграции должно быть добавлено новое правило миграции.
Далее описано каждое из условий по-отдельности.
Переключение Service job в режим миграции конфигураций из common дистрибутива#
Данное действие осуществляется с помощью флага, указанного в файле environment
{
...
"migrateConfigurationWithPipeline": false,
...
}
Данный флаг отключает миграцию файлов environment.json из релиза pipeline сценарием запуска MIGRATION (ARTIFACT_TYPE: PIPELINE).
И включает миграцию при помощи нового сценария MIGRATION_CONFIGURATION (ARTIFACT_TYPE: COMMON).
Размещение в дистрибутиве common файлов шаблонов конфигураций#
В репозиторий исходных кодов common дистрибутива необходимо создать файл environment.json (с директивами @@includes=...) и добавить файлы, которые должны обогатить файл environment.json (структуру см. в разделе «Примеры использования»).
Важно!
Файлы должны быть расположены в директории: src/main/resources/common
Создание или обновление файла __migration-rules.yml в дистрибутиве common#
Файл __migration-rules.yml служит для конфигурации миграции данных из дистрибутива common в репозиторий common для среды (определяет какие файлы и каким образом мигрировать).
Важно!
Файлы должны быть расположены в директории: src/main/resources/common
В данном файле требуется произвести следующее:
Задать базовое поведение для миграции (скопировав нижеуказанное содержимое):
# Правила применяются в порядке от первого к последнему migrationRules: # Пути к файлам задаются в ant-style: # - https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/util/AntPathMatcher.html # - https://www.jenkins.io/doc/pipeline/steps/file-operations/ - type: ignore items: - "**/__*__/**" - "**/__topology-mapping.yml" - "**/__migration-rules.yml" - "pipeline.yml" - "installer/system/efs/config/definitions/**" - "installer/system/efs/config/global_parameters/**" - "**/README.md" # Пример специфичного правила для ФЛ # - type: ignoreIfNotSectorFilter # items: # - "extra_*/**" - type: rewrite items: - "**/ansible/sup2_common.json" - type: createIfNotExists items: - "**/ansible/secret.yml" - "**/ansible/_passwords.conf" - "**/ansible/nginx.conf" - "**/ansible/files/**" - "**/ansible/UTIL_SECURE/inventory" - "**/ansible/globalInventory" - "**/blackList.conf" - "**/jenkinsJobs.conf" - type: migrateConfTool items: - "installer/installer/system/efs/config/parameters/__migration.conf" - type: merge migratorOpts: "--never-delete '.*'" items: - "**/ansible/*.json" - "**/ansible/mq/*.json" - "**/ansible/kafka/*.json" - "**/ansible/kafka/*.yml" - "**/version.conf" - "**/multiClusters.json" - type: merge items: - "**/installer/system/efs/config/parameters/*.conf" - type: merge items: - "**/ansible/*conf.yml" - type: remove items: []!!! warning "Важно!" В случае работы с "чистым" common вместо указанного выше, следует скопировать следующее содержимое:
# Правила применяются в порядке от первого к последнему migrationRules: # Пути к файлам задаются в ant-style: # - https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/util/AntPathMatcher.html # - https://www.jenkins.io/doc/pipeline/steps/file-operations/ - type: createIfNotExists items: - "**/hosts/globalInventory" - "**/parameters/_extra.conf" - "**/parameters/common.conf.yml" - "**/secrets/_passwords.conf" - "**/subsystems.json" - type: merge migratorOpts: "--never-delete '.*'" items: - "**/version.conf" - "**/multiClusters.json"Добавить новую группу для миграции конфигураций:
environment: # Миграция environment.json - command: merge parameters: sourceDir: "{{ sourcePath }}/environments" targetDir: "{{ targetPath }}" resultDir: "{{ targetPath }}" includes: - "environment.json" mergeConfiguration: includes: - "__default(\\.+)?" - "{{ ENVIR }}(\\.+)?" rewrite: - "__default(\\.+)?" keep: - "{{ ENVIR }}(\\.+)?" # Миграция компонентов для environment.json - command: merge parameters: sourceDir: "{{ sourcePath }}/environments/includes" targetDir: "{{ targetPath }}/includes" resultDir: "{{ targetPath }}/includes" includes: - "*.json" mergeConfiguration: rewrite: - ".*"!!! warning "Важно!" Если файлы расположены в отличных от указанных директориях, необходимо произвести изменение шаблона на выбранные директории.
Стоит обратить внимание, что в рамках описания данного файла также доступна шаблонизация. На текущий момент разрешено использование 3 placeholders:
sourcePath - исходная директорий (директория, куда был загружен common дистрибутив).
targetPath - целевая директория (директория, куда был загружен common репозиторий со стенда + выбранный блок).
ENVIR - наименование стенда / среды. Например:
!!! tip После внесения всех изменений в исходные коды common дистрибутива, произведите выпуск новой версии common дистрибутива.
Запуск Service job#
Первым шагом выполните реконфигурацию Service job (Запуск Jenkins job с пустыми параметрами).
Для миграции конфигураций при помощи Service job произведите ее запуск со следующими параметрами:
# Обновляемый компонент
ARTIFACT_TYPE: "COMMON"
# Версия, на которую будет произведено обновление
ARTIFACT_VERSION: <Версия выпущенного ранее дистрибутива common>
# Выбор этапа (stage – определяющего какую часть компонента требуется обновить)
PARAMETERS:
- MIGRATION_CONFIGURATION
Работа с файлом subsystems.json#
После обновления Pipeline (см. Руководство по установке → подпункт Проведение последовательной миграции subsystems) через Service job в репозитории common создается/обновляется основной конфигурационный файл для устанавливаемых конфигураций функциональных приложений – subsystems.json
Пример заполнения файла subsystems.json:
{"!__default" :{ // Блок настроек по умолчанию. В ЭТОМ БЛОКЕ НИЧЕГО ПРАВИТЬ НЕ НУЖНО -- ОН ПОСТОЯННО ОБНОВЛЯЕТСЯ И ПЕРЕЗАПИСЫВАЕТСЯ
"classifier": "distrib", // Классификатор дистрибутива приложения в хранилище Nexus
"groupId": "Nexus_PROD", // Group ID дистрибутива приложения в хранилище Nexus
"packaging": "zip", // Расширение файла с дистрибутивом приложения
"strict": "false", // Режим миграции настроек приложения (true - будут мигрировать только файлы, начинающиеся на <fpi_name>, false - все конфигурационные файлы)
"limit": 100, // Ограничение кол-ва версий дистрибутива в меню Jenkins
"emailList": ["<email>"], // Email-адреса для получения уведомлений по статусу Pipeline AD
"at": { // Блок с реквизитами дистрибутива API-автотестов по умолчанию
"groupId": "Nexus_PROD", // Group ID дистрибутива API-автотестов
"branch": "master", // Ветка репозитория с настройками API-автотестов по умолчанию
"classifier": "distrib", // Классификатор дистрибутива API-автотестов по умолчанию
"packaging": "zip", // Расширение дистрибутива API-автотестов по умолчанию
"timeout": 100 // Время, по истечении которого АТ будут считаться неуспешно выполненной (мин)
},
"at_ui": { // Блок с реквизитами дистрибутива UI-автотестов по умолчанию.
"groupId": "Nexus_PROD", // Group ID дистрибутива UI-автотестов.
"branch": "master", // Ветка репозитория с настройками UI-автотестов по умолчанию.
"classifier": "distrib", // Классификатор дистрибутива UI-автотестов по умолчанию.
"packaging": "zip", // Расширение дистрибутива UI-автотестов по умолчанию.
"timeout": 10 // Время, по истечении которого АТ будут считаться неуспешно выполненной (мин)
},
"subsystemSuffixToTenantCode": { // Определение соответствия (mapping) суффикса кода приложения в subsystems.json на sectorCode/tenantCode
"SBOLPRO": "sbol-pro", // Все подсистемы, код которых заканчивается на SBOLPRO должны в sectorCode/tenantCode содержать значение sbol-pro
"ROUTE": "route", // Все подсистемы, код которых заканчивается на ROUTE должны в sectorCode/tenantCode содержать значение route
"": "core" // Последним в списке всегда идет "", что означает: все остальные не попавшие под предыдущие правила должны содержать в sectorCode/tenantCode значение core
}
},
"CREDIT_CARDS" : { // Блок настроек для приложения. Параметры, указанные в данном блоке, будут перекрывать параметры, заданные по умолчанию.
"fpi_name": "credit_card", // Название приложения в Installer. Задает список приложений из дистрибутива приложений, которые нужно установить. Соответствует id КЛЮЧА из словаря applications. Для данного id КЛЮЧА из словаря applications будут также считываться параметры "deploy_group", "config_fp_name". Если приложений несколько - нужно перечислить через запятую
// Список приложений нужно писать, с использованием одинарных кавычек ('), после чего полученную строку нужно заключить в двойные кавычки ("). При загрузке JSON будет считываться значение внутри двойных кавычек и передаваться далее в вызываемый скрипт без двойных кавычек (") на концах строки
"artifactId": "CI00855494_AS_EFS_CREDIT_CARDS", // Artifact ID дистрибутива приложения в хранилище Nexus
"groupId": "AS_EFS.AS_EFS_CREDIT_CARDS.Distrib", // Group ID дистрибутива приложения в хранилище Nexus
"versionFilter": "D-02", // Версия или маска версии дистрибутива приложения в хранилище Nexus
"strict": "false", // Режим миграции настроек приложения (true - будут мигрировать только файлы, начинающиеся на <fpi_name>, false - все конфигурационные файлы).
"fpType": "bts", // Указывается тип приложения для фильтрации в Jenkins job. Для выбора нескольких вариантов необходимо указать в настройках job: FP_TYPE_FILTER=bts, bfs
"acl": ["logn_name1", "login_name2"], // ACL (access list) для приложения
"test_manager": ["login_name"], // Логины тест-менеджеров, которые имеют права проставлять флаг прохождения ручного тестирования.
"deployType": "parallel", // Тип автоматического развертывания (parallel - параллельный, consistently - последовательный)
"standList": [ "dev_test" ], // Перечень стендов для автоматического развертывания
"emailList": ["<email>"], // Email-адреса для получения уведомлений по статусу Pipeline AD
"smsEmailList": ["<email>"], // Email-адреса людей, которым будут направлены СМС-уведомления по статусу выполнения Jenkins job
"smsPhoneList": ["79130000110", "79800900909"], // Номера телефонов для отправки СМС-уведомлений по сборкам данного приложения
"smsInitEmailList": ["<email>"], // Email-адреса людей, которым будут направлены СМС-уведомления о начале выполнения Jenkins job
"smsInitPhoneList": ["7913123456", "79801010101"], // Номера телефонов для отправки СМС-уведомлений о начале выполнения Jenkins job для данного приложения
"smsPlaybooks":["NGINX_DEPLOY", "WAS_FPI_DEPLOY"], // Сценарии развертывания, при запуске которых требуется отправка СМС уведомлений
"testsJobs": { // Блок настроек Jenkins jobs с API-тестами
"dev": { // Блок настроек Jenkins jobs с API-тестами для среды "dev"
"jobUrl": "https://jenkins.com/<...>/job/autotest_test", // URL job с API-тестами
"jobParams": { // Параметры Jenkins job с API-тестами
"endpoint": "http://OUIEFS-0077.ru:9080/",
"serviceUrl": "http://OUIEFS-0079.ru:9080/"}
}
},
"testsJobsUI": {
"jobUrl" : "https://jenkins.com/<...>/job/autotest_ui_test" // URL job UI-тестами
}
},
"CLIENT_SERVICES" : {
"fpi_name": "erib-authentication" ,
"artifactId": "ClientSession",
"versionFilter": "D-02", // Версия или маска версии дистрибутива приложения в хранилище Nexus
"at": {
"artifactId": "CI01027902_AS_EFS_AT", // ArtifactID дистрибутива АТ
"emailList": ["<email>"], // Email-адреса для получения уведомлений по статусу Pipeline AT
},
"at_ui": {
"artifactId": "CI01082660_UFS_HEALTHCHECK_UI_AutoTest ", // ArtifactID дистрибутива АТ UI
"emailList": ["<email>"], // Email-адреса для получения уведомлений по статусу Pipeline AT UI
}
},
"GW_UFS_CLIENT": {
....
"emailListDP": "<email>", // Только для приложений шлюзов. E-mail получателя отчетов по обновлению DataPower
"playbooks": ["UPDATE_DP"] // Сценарии развертывания, которые будут видны для данного приложения
},
[...]
}
Организация секций стенда в environmet.json и секций подсистем в subsystems.json#
Определение секции стенда или подсистемы в файлах environmet.json и subsystems.json позволяет задать значения параметров, специфичных для конкретного стенда или подсистемы. При этом, если параметр уже определен в секции стенда или подсистемы, то его значение не будет перезаписано значением из секции по умолчанию.
Структура файла environmet.json#
Файл environmet.json содержит информацию о различных стендах. Разберем как работает переопределение параметров на простом и наглядном примере:
{
"__default": {
"param1": "value1",
"param2": "value3"
},
"stand1": {
"param1": "value2"
},
"stand2": {
"param2": "value4"
},
"standN": {
"param3": "value5"
}
}
Секция __default представляет собой секцию по умолчанию, в которой определены значения параметров param1 и param2. Значения параметров в секции по умолчанию будут использоваться для стендов, у которых эти параметры не определены явно.
Каждая последующая секция (например, stand1, stand2, standN) представляет отдельный стенд и может содержать переопределение значений параметров либо добавление новых, специфичных только для этого стенда параметров. Например, в секции stand1 значение параметра param1 переопределено и равно value2, а параметр param2 в секции отсутствует, поэтому он унаследуется из секции по умолчанию.
Преобразование значений#
После преобразования, значения параметров в секциях стенда будут перезаписаны значениями из секции по умолчанию, если они не определены явно. Однако, если параметр уже определен в секции стенда, то его значение останется неизменным.
Пример результата преобразования:
{
"stand1": {
"param1": "value2",
"param2": "value3"
},
"stand2": {
"param1": "value1",
"param2": "value4"
},
"standN": {
"param1": "value1",
"param2": "value3",
"param3": "value5"
}
}
В данном примере, значения параметров param1 в секции stand1 остался неизменным, а param2 был добавлен из секции по умолчанию.
В секции stand2 ситуация аналогичная секции stand1, но из секции по умолчанию добавлен уже param1.
В секции standN параметры param1 и param2 были унаследованы из секции по умолчанию, а параметр param3 остался со значением value5.
Переопределение параметров подсистем в subsystems.json#
Логика переопределения параметров подсистем в subsystems.json аналогична логике переопределения параметров стендов в environmet.json.
События системного журнала#
У программного компонента Deploy tools отсутствует встроенный системный журнал. События каждого запуска Deploy tools логируются средствами сервиса Jenkins и сохраняются в его логах.
События аудита программного компонента Deploy tools не генерируются.
События мониторинга#
У программного компонента Deploy tools отсутствуют события мониторинга.
Часто встречающиеся проблемы и пути их устранения#
Проблема 1: Не созданы репозитории для common, pipeline, репозитория приложения или нет доступа к этим репозиториям (необходим доступ уровня Read/Write).
Данная ошибка также воспроизводится, когда в созданные репозитории не был сделан инициализационный Commit:
11:43:40 ERROR: Error cloning remote repo 'origin'
11:43:40 hudson.plugins.git.GitException: Command "git fetch --tags --progress ssh://<git@stash devops sandbox>/CI00380023_efs_ukofl_pipeline_mmv.git +refs/heads/*:refs/remotes/origin/*" returned status code 128:
11:43:40 stdout:
11:43:40 stderr: Repository not found
11:43:40 The requested repository does not exist, or you do not have permission to access it.
11:43:40 fatal: Could not read from remote repository.
11:43:40
11:43:40 Please make sure you have the correct access rights
11:43:40 and the repository exists.
11:43:40
11:45:04 Сборка прервана из-за ошибки:
11:45:04 <..>.devops.UFSResultException: hudson.AbortException: Error cloning remote repo 'origin'
Решение 1: Создать отсутствующий репозиторий/репозитории и получить к нему/к ним доступ для используемой учетной записи.
Полноценной и обширной базы знаний по ошибкам эксплуатации не накоплено.