Как определить параллельные этапы Jenkinsfile во внешней функции? - PullRequest
0 голосов
/ 30 декабря 2018

Этот минимальный конвейер работает:

pipeline {
    agent any
    stages {
        stage('test') {
            parallel {
                stage('test-1') {
                    steps {
                        sh "echo test1"
                    }
                }
                stage('test-2') {
                    steps {
                        sh "echo test2"
                    }
                }
            }
        }
    }
}

У нас есть несколько этапов тестирования внутри блока parallel, поэтому мы сталкиваемся с слишком большим кодом метода * Ошибка 1006 *, которую, очевидно, парни из Jenkinsне планирую исправлять.

Я бы хотел, чтобы мои параллельные этапы были определены во внешней функции, например:

pipeline {
    agent any
    stages {
        stage('test') {
            parallel test_func()
        }
    }
}

def test_func() {
    return {
            stage('test-1') {
                steps {
                    sh "echo test1"
                }
            }
            stage('test-2') {
                steps {
                    sh "echo test2"
                }
            }
        }
}

Это, однако, не работает с большим количеством вариантовсинтаксис, который мы попробовали.

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 11 марта 2019

Проверьте мой ответ на этот вопрос .

Вам необходимо поместить параллельные этапы в переменную, а не в функцию.Таким образом, это может быть что-то вроде этого:

def test_func = [
    "test1": {
        echo "test1"
    },
    "test2": {
        echo "test2"
    }
]

pipeline {
    agent any
    stages {
        stage('test') {
            steps {
                script {
                    parallel test_func
                }
            }
        }
    }
}
0 голосов
/ 11 апреля 2019

Вы можете сделать это так:

def createStages() {
  stage_map = [:]
  stage_map.put('test-1', {echo 'test1'})
  stage_map.put('test-2', {echo 'test2'})
  return stage_map
}

pipeline {
  agent any
  stages {
    stage('test') {
      steps{
        script { parallel(createStages()) }
      }
    }
  }
}
0 голосов
/ 31 декабря 2018

Как видно из примеров здесь , он ожидает карту произвольного идентификатора в качестве ключа и замыкание, содержащее код в качестве значения.Так что-то (не проверено), как:

def test_func() {
    return [
        test1: {
            stage('test-1') {
                steps {
                    sh "echo test1"
                }
            }
        },
        test2: {
            stage('test-2') {
                steps {
                    sh "echo test2"
                }
            }
        }
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...