Развертывание с использованием Platform V DevOps Tools#

Введение#

Данное руководство предназначено для описания установки SOWA в DropApp при помощи инструментов Platform V DevOps Tools (DOT).

В руководстве даны пояснения как сконфигурировать созданную Jenkins job, для установки SOWA в среду контейнеризации DropApp (Kubernetes).

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

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

Подготовка конфигурации CDJE#

Для подготовки конфигурации CDJE, необходимо пройти в репозиторий common, созданный в результате развертывания Platform V DevOps Tools (DOT), и сконфигурировать следующие файлы:

  • subsystems.json - параметры NEXUS репозитория с настройками артефакта (конфигурацией компонента). Пример представлен ниже:

{
  // Секция по умолчанию. При миграции конфигурации из дистрибутива DevOpsTools перезаписывается.
  "__default": {
    "classifier": "distrib",
    "packaging": "zip",
    "groupId": "Nexus_GROUP",
    "strict": "true",
    "limit": 101,
    "deployType": "manual"
  },
  // Блок настроек приложения. Настройки в этом блоке будут перекрывать соответствующие из блока __default
  "SOWA": {
    // Код компонента
    "fpi_name": "sowa",
    // GroupID загруженного в Nexus пакета 
    "groupId": "nexus.group.id.sowa",
    // ArtifactId архива с конфигурационной частью
    "artifactId": "sowa-cfg",
    // Фильтр версий артефакта конфигурации, которые будут отображаться в UI CDJE
    "versionFilter": "1.0",
    // Режим миграции настроек ФП (true - будут мигрировать только файлы, начинающиеся на <fpi_name>, false - все конфигурационные файлы).
    "strict": "false",
    // Указывается тип приложения для фильтрации в Jenkins job. Для выбора нескольких вариантов необходимо указать в настройках job: FP_TYPE_FILTER=bts, bfs
    "fpType": "fp",
    // Тип автоматического развертывания (parallel - параллельный, consistently - последовательный)
    "deployType": "consistently"
  }
}
  • multiClusters.json - настройка кластеров DropApp, в которые будет производиться установка компонента. Пример представлен ниже:

{
  "datacenters": {
    // Наименование кластера, которое будет отображаться в UI Jenkins job
    "dev-02": {
      // api кластера DropApp
      "openshiftCluster": "https://DropApp.my.company.ru:6443",
      // Наименование проекта(project)
      "openshiftProjectName": "myproject",
      // id credential в jenkins содержащий токен доступа к проекту в DropApp
      "openshiftSATokenCred": "openshift_credential",
      // Cуффикс домена для сервисов кластера
      "openshiftAppsDomain": "apps.DropApp.mycompany.ru",
      // Cсылка на кластер для формирования корректной ссылки на проект в описании job для развертывания
      "openshiftWebConsole": "https://console-DropApp-console.mycompany.ru/k8s/cluster/projects"
    }
  }
}
  • environment.json - основной конфигурационный файл. Пример представлен ниже:

