Конвейер Jenkins определяет, предназначена ли ветвь для запроса на получение Bitbucket - PullRequest
2 голосов
/ 16 марта 2020

Я использую Jenkins вместе с плагином Bitbucket Branch Source .

Все отлично работает, но я хочу иметь возможность запускать / исключать определенные этапы в моем конвейере в зависимости от того, связана ли ветвь с запросом на удаление или нет, например:

pipeline {
  stages {
    stage('build') {
      //compile
    }    
    stage('package') {
      when {
        environment name: 'IS_PULL_REQUEST', value: 'true'
      }      
      //create deployable package
    }
  }
}

Дженкинс знает, когда ветвь предназначена для PR, потому что она объединяет источник с целью, а также отображает ветку в папке запросов на извлечение на странице многоотраслевого конвейера.

Существует ли переменная среды, которую я могу использовать в конвейер для исключения / включения этапов?

Ответы [ 2 ]

4 голосов
/ 16 марта 2020

Вы можете использовать переменные окружения BRANCH_NAME и CHANGE_ID для обнаружения запросов на извлечение. Когда вы запускаете многоотраслевую конвейерную сборку из ветви (перед созданием запроса на извлечение), задаются следующие переменные среды:

  • env.BRANCH_NAME устанавливается в качестве имени ветви репозитория (например, develop) ,
  • env.CHANGE_BRANCH равно null,
  • env.CHANGE_ID равно null.

Но как только вы создаете запрос на извлечение, тогда:

  • env.BRANCH_NAME устанавливается на имя PR- \ d + (например, PR-11),
  • env.CHANGE_BRANCH устанавливается на реальное имя ветви (например, develop),
  • env.CHANGE_ID установлен на идентификатор запроса извлечения (например, 11).

Я использую следующее условие when в своих конвейерах для обнаружения запросов извлечения:

when {
    expression {
        // True for pull requests, false otherwise.
        env.CHANGE_ID && env.BRANCH_NAME.startsWith("PR-")
    }
}
0 голосов
/ 17 марта 2020

В декларативных конвейерах вы также можете использовать встроенное условие changeRequest внутри директивы when, чтобы определить, связана ли ветвь с запросом на извлечение.

stage('package') {
  when {
    changeRequest()
  }      
  //create deployable package
}

Вы также можете проверить если запрос на получение адресов направлен на конкретную ветку:

stage('package') {
  when {
    changeRequest target: 'master'
  }      
  //create deployable package
}

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

...