CanaryProcessor.groovy#

Описание всех нижеприведенных Jenkins Jobs расположено в подразделе «Pipelines» раздела «Дополнительная документация» документа «Руководство оператора».

Jenkins библиотека канареечного развертывания компонент Synapse.#

Описание функционала:

  • Формирование ArrayList, где элементами является Map, содержащая в себе информацию по template в разрезе канареечного развертывания;

  • Определение необходимости в канареечном развертывании компоненты путем поиска Deployment в проекте системы оркестрации приложений. Поиск Deployment происходит по регулярному выражению - ${deploymentName}(\$|-${config.distribPrefix.toLowerCase()}-\\d+-\\d\\d\\d-00-\\d{2,3}-(\\d+|(\\w+-\\d+)));

  • Если включен флаг необходимости канареечного развертывания и сегмент Dev, то, при нахождении предыдущей версии приложения, будет включено канареечное развертывание;

  • Если выключен флаг необходимости канареечного развертывания и сегмент не Dev, то пользователю выводится соответствующее окно, в котором запрашивается подтверждение на переход к канареечной установке вместо обычной. Пользователь может отказаться от перехода к канареечной установке и установить обычным способом.

    need_canary

    Рисунок. Необходимость канареечного развертывания

  • Если передается шлюз типа "-all", то происходит поиск шлюзов, которые были объединены. В найденных конфигурационных файлах происходит генерация новой версии для канареечного развертывания;

  • Генерация конфигурационных файлов для канареечного развертывания для сервиса Kafka-адаптера;

  • Определяется, есть ли HorizontalPodAutoscaler в дистрибутиве или в проекте для корректной установки компоненты с HorizontalPodAutoscaler;

  • Генерируется HorizontalPodAutoscaler для канареечного развертывания, если в дистрибутиве или в проекте есть HorizontalPodAutoscaler для устанавливаемой компоненты;

  • Определение полного списка VirtualService, в которых будет производиться изменение весов;

  • Определение старой версии приложения (Версия на которую было подано 100% нагрузки перед установкой новой версии);

  • Определение ConfigMap для которых будет производиться изменение конфигурации вычитки из mq-очереди (для шлюзов);

  • Получение текущего процента нагрузки (веса) направляемого на указанную версию приложения. Если в VirtualService указана одна версия приложения или при запуске Jenkins Job была указана некорректная версия, то сформируется соответствующая ошибка (для случая когда вызывается метод в Jenkins Job ChangeCanaryWeight);

  • Получение текущих параметров вычитки из очереди (limitForPeriod и limitRefreshPeriod) (для шлюзов в случае когда шаг вызываться в Jenkins Job ChangeCanaryWeight);

  • Цикличный или разовый (в зависимости от выбранного режима работы), запрос веса (и параметров вычитки из очереди для шлюзов и параметра tpsPerMinute для Kafka-адаптера), который необходимо установить (для Jenkins Jobs SynapseInstaller/MultiClusterInstaller всегда цикличный)

  • Изменение веса (и параметров вычитки из очереди для шлюзов и tpsPerMinute для Kafka-адаптера) на заданную величину;

  • При изменении веса -all шлюза, введенный вес применяется для всех связанных шлюзов;

Методы с входными параметрами

Описание

static processCanary(script, String folder, String canaryType, String templateName, Map config, DevCommon dev)

/**
* Метод проверки шаблона на возможность канареечного развертывания
* @param script - среда jenkins
* @param folder - директория файлов шаблонов
* @param canaryType - тип канареечного развертывания
* @param templateName - имя шаблона
* @param config - файл с конфигурацией devopslib
* @param dev - экземпляр класса DevCommon
* @return - возвращает null, если канареечное развертывания для шаблона не нужно;
* возвращает Map с необходимой информацией для канареечного развертывания
*/

private static List getHosts(configDataList)

/**
* Метод получения списка хостов на основе списка конфигурационных файлов
* @param configDataList - список из данных конфигураций
* @return - список хостов
*/

private static List getYamlData(script, Map config, DevCommon dev, glob)

/**
* Метод получения конфигураций с локацией по маске
* @param script - среда jenkins
* @param glob - маска
* @return - список конфигураций в виде [[data: data_from_config, location: path_to_config], …]
*/

private static String getTemplateType(configDataList, templateName, canaryType)

/**
* Метод получения типа шаблонов
* @param configDataList - список из данных конфигураций
* @param templateName - имя шаблона
* @param canaryType - тип канареечного развертывания
* @return - тип шаблона
*/

private static checkIfEvenCanaryIsNeeded(script, config, dev, canaryConfigDataList, templateType, templateName)

/**
* Метод для определении необходимости канареечного развертывания
* @param script - среда jenkins
* @param config - файл с конфигурацией devopslib
* @param dev - экземпляр класса DevCommon
* @param canaryConfigDataList - список из данных канареечных конфигураций
* @param templateType - тип шаблона
* @param templateName - имя шаблона
* @return - нужна ли канарейка для данного шаблона
*/

private static getCanaryConfigsWithLocation(configDataListWithLocation, templateType, templateName)

/**
* Метод получения конфигураций необходимых для канареечного развертывания с их локацией
* @param script - среда jenkins
* @param config - файл с конфигурацией devopslib
* @param deploymentName - имя Deployment
* @return - возвращает ArrayList с найденными deployment
*/

static getOldDeployments(script, config, deploymentName)

/**
* Метод 2 этапа проверки необходимости канареечного развертывания (в проекте системы оркестрации приложений присутствуют предыдущие версии deployment)
* @param script - среда jenkins
* @param config - файл с конфигурацией devopslib
* @param deploymentName - имя Deployment
* @return - возвращает ArrayList с найденными deployment
*/

static createParameterForConfGen(script, config, entry)

/**
* Метод заполнения параметров для config_generator
* @param script - среда jenkins
* @param config - файл с конфигурацией devopslib
* @param entry - map с информацией по template
* @return - возвращает ArrayList: параметры к скрипту формирования конфигураций канареечного развертывания,
* ArrayList с предыдущими версиями файлов, до обработки, которые будут удалены
*/

static createParameterForConfGenChWeight(script, entry, inputData)

/**
* Метод заполнения параметров для config_generator (изменение веса)
* @param script - среда jenkins
* @param entry - map с информацией по template
* @param inputData - map с значениями весов нагрузки на новую версию приложения
* @return - возвращает ArrayList: параметры к скрипту формирования конфигураций с измененными значениями весов,
* ArrayList с конфигурациями, которые будут загружены в проект системы оркестрации приложений
*/

static changeLocationAfterProcess(script, Map config, DevCommon dev, entry)

/**
* Метод дополнения Map с информацией по канареечному развертыванию
* @param script - среда jenkins
* @param config - файл с конфигурацией devopslib
* @param entry - map с информацией по template
* @return - возвращает обновленную Map с информацией по канареечному развертыванию
*/

static changeCanaryWeight(script, config, dev)

/**
* Метод-оркестратор изменения нагрузки на новую версию приложения (для каждой Map, сформированной в рамках сборки Jenkins)
* @param script - среда jenkins
* @param config - файл с конфигурацией devopslib
* @param dev - экземпляр класса DevCommon
* @return
*/

private static cycleChCanWeight(script, actualInputs, entry, config, dev)

/**
* Метод с циклом изменения нагрузки на новую версию приложения в проекте системы оркестрации приложений
* @param script - среда jenkins
* @param actualInputs - значения нагрузки на новую версию приложения в проекте системы оркестрации приложений
* @param entry - map с информацией по template
* @param config - файл с конфигурацией devopslib
* @param dev - экземпляр класса DevCommon
* @return
*/

static processChCanaryWeight(script, config, DevCommon dev, virtualServiceName, subset, configMapName)

/**
* Метод с заполнения Map с информацией по изменению веса (ChangeCanaryWeight)
* @param script - среда jenkins
* @param config - файл с конфигурацией devopslib
* @param virtualServiceName - наименование VirtualService
* @param subset - наименование subset
* @param configMapName - наименование ConfigMap
* @return actualInputs - возвращает текущие значения нагрузки на выбранное приложение
*/

static findAndDeleteOldResources(script, config, dev)

/**
* Метод поиска удаления неактуальных ресурсов из проекта системы оркестрации приложений (самый старый из 3 Deployment, которые есть на проекте; удаления самого первого сабсета из 3;
* удаление старой ConfigMap)
* @param script - среда jenkins
* @param config - файл с конфигурацией devopslib
* @param dev - экземпляр класса DevCommon
* @return
*/