Декларативный конвейер Jenkins: как ждать до и после ввода, когда директива - PullRequest
0 голосов
/ 09 января 2020

В моем Jenkinsfile у меня есть 2 этапа: Pre Live и Live. Я спрашиваю пользователя для ввода на этапе Pre Live, чтобы узнать, нужно ли выполнять развертывание в предварительно живой среде, а затем на этапе Live, я снова спрашиваю пользователя для ввода, чтобы знать, делать ли развертывание в живой среде или нет .

Мне удалось это реализовать. Вот как выглядит код:

stage("Pre Live") {
  input {
    message 'Deploy to Pre Live?'
    parameters {
      booleanParam(name: 'RELEASE_PRE_LIVE', defaultValue: false)
    }
  }

  when {
    beforeInput false
    expression {
      return RELEASE_PRE_LIVE.toBoolean()
    }
  }

  steps {
    // ...
  }
}

stage("Live") {
  input {
    message 'Deploy to Live?'
    parameters {
      booleanParam(name: 'RELEASE_LIVE', defaultValue: false)
    }
  }

  when {
    beforeInput false
    expression {
      return RELEASE_LIVE.toBoolean()
    }
  }

  steps {
    // ...
  }
}

Что я не могу сделать, однако, это слишком сохранить все эти логи c, но также запрашивать ввод на этапе Live, если предыдущий этап (Pre Live) был выполнен. Обычно это можно сделать с помощью директивы when на этапе Live, но проблема в том, что мне нужна моя директива when на этом этапе для оценки после input, потому что мне нужно знать значение input если пользователь хочет развернуть, чтобы жить или нет, но я также не хочу без необходимости ждать input на этом этапе, если Pre Live никогда не запускался, потому что это не имеет смысла.

Ответы [ 2 ]

0 голосов
/ 09 января 2020

Я полагаю, что вы можете осуществить дополнительную проверку, установив и передав переменную из этапа Pre-Live в этап Live. Затем воздействуя на эту переменную на сцене Live.

У вас уже есть эта следующая часть, но я подумал, что это будет хорошо для контекста.

Оценка, когда перед директивой ввода

By по умолчанию условие when для этапа не будет оцениваться до ввода, если оно определено. Однако , это можно изменить, указав параметр beforeInput в блоке when. Если beforeInput установлен в значение true, условие when будет оцениваться первым, а вход будет вводиться только если условие when оценивается как true.

beforeInput true имеет приоритет перед beforeAgent true.

From: https://jenkins.io/doc/book/pipeline/syntax/#when

0 голосов
/ 09 января 2020

Рассматривали ли вы использование шага сборки, который запускает другой конвейер и разбивает ваш конвейер на два конвейера вместо одного?

Вот пример статьи для декларативного синтаксиса конвейера: https://support.cloudbees.com/hc/en-us/articles/360019828412-Pipeline-How-to-write-a-declarative-pipeline-to-invoke-another-job

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...