Используйте конвейер Jenkins в библиотеке, но добавьте дополнительный этап - PullRequest
1 голос
/ 22 мая 2019

У нас есть много-много проектов, каждый из которых имеет свой собственный Jenkinsfile, который просто выполняет конвейер, определенный в нашей общей библиотеке.Конвейер гарантирует, что все проекты собраны, упакованы и установлены одинаково точно.

project-a / Jenkinsfile

library 'the-shared-library'

buildProject name: 'project-a', buildApi: true, ...

the-shared-library / vars / buildProject.groovy

def call(Map config) {
  pipeline {
    // standard stages go here
  }
}

Мы хотим расширить это, чтобы допустить выполнение дополнительного этапа во время конвейера для определенных проектов (например, 1 из многих),Я думал сделать это следующим образом, если возможно:

  1. передать параметр конфигурации, который является этапом, в buildProject
  2. в buildProject.call, если пользовательский этап былпри условии, прикрепите его к концу конвейера или, возможно, между двумя (известными) этапами и запустите его

Как-то так ...

project-a / Jenkinsfile

library 'the-shared-library'

def myCustomStage = ... // not sure how

buildProject name: 'project-a', buildApi: true, ..., customStage: myCustomStage

the-shared-library / vars / buildProject.groovy

def call(Map config) {
  def customStage = config.customStage

  pipeline {
    // standard stages 1 through 3
    // if customStage provided, it goes here
    // standard stages 5 through 5
  }
}

Я не уверен, что является правильнымрешение здесь.

1 Ответ

0 голосов
/ 23 мая 2019

Я не тестировал, но что-то вроде этого должно работать:

//project-a/Jenkinsfile
library 'the-shared-library'

def myCustomStage = { echo 'Hello' }

buildProject name: 'project-a', buildApi: true, ..., myCustomStage
//the-shared-library/vars/buildProject.groovy
def call(Map config, Closure customStage=null) {
  def customStage = config.customStage

  pipeline {
    // standard stages 1 through 3
    // if customStage provided, it goes here
    stage('Conditional'){
      when{
        expression { customStage }
      }
      steps { script {customStage()} }
    // standard stages 5 through 5
  }
}

см. Могу ли я использовать Closure для определения этапа в декларативном конвейере Jenkins?

...