Дженкинс: Как пропустить определенный этап в многоотраслевом конвейере?

У нас есть "сцена (сборка)" во всех наших филиалах. Временно, как мы можем пропустить этот этап, чтобы запустить все наши ветви в многоотраслевом конвейере. Я знаю, что одним из решений является использование, когда условие на стадии, и попросить всех разработчиков перенести эту ветку в свою ветку. Но это много работы и координации. Вместо этого я ищу глобальную конфигурацию, где мы можем просто пропустить этап по имени в любой ветви.

3 ответа

Решение

Похоже, вы держите Jenkinsfile рядом с кодом, но хотите изменить работу Jenkinsfile с административной точки зрения.

Вы можете сохранить этот этап в отдельном репозитории (контроль версий). Перед выполнением этапа загрузите репозиторий, затем загрузите файл сценария и на этапе выполните метод, определенный в этом файле.

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

Как насчет этого подхода?

  stage('build') { 

    if(buildFlag=="disable"){
      //jump to next stage
      return;
    }
    //do something
  } 

buildFlag может быть

  • простая переменная в том же конвейере
  • глобальная переменная, настроенная в jenkins. Вы можете временно отключить, чтобы пропустить этап сборки, и переключиться на включенный, чтобы восстановить нормальное состояние.

Также вы можете установить статус на сбой, вместо возврата:

currentBuild.result = 'FAILURE'

Или выбросить исключение и выйти из всей работы или конвейера.

Один из вариантов — пропустить тело этапа, если выполняется условие. Например:

        stage('Unit Tests') {
    steps {
      script{
        if (env.branch.startsWith(releaseBranch)} {
           echo 'Running unit tests with coverage...'
        } else {
           // run actual unit tests
        }
      }
    }
  }

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

Если вы хотите полностью удалить этап для ветки, используйте директиву when .

      stage('deploy') {
        when {
            branch 'production'
        }
        steps {
            echo 'Deploying'
        }
 }

Бонус: вы также можете указать директиву «когда нет». См. Как указать, когда ветвь НЕ (имя ветви) в jenkinsfile?

Другие вопросы по тегам