Общий конвейер с jenkins-shared-библиотеками - PullRequest
0 голосов
/ 09 января 2020

Я храню Jenkinsfile в своих репозиториях "lean":

@Library('utils') _
def svcName = currentBuild.rawBuild.project.parent.displayName
def sharedLibrary = new pythonApps()

def buildCommands = [ compileData: "python compile.py" ]


timestamps {
    commonPipeline(sharedLibrary, svcName, buildCommands)
}

commonPipeline.groovy находится внутри общей библиотеки в vars/. Вот оно (усечено):

#!/usr/bin/env groovy
def call(sharedLibrary, svcName, buildCommands) {
    pipeline {
        agent { ... }
        stages {
            stage('Compilation') {
                steps {
                    script {
                        sharedLibrary.executeStage("compile", buildCommands['compileData'])
                    }
                }
            }
            ... other stages ...
        }
    }
}

Я хотел бы разрешить нескольким командам с несколькими целями использовать один и тот же конвейер, но с другим sharedLibrary.

Проблема возникает, когда Мне нужны определенные задания для передачи параметров. Я попытался добавить раздел параметров в executeStage разделяемой библиотеки, но согласно: https://jenkins.io/doc/book/pipeline/syntax/#parameters параметры могут быть только внутри блока pipeline или stage, где в executeStage I Я нахожусь в steps блоке.

Как это сделать?

Ответы [ 2 ]

0 голосов
/ 09 января 2020

Нашел способность. Я могу добавить внутрь executeStage это:

def executeStage(...) {
    properties([
        parameters([
            booleanParam(defaultValue: false, name: 'test')
        ])
    ])
    ...
}
0 голосов
/ 09 января 2020

Параметры должны быть определены до запуска конвейера. Например, метка, для которой запускается конвейер, может входить в параметры, поэтому ее необходимо определить до выбора агента, а не после его выделения.

В качестве примечания, функциональность "такой же но разные «инструкции по сборке» обычно достигаются при наличии разных конвейеров с одной и той же общей библиотекой, а не наоборот. Цель держать Jenkinsfile очень короткой, вероятно, не была на радаре дизайнеров. При этом, если вы определенно возражаете против определения конвейера в Jenkinsfile, вы можете попробовать задать параметры в разных ветвях вашей библиотеки.

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