{
  // Секция по умолчанию. При миграции конфигурации из дистрибутива DevOpsTools перезаписывается.
  "!__default": {
    // Стандартные параметры для джобы
    "components": {
      "PIPELINE_EXTENSIONS": {
        "stages": {
          "MIGRATION": {
            "script": "migrateScm.groovy"
          }
        },
        "params": {
          "branchPattern": "release_extensions/",
          "versionConfParamName": "pipelineExtensionVersion"
        }
      }
    },
    "migrateConfigurationWithPipeline": false,

    // Сценарии разверытвания для Depoly Job. При помощи данной настройки убираются неиспользуемые или включаются необходимые опции job (подробнее см документацию DOT).
    "playbooks_fpi": {
      // Миграция конфигурационных файлов из дистрибутива в созданный репозиторий стендозависимых параметров
      "MIGRATION_FP_CONF": {
        "id": 2
      },
      // Валидация конфигурационных файлов, нужен при создании структуры БД
      "FP_CONF_CHECK": {
        "id": 3
      },
      // Деплой приложения в k8s с помощью Helm
      "HELM_DEPLOY": {
        "id": 97
      },
      "HELM_UNDEPLOY": {
        "id": 98
      }
    }
  },

  // Блок конфигурации приложения 
  "sowa": {
    // Перечислены ID credentials созданных в Jenkins CD
    "credentials": {
      "SshKeyCreds": "tuz_for_SSH",
      "UserPassCreds": "tuz_for_Nexus",
      "UserPassCredsNexus": "tuz_for_Nexus"
    },
    "installer": {
      // Компоненты DOT-инфраструктуры, необходимые для работы джобы, необходимо указать доступные версии
      "common": {
        "groupId": "groupId.CI0000_run4c",
        "artifactId": "AS_EFS_Installer.Common",
        "version": "D-01.000.00-000",
        "classifier": "distrib",
        "packaging": "zip"
      },
      "migration": {
        "groupId": "groupId.CI0000_run4c",
        "artifactId": "AS_EFS_Installer.Migration",
        "version": "D-01.000.00-000",
        "classifier": "distrib",
        "packaging": "zip"
      }
    },

    // Утилиты необходимые для работы джобы, так же нужно указать доступные в Jenkins версии
    "initToolList": {
      "mvn_tool": {
        "tool": "Maven 3.9.6",
        "subPath": "/bin",
        "homeDir": "MAVEN_HOME"
      },
      "yq_tool": {
        "tool": "yq-4.20.2"
      },
      "jq": {
        "tool": "jq-1.6"
      },
      "kubectl_tool": {
        "tool": "kubectl_v1.22"
      },
      "groovyToolName": {
        "tool": "groovy-4.0",
        "subPath": "/bin"
      },
      "helm": {
        "tool": "helm-v3.8.0"
      }
    },

    // Блок настройки "SEGMENT" (задается при создании джоб DOT) 
    "sowa-segment": {
      // Для репозиториев DOT (common, pipeline)
      "gitBaseUrl": "https://<адрес-git>/<git>-cd",
      "nexusMavenMetadataAuth": "true",
      // Для загруженных артефактов приложения
      "nexus_host": "https://<адрес-nexus>/<nexus>-cd",
      "nexusPathToArtifact": "repository",
      "nexus_repo": "nexus_repo",

      // Для поиска зависиимостей maven
      "mavenPluginsUrls": [
        "https://<адрес-nexus>/<nexus>-ci/repository/maven-public",
        "https://<адрес-nexus>/<nexus>-ci/repository/maven-central"
      ],
      "useMavenForDownload": "true",
      "nexus.repo.url": "https://<адрес-nexus>/<nexus>-cd/repository/"
    },
    "idParentStand": "null",
    "openshiftRegistry": "<адрес-registry>",
    "openshiftMultiClusters": "true",
    "openshiftMultiClustersNames": [
      // Название блока кластеров что указано в файле "subsystems.json"
      "dev-02"
    ],
    "openShiftNewPasswords": "true",
    "openshiftWaitForDeploySeconds": 240,
    "openshiftWaitForDeployPollInterval": 10,
    "openShiftPrecheck": "warning",
    "openshiftCheckConfNames": "warning"
  }
}

Deploy приложения#

После настройки конфигурационных файлов subsystems.json, multiClusters.json и environment.json необходимо выполнить шаги для установки приложения в кластер:

  1. Выполнить миграцию стендозависимых параметров из дистрибутива в репозиторий со стендозависимыми параметрами. Для этого нужно выполнить Deploy job с опцией MIGRATION_FP_CONF.

  2. Выполнить настройку стендозависимых параметров.

  3. Выполнить деплой приложения в Kubernetes, запустив Deploy job с параметром HELM_DEPLOY.

Обновление приложения#

Для обновления приложения необходимо повторно запустить Deploy job с параметром HELM_DEPLOY, выбрав необходимую версию дистрибутива.

Откат на предыдущую версию#

Откат компонента на предыдущую версию выполняется посредством развертывания артефактов предыдущей версии с предварительным удалением текущей версии.

  • Запускаем Deploy job с опцией HELM_UNDEPLOY для удаления

  • Затем запускаем Deploy job с параметром HELM_DEPLOY, выбрав необходимую версию дистрибутива.

Удаление ресурсов из namespace Kubernetes#

Удаление ресурсов из Kubernetes выполняется сценарием Deploy job с опцией HELM_UNDEPLOY.

Удаляются только объекты, подпадающие под фильтр, настроенный по полю объектов label.

Поле „label“ должно содержать параметры SUBSYSTEM и distribReleaseVersion, значения которых соответствуют значениям соответствующих параметров запуска Deploy job.

Предусловие#

Перед выполнением удаления рекомендуется проверить:

  • в Jenkins доступен Tool с kubectl;

  • наличие настройки имени tool в параметре kubectlToolName в environment.json;

  • наличие настройки имени tool в параметре helm в environment.json;

  • наличие настройки имени tool в параметре jqToolName в environment.json;

  • (опционально) для возможности удалять ресурсы, используя фильтр jq, должен быть доступен Tool с jq.