Выполнение двух одинаковых конвейеров Jenkinsfile без дублирования кода - PullRequest
1 голос
/ 01 апреля 2019

Я использую Jenkins с декларативным конвейером для постоянного тестирования одного из моих проектов на Python.Я хотел бы обобщить свой Jenkinsfile для тестирования моего проекта с несколькими версиями Python, возможно, параллельно.Допустим, мой текущий Jenkinsfile выглядит следующим образом:

pipeline {
  stages {
    stage('Checkout') {
      dir("src") {
        steps {
          checkout scm
        }
      }
    }
    stage('Install') {
      sh """
      python3.4 -m venv virtualenv
      source virtualenv/bin/activate
      python3.4 -m pip install src
      """
    }
  }
}

Я попытался параметризовать генерацию конвейера, переместив его в функцию, следующим образом:

def generatePipeline(version) {
  pipeline {
    stages {
      stage('Checkout') {
        dir("src") {
          steps {
            checkout scm
          }
        }
      }
      stage('Install') {
        sh """
        python${version} -m venv virtualenv
        source virtualenv/bin/activate
        python${version} -m pip install src
        """
      }
    }
  }
}

generatePipeline("3.4")

Jenkinsне удается с сообщением java.lang.NoSuchMethodError: No such DSL method 'stages' found among steps (следует огромный список) .

Я неудачно обработал множество других вещей (включая помещение generatePipeline в общую библиотеку), но я нене очень понимаю, как работают декларативные конвейеры (или даже Groovy).Есть ли способ создать несколько похожих конвейеров без дублирования всего распространенного кода?

1 Ответ

2 голосов
/ 02 апреля 2019

Вы должны передать контекст сценария конвейера в ваш метод и вызвать из него pipline.


    def generatePipeline(version, context) {
        context.pipeline {
            stages {
                //...
            }
        }
    }

    generatePipeline("3.4", this)

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