Jenkins: Создание динамических полей из вызовов API

В этой статье мы покажем, как создавать динамические поля на основе вызова API для параметризованных сборок в Jenkins. Для этого мы будем использовать cURL, Groovy, JsonSlurper, JSON и плагин Active Choices.

Чтобы проиллюстрировать использование, мы сделаем вызов IBGE API, возвращающий данные по штатам Бразилии. Ниже приведен пример возвращаемого им JSON:

[
    {
        "id": 11,
        "sigla": "RO",
        "nome": "Rondônia",
        "regiao": {
            "id": 1,
            "sigla": "N",
            "nome": "Norte"
        }
    },
    {
        "id": 12,
        "sigla": "AC",
        "nome": "Acre",
        "regiao": {
            "id": 1,
            "sigla": "N",
            "nome": "Norte"
        }
    },
    ...
]
Войдите в полноэкранный режим Выход из полноэкранного режима

Здесь мы возьмем только состояния штатов, хранящиеся в поле sigla, и заполним single select из Active Choices (который уже должен быть установлен):

Вы можете протестировать API с помощью Postman, отправив запрос типа GET на https://servicodados.ibge.gov.br/api/v1/localidades/estados.

Перейдем к коду трубопровода:

import groovy.json.JsonSlurperClassic
node {
    properties([
        parameters([
            [$class: 'ChoiceParameter',
                choiceType: 'PT_SINGLE_SELECT',
                description: 'Selecione o Estado',
                name: 'estado',
                script: [$class: 'GroovyScript',
                    script: [
                        sandbox: false,
                        classpath: [],
                        script: 
                            """
                            import groovy.json.JsonSlurperClassic
                            def proc = "curl -s -H 'Accept:application/json;charset=UTF-8' https://servicodados.ibge.gov.br/api/v1/localidades/estados".execute()
                            proc.waitFor()

                            def output = proc.in.text
                            def exit_code = proc.exitValue()
                            def error = proc.err.text

                            if (error) {
                                print("Std err: ${error}")
                                print("Process exit code ${exitcode}")
                                return exitcode
                            }

                            def json = new JsonSlurperClassic().parseText(output)

                            def siglas = []

                            json.each { v ->
                                siglas.push(v.sigla)
                            }

                            return siglas.sort()
                            """
                    ]
                ]
            ]
        ])
    ])

    stage('Estágio único') {         
            print("O Estado escolhido foi ${estado}.")         
    }
}
Войдите в полноэкранный режим Выход из полноэкранного режима

С помощью функции parameters() мы определяем список со всеми параметрами, которые будут у нашего задания. В данном случае мы определяем только одно поле типа ChoiceParameter. Нам нужно указать тип выбора, установив его в PT_SINGLE_SELECT, дать ему имя с помощью свойства name, а затем написать Groovy-скрипт, который будет выполняться для генерации опций для поля.

Важно: Каждый скрипт, размещенный здесь, должен возвращать список для заполнения поля.

Здесь мы используем библиотеку JsonSlurper для десериализации JSON, преобразования его в массив Groovy, а затем перебираем его, возвращая только UF.

Наконец, у нас есть единственный этап в конвейере, печатающий на экране UF выбранного состояния.

Некоторые важные моменты:

  • Для достижения конечной цели можно использовать как скриптовые, так и декларативные конвейеры. Даже если вы не хотите помещать параметры внутрь кода конвейера, вы можете это сделать (хотя я не рекомендую этого делать);

  • Вам может понадобиться разрешить запуск скриптов и библиотек в области Jenkins Management;

  • Плагин Active Choices имеет другие типы полей, включая реактивные (представьте ситуацию, когда у вас есть два поля, A и B, и значения B зависят от того, что было выбрано в A);

  • Для того чтобы опция Build with parameters стала доступна, может потребоваться неудачное выполнение задания (это нормально).

 Устранение неполадок

Чтобы лучше отслеживать выполнение сценария Groovy для Active Choices, вы можете создать специально для него регистратор. Это полезно, когда вы хотите отделить отладку этого сценария от основного конвейера. Для этого перейдите в Manage Jenkins > System Log > Нажмите Add new log recorder > Дайте ему имя, например «ActiveChoices» > Нажмите Add > В поле Logger введите org.biouno.unochoice, выберите нужный уровень и нажмите Save.

 Ссылки

  • Официальная документация по плагину

  • Устранение неполадок с плагином

  • Сообщение о программе Active Choices и ее возможностях

Оцените статью
devanswers.ru
Добавить комментарий