Руководство по системному администрированию#

В данном документе описаны сценарии администрирования программного компонента 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).

Автоматизация доставки изменений конфигурационных файлов из дистрибутива в репозиторий на среде (миграция)#

Для поставки в вышеуказанном формате, должны быть выполнены следующие условия:

  1. Service job должна быть переключена в режим миграции конфигураций из common дистрибутива

  2. В common дистрибутиве должны быть расположены файлы environment.json и подключаемые файлы.

  3. В common дистрибутиве, в файле правил миграции должно быть добавлено новое правило миграции.

Далее описано каждое из условий по-отдельности.

Переключение Service job в режим миграции конфигураций из common дистрибутива#

Данное действие осуществляется с помощью флага, указанного в файле environment.json_ Service job на уровне всей инсталляции в релизном репозитории pipeline:

{
  ...
  "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

В данном файле требуется произвести следующее:

  1. Задать базовое поведение для миграции (скопировав нижеуказанное содержимое):

    # Правила применяются в порядке от первого к последнему
    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"
    
  2. Добавить новую группу для миграции конфигураций:

    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:

  1. sourcePath - исходная директорий (директория, куда был загружен common дистрибутив).

  2. targetPath - целевая директория (директория, куда был загружен common репозиторий со стенда + выбранный блок).

  3. 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: Создать отсутствующий репозиторий/репозитории и получить к нему/к ним доступ для используемой учетной записи.

Полноценной и обширной базы знаний по ошибкам эксплуатации не накоплено.