Этапы на основе списка на Jenkinsfile - PullRequest
0 голосов
/ 29 октября 2018

У меня есть что-то вроде этого:

def projects = [
  "foo",
  "bar",
  "foobar",
  "etc",
]

pipeline {
  agent any
  stages {
    stage('lint') {
      parallel {
        stage('lint: foo') {
          steps {
            sh "lint foo"
          }
        }
        stage('lint: bar') {
          steps {
            sh "lint bar"
          }
        }
        stage('lint: foobar') {
          steps {
            sh "lint foobar"
          }
        }
      }
    }
  }
}

Я действительно не хотел повторяться там, есть ли способ, которым я могу "генерировать" код stage для каждого проекта?

Я смог сделать нечто подобное, без parallel части с этим:

pipeline {
  agent any
  stages {
    stage('initialize') {
      steps {
        script {
          for (int i = 0; i < projects.size(); i++) {
            stage("lint: ${projects[i]}") {
              sh "lint ${project}"
            }
          }
        }
      }
    }
  }
}

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 30 октября 2018

Для скриптового конвейера вы можете использовать что-то вроде:

def projects = [
  "foo",
  "bar",
  "foobar",
  "etc",
]

Map branches = [:]
projects.each { String project ->
    branches[project] = {
        stage(project) {
            node {
                // I assume we need to checkout something, e.g. using git or checkout step...
                // git ...
                sh "lint ${project}"
            }
        }
    }
}

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