Jenkins - отключить остановку / отмену для одного этапа - PullRequest
1 голос
/ 20 февраля 2020

В многоотраслевом конвейере groovy на Jenkins у меня есть один шаг, который я не хочу, чтобы какой-либо пользователь мог прервать через пользовательский интерфейс. Однако любой другой шаг должен быть отменен. См. Пример определения конвейера:

#!/usr/bin/env groovy

node {
    stage("I can be aborted") {
      // run some scripts etc here
    }

    stage("I cannot be aborted") {
      // some code that will complete even if stop / abort is pressed
    }

    stage("I will run if the build was not stopped before and can be stopped") {
      // rest of the pipeline
    }

}

TLDR; заблокировать возможность останавливать сборку Дженкинса на каждой стадии

Возможно ли это?

1 Ответ

1 голос
/ 20 февраля 2020

Когда пользователь прерывает сборку, выполняемый код обычно выдает AbortException , хотя он также может выдавать InterruptedException (я видел, что когда этап прерывается во время выполнения сценарий оболочки).

Поскольку ваш конвейер находится в groovy, вы можете использовать try/catch блоки для получения желаемого поведения:

#!/usr/bin/env groovy

import groovy.transform.Field // see https://stackoverflow.com/a/50573082/6692227

@Field boolean stopBuild = false

node {
    stage("I can be aborted") {
      // run some scripts etc here
    }

    stage("I cannot be aborted") {
      try {
        // some code that will complete even if stop / abort is pressed
      } catch (AbortException ex) {
        currentBuild.result = "UNSTABLE" // or whatever
        echo "User tried to abort but that's not allowed"
        stopBuild = true
      }
    }

    stage("I will run if the build was not stopped before and can be stopped") {
      if (stopBuild) return

      // rest of the pipeline
    }

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