Атрибуты Jenkins Pipeline Choices - PullRequest
       10

Атрибуты Jenkins Pipeline Choices

0 голосов
/ 23 октября 2018

У меня сложилось впечатление, что синтаксис выбора конвейера Jenkins поддерживает только статический список параметров, разделенных символом новой строки, и в настоящее время не поддерживает динамическое заполнение в результате выполнения функции groovy (скажем, возвращающей карту).

Однако, читая ядро ​​.net, я нашел этот пост.

. Меня особенно заинтересовал раздел одного из фрагментов кода конвейера:

parameters {
    choice(choices: services, description: 'Name of the ECS service to deploy', name: 'serviceName')
    choice(choices: services, description: 'Name of Docker image to update', name: 'imageName')
    string(defaultValue: 'Tag to deploy', description: 'Docker image tag', name: 'tag')
}
  1. Где и как задается / заполняется переменная services?
  2. Что такое тип services?Это какая-то карта (стоимость и описание)?

Заранее спасибо.

1 Ответ

0 голосов
/ 23 октября 2018

Переменная services здесь, скорее всего, является либо строкой с символами новой строки (services = "choice a/nchoice b"), либо списком (services = ["choice a", "choice b"]. Оба работают в эти дни.

Я думаю, вы можете установитьпеременная в директиве environment, а затем использовать ее в parameters [на самом деле версия environment не работает] или (возможно, зло) вне pipeline:

List<String> CHOICES = ["a", "b", "c"]

pipeline {

    agent any

    options {
        timestamps()
    }

    parameters {
        choice(name: 'CHOICE', choices: CHOICES, description: 'Who to greet?')
    }

    stages {

        stage("test") {
            steps {
                echo params.CHOICE
            }
        }
    }

}

Я однажды использовал это, чтобы получить все метки образов Docker в нашем реестре, чтобы выбрать, какой из них должен быть развернут. Есть несколько проблем с этим:

  1. Это AFAIK, полностью недокументированный, поэтомуможет просто со временем перестать работать.
  2. Код выполняется каждый раз, когда читается Jenkinsfile. Он настраивает задание, поэтому параметры меняются для следующей сборки . Так что в моем случае яполучил только метки, которые существовали во время последней сборки, а не существующие в настоящее время.
...