Подготовка окружения#
В руководстве даны пояснения как настроить Jenkins job, для установки Platform V ASOC Control Center в среду контейнеризации Platform V DropApp.
Далее указана минимальная часть конфигурации необходимая для установки Platform V ASOC Control Center.
Более подробную информацию по использованию компонента Deploy tools (CDJE) продукта Platform V DevOps Tools (DOT), смотрите в документации на одноименный компонент.
Инструкция по развертыванию БД#
Установите Platform V Pangolin DB версии 5.2 в standalone конфигурации: Pangolin + pgBouncer.
При инсталляции экземпляра СУБД следует указывать кодировку en_US.
Версия СУБД должна содержать следующие установленные расширения:
Наименование
Версия
pgcrypto
1.3 и выше
Создайте базу данных и пользователя:
база данных
asoc_postgres;пользователь
asoc_user;табличное пространство
ASOC_TS_DATA,ASOC_TS_IDX.CREATE DATABASE <asoc_postgres>; CREATE USER <asoc_user> WITH ENCRYPTED PASSWORD '<password>'; ALTER USER <asoc_user> VALID UNTIL 'INFINITY'; create tablespace <ASOC_TS_DATA> owner <asoc_user> location 'YYY'; create tablespace <ASOC_TS_IDX> owner <asoc_user> location 'ZZZ';
„YYY“ и „ZZZ“ пути до личного пространства.
Создайте схемы через интерфейс командной строки PostgreSQL, либо в графическом клиенте подключенном к целевой базе данных.
Примечание.
Для создания схем, необходимо выполнить скрипт приведенный ниже.
ВАЖНО Перед выполнением скрипта задайте значения переменных
user_nameиuser_pass. Будет создана ТУЗ и получит полные права на все создаваемые схемы.Скрипт:
DO $$ DECLARE user_name text := 'asoc_user'; user_pass text := ''; schemas TEXT[] := ARRAY[ 'asocorchestrator'', #схема asocorchestrator 'asocpersonaloffice', #схема asocpersonaloffice 'asocprojectstore', #схема asocprojectstore 'asocaccesscontrol',#схема asocaccesscontrol 'dependency-track', #схема dependency-track 'asoconeworkadapter' #схема asoconeworkadapter ]; BEGIN IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname=user_name) THEN EXECUTE format('CREATE ROLE %I LOGIN ENCRYPTED PASSWORD %L;', user_name, user_pass); END IF; CREATE SCHEMA IF NOT EXISTS extensions; EXECUTE format('GRANT USAGE ON SCHEMA extensions TO %I;', user_name); SET search_path = 'extensions'; CREATE EXTENSION IF NOT EXISTS pg_trgm; FOR i IN array_lower(schemas, 1)..array_upper(schemas, 1) LOOP EXECUTE format('CREATE SCHEMA IF NOT EXISTS %I;', schemas[i]); EXECUTE format('GRANT ALL PRIVILEGES ON SCHEMA %I TO %I;', schemas[i], user_name); END LOOP; END $$;Примечание:
У пользователя должны быть достаточные права, чтобы создать:
необходимые таблицы;
функции;
ограничения;
триггеры;
представления;
последовательности.
Обязательно должны быть выданы права DML (INSERT, UPDATE, DELETE, LOCK, CALL, Explain Plan), так как впоследствии пользователь <username> используется при работе Platform V ASOC Control Center.
Создайте топики Kafka вручную:
Требуемые топики
Имя топика
Назначение топика
Пример
SCAN.SAST.SASTMASTER.{stand-type}.{project-code}Задачи сканирования во внутренний модуль SAST (SASTMASTER)
SCAN.SAST.SASTMASTER.STAND-TYPE.ASOCSCAN.SCA.SCAMASTER.{stand-type}.{project-code}Задачи сканирования во внутренний модуль SCA
SCAN.SCA.SCAMASTER.STAND-TYPE.ASOCTOOL_SCAN.SCA.DEPENDENCY-TRACK.${stand-type}.${project-code}Задачи конечным сканерам модуля SCA
TOOL_SCAN.SCA.DEPENDENCY-TRACK.STAND-TYPE.ASOCSCAN_STATUS.REQUEST.DEPENDENCY-TRACK.${stand-type}.${project-code}Статусы задач из модулей обратно в Оркестратор
SCAN_STATUS.REQUEST.DEPENDENCY-TRACK.STAND-TYPE.ASOCLOAD.FILE.S3.{stand-type}.{project-code}Нотификации о загрузке файлов в Проектное Хранилище
LOAD.FILE.S3.STAND-TYPE.ASOCPO_SCAN_STATUS.{stand-type}.{project-code}Статусы задач и подзадач отправляемые из Оркестратора в Личный кабинет
PO_SCAN_STATUS.STAND-TYPE.ASOCДля создания топика Kafka вручную, необходимо использовать скрипт
kafka-topics.sh --create \ --topic SCAN.SAST.SASTMASTER.STAND-TYPE.ASOC \ --bootstrap-server vm-asoc-asoc-kafka-103.vdc13.sc.dev.mycompany:9093 \ --partitions 3 \ --replication-factor 2 \ --command-config ./client-ssl.properties
Подготовка элементов развертывания#
Примечание:
На агенте сборки должен быть установлен Maven.
Очистите пространство имен согласно действиям, приведенным в разделе Удаление.
Для подготовки конфигурации CDJE, пройдите в репозиторий common, созданный в результате развертывания Platform V
DevOps Tools, и сконфигурируйте следующие файлы:
subsystems.json- параметры NEXUS репозитория с настройками артефакта (конфигурацией продукта). Пример представлен ниже.{ "__default": {}, "ASOC": { "fpType": "fp", # Тип фильтра (здесь установлен на 'false positive') "fpi_name": "asoc", # Имя профиля интеграции (название сервиса) "nexus_repo": "mycompany_PROD", # Репозиторий Nexus для production окружения "groupId": "mycompany_PROD.CIxx000xx1_asoc", # Идентификатор группы артефакта в Maven/Nexus "artifactId": "asoc-cfg", # Уникальное название артефакта "nexus_host": "https://works.ru/nexus-cd", # Хост сервера Nexus для CD (Continuous Deployment) "registryPath": "/mycompany/cixx000xx1_asoc/", # Путь к хранилищу Docker-образов или других ресурсов "versionFilter": "*" # Фильтр версий (все версии принимаются) }, "ASOC-DEV": { # Профиль конфигурации для dev-среды ASOC "fpType": "fp", # Тип фильтра (также 'false positive') "fpi_name": "asoc", # Имя профиля интеграции совпадает с основным профилем "nexus_repo": "mycompany_maven", # Репозиторий Nexus для разработки "groupId": "ru.mycompany.asoc", # Группа артефактов для девелопмент-среды "artifactId": "asoc-cfg", # Название артефакта совпадает с основной средой "nexus_host": "https://works.ru/nexus-ci", # Хост CI (Continuous Integration) сервера Nexus "registryPath": "/mycompany_dev/cixx000xx1_asoc/", # Путь к ресурсам для девелоперской среды "versionFilter": "*" # Все доступные версии артефактов допускаются } }multiClusters.json- настройка кластеров DropApp, в которые будет производиться установка продукта. Пример представлен ниже.{ "datacenters": { # Объект для определения параметров центров обработки данных "dropapp2": { # Данные для центра обработки данных dropapp2 "openshiftCluster": "https://api.dap.devpub-xx.solution.mycompany:6xx3", # Адрес API кластера DropApp "openshiftAppsDomain": "apps.dap.devpub-xx.solution.mycompany", # Доменное имя для приложений DropApp "openshiftSATokenCred": "tuz-mycompany-cd-asoc-token-da2", # Имя секрета для токена Service Account в DropApp "openshiftProjectName": "da-dpxx-sc-asoc-ift-x", # Название проекта в пространстве имен DropApp "openshiftRoutersFQDN": ["10.xxx.xxx.xx"], # Список IP/FQDN маршрутизаторов DropApp "registryPath": "{{ fpConfig.registryPath }}" # Шаблон пути к регистру Docker-образов } } }
где «openshiftRoutersFQDN» - параметр, указывающий полные доменные имена (FQDN) маршрутизаторов DropApp, используемых для внешнего доступа к приложениям:
environment.json- основной конфигурационный файл. Пример представлен в файле.
Секция «__default» файла
environment.jsonперезаписывается при каждой миграции. Для установки собственных параметров, необходимо создать дополнительную секцию, в которой можно переопределить параметры по умолчанию, так же убрать неиспользуемые опции CDJE, например отключить список параметров запуска связанный с WAS.
Удаление ресурсов из пространства имен Platform V DropApp#
Удаление ресурсов из пространства имен Platform V DropApp выполняется сценариями job развертывания.
Предусловие#
Перед выполнением удаления рекомендуется проверить:
в Jenkins доступен Tool с kubectl версии не ниже 1.18;
наличие настройки имени tool в параметре
kubectlToolNameвenvironment.json;наличие настройки имени tool в параметре
jqToolNameвenvironment.json;(Опционально). Для возможности удалять ресурсы используя фильтр jq должен быть доступен Tool с jq.
Job развертывания#
Для удаления ресурсов из пространства имен Platform V DropApp в job развертывания используются сценарии
OPENSHIFT_PURGE_PROJECT и KUBERNETES_PURGE_PROJECT.
Оба файла сценариев (playbooks) удаляют только объекты, подпадающие под фильтр, настроенный по полю объектов label.
Поле label должно содержать параметры SUBSYSTEM и distribReleaseVersion, значения которых соответствуют значениям
соответствующих параметров запуска job развертывания.
Для использования сценариев (playbooks), OPENSHIFT_PURGE_PROJECT и KUBERNETES_PURGE_PROJECT должны быть добавлены в
секцию playbooks_extra соответствующего стенда в файл environment.json Common-репозитория.
После добавления сценариев (playbooks), job развертывания необходимо переконфигурировать, используя запуск без параметров.
Пример:
{
"mycompany": {
"playbooks_extra": {
"OPENSHIFT_PURGE_PROJECT": {
"id": 99
},
"KUBERNETES_PURGE_PROJECT": {
"id": 100
}
}
}
}
Настройка окружения#
Ручная установка#
Ручная установка не предусмотрена.
Автоматическая установка#
Под автоматической установкой подразумевается установка посредством Platform V DevOps Tools.
Для установки дистрибутива:
Откройте Jenkins и нажмите кнопку Собрать с параметрами.
На открывшейся странице с параметрами для сборки выберите:
DISTRIB_VERSION:
ru/mycompany/asoc/asoc-cfg/1.0.0-890_dev.Выбрать OSE_CLUSTERS: <необходимый>.
Выбрать версию платформы: <актуальную>.
Выбрать сценарии запуска:
DB_UPDATE,HELM_DEPLOY.
Нажать кнопку Cобрать
После завершения процесса сборки проверьте:
DB_UPDATE— проверить, что создались и заполнились таблицы в БД на основании скриптов из папки package/db дистрибутива.HELM_DEPLOY— проверить, что создались файлы locations, потоков данных и маршрутизаторов в папке/opt/nginx-iag/confна сервереnginx_uiв соответствии с файлами конфигурацииnginx-iag-routing.json.j2,nginx-iag-services.json.j2,nginx-iag-nodes.json.j2.
Выпуск и подготовка сертификатов#
В разделе приведено описание создания клиентского сертификата.
Предусловие#
Установленный OpenSSL (доступен в Linux, macOS, Windows через WSL или отдельную установку). Необходимо иметь:
CA-ключ (ca.key)
CA-сертификат (ca.crt)
Создание клиентского сертификата#
Для создания клиентского сертификата, выполните следующие шаги:
Создайте приватный ключ клиента:
openssl genrsa -out client.key 2048Создайте запрос на подпись сертификата (CSR):
openssl req -new -key client.key -out client.csr
При выполнении команды необходимо заполнить данные:
Country Name ©
State or Province Name (ST)
Locality Name (L)
Organization Name (O)
Organizational Unit Name (OU)
Common Name (CN) — имя клиента/устройства
Email Address (EM) — опционально
Подпишите CSR с помощью вашего CA:
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365