Возможно ли иметь «сборки сейчас» и «сборки с параметрами», сосуществующих в конвейере Jenkins? - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь настроить конвейер Jenkins через jenkinsfile для параметризованной сборки (например, целью является запуск поднабора тестовых наборов, когда для определенного флага установлено значение «on»).

Iнаткнулся на статью ниже о «параметризованном конвейере Дженкинса», где говорится, что, добавив шаг «свойства», я могу достичь того, что мне нужно.

https://st -g.de / 2016/12 / параметризованные-jenkins-pipelines

Однако теперь кнопка «построить сейчас» изменится на «построить с кнопкой параметров, и каждый раз, когда запускается конвейер, пользователю нужно будет ввести значение параметра вручную, прежде чем можно будет начать сборку.

properties([
  parameters([
    string(name: 'DEPLOY_ENV', defaultValue: 'TESTING', description: 'The target environment', )
   ])
])

enter image description here

Но это также плохо, если моя сборка Jenkins вызвана изменением кода, не так ли?Поскольку каждый раз, когда фиксация изменения кода запускает сборку, пользователь должен ввести параметр вручную, прежде чем сборка может начаться.

Есть ли способ сохранить обе кнопки или аналогичный подход, чтобы включить автоматическую сборку дляиспользовать значение по умолчанию «properties» при запуске кода коммитом, в то время как пользователь может иногда запустить сборку вручную, введя значение «properties» в пользовательском интерфейсе Jenkins?

1 Ответ

0 голосов
/ 08 декабря 2018

Сборки по-прежнему будут запускаться Webhooks при изменениях commit / pr и т. Д. Задания будут только начинаться с использованием значений по умолчанию (для списков это означает первый элемент в списке).Они по существу обходят страницу параметров.

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

Если вы хотите иметь другой набор «значений по умолчанию» для людей по сравнению с автоматизированными сборками, вы можете добавить код в свой конвейер, чтобы различать «автоматический» старт (web-hook) и"Human" Kickoff.

Мы проверяем, является ли пользователь стартовым или автоматическим стартовым, используя следующую функцию в нашей общей библиотеке

/**
 * Checks if job causes contain Non-automated causes
 * Either
 *** Run by a User
 *** Rebuilt by a User
 *** Replayed by a User
 * Return true if  non automated cause found
 *
 * @return boolean
 */
boolean hasNonAutomatedCauses() {

    List nonAutomatedCauses = ['UserIdCause', 'ReplayCause']

    List intersection = []
    intersection = nonAutomatedCauses.intersect(getCauses())
    // if no user triggered causes are found means intersection is empty and then return false
    return !intersection.isEmpty()
}

Затем вы можете изменить свойства для автоматизированногопричина:

/**
 * Change param value during build
 *
 * @param paramName new or existing param name
 * @param paramValue param value
 * @return nothing
 */
def setParam(String paramName, String paramValue) {
    List<ParameterValue> newParams = new ArrayList<>();
    newParams.add(new StringParameterValue(paramName, paramValue))
    try {
        $build().addOrReplaceAction($build().getAction(ParametersAction.class).createUpdated(newParams))
    } catch (err) {
        $build().addOrReplaceAction(new ParametersAction(newParams))
    }
}
...