Подготовка окружения#

В руководстве даны пояснения как настроить Jenkins job, для установки Platform V ASOC Control Center в среду контейнеризации Platform V DropApp.

Далее указана минимальная часть конфигурации необходимая для установки Platform V ASOC Control Center.

Более подробную информацию по использованию компонента Deploy tools (CDJE) продукта Platform V DevOps Tools (DOT), смотрите в документации на одноименный компонент.

Инструкция по развертыванию БД#

  1. Установите Platform V Pangolin DB версии 5.2 в standalone конфигурации: Pangolin + pgBouncer.

    При инсталляции экземпляра СУБД следует указывать кодировку en_US.

    Версия СУБД должна содержать следующие установленные расширения:

    Наименование

    Версия

    pgcrypto

    1.3 и выше

  2. Создайте базу данных и пользователя:

    • база данных 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“ пути до личного пространства.

  3. Создайте схемы через интерфейс командной строки 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.

  4. Создайте топики Kafka вручную:

    Требуемые топики

    Имя топика

    Назначение топика

    Пример

    SCAN.SAST.SASTMASTER.{stand-type}.{project-code}

    Задачи сканирования во внутренний модуль SAST (SASTMASTER)

    SCAN.SAST.SASTMASTER.STAND-TYPE.ASOC

    SCAN.SCA.SCAMASTER.{stand-type}.{project-code}

    Задачи сканирования во внутренний модуль SCA

    SCAN.SCA.SCAMASTER.STAND-TYPE.ASOC

    TOOL_SCAN.SCA.DEPENDENCY-TRACK.${stand-type}.${project-code}

    Задачи конечным сканерам модуля SCA

    TOOL_SCAN.SCA.DEPENDENCY-TRACK.STAND-TYPE.ASOC

    SCAN_STATUS.REQUEST.DEPENDENCY-TRACK.${stand-type}.${project-code}

    Статусы задач из модулей обратно в Оркестратор

    SCAN_STATUS.REQUEST.DEPENDENCY-TRACK.STAND-TYPE.ASOC

    LOAD.FILE.S3.{stand-type}.{project-code}

    Нотификации о загрузке файлов в Проектное Хранилище

    LOAD.FILE.S3.STAND-TYPE.ASOC

    PO_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.

Для установки дистрибутива:

  1. Откройте Jenkins и нажмите кнопку Собрать с параметрами.

  2. На открывшейся странице с параметрами для сборки выберите:

    • DISTRIB_VERSION: ru/mycompany/asoc/asoc-cfg/1.0.0-890_dev.

    • Выбрать OSE_CLUSTERS: <необходимый>.

    • Выбрать версию платформы: <актуальную>.

    • Выбрать сценарии запуска: DB_UPDATE, HELM_DEPLOY.

  3. Нажать кнопку Cобрать

  4. После завершения процесса сборки проверьте:

    • 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)

Создание клиентского сертификата#

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

  1. Создайте приватный ключ клиента:

       openssl genrsa -out client.key 2048
    
  2. Создайте запрос на подпись сертификата (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) — опционально

  1. Подпишите CSR с помощью вашего CA:

       openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365