как вызвать параметры из скрипта Groovy Map для конвейера Jenkins - PullRequest
1 голос
/ 12 июня 2019

просто мне нужно написать конвейер jenkinsfile, который содержит варианты, и этот выбор прибывает из другого скриптового скрипта, который предоставляет карту на этой карте, я могу добавить имя среды и 3 значения DB, APP, WEB, поэтому, когда я начинаю создавать новую работу Я получаю сборку параметров с возможностью выбора имени среды DEV, QA, UAT и в соответствии с этим выбором она передаст карту / список из трех IP-адресов для DB, APP, WEB, чтобы я мог использовать эти значения во время сборки

/ env.groovy

def DEV = [ DB : 10.0.0.5 , APP : 10.0.0.10 , WEB : 10.0.0.15 ] 
def UAT = [ DB : 10.0.0.20 , APP : 10.0.0.25 , WEB : 10.0.0.30 ] 
def QA = [ DB : 10.0.0.35 , APP : 10.0.0.40 , WEB : 10.0.0.45 ] 

взять эти значения из файла env.groovy и передать их на выбор в Jenkinsfile, чтобы я мог получить раскрывающееся меню с помощью (DEV - UAT - QA) прежде чем я нажму build

Я не хочу добавлять эти значения в Jenkinsfile, мне нужно добавить его в отдельный скрипт groovy (env.groovy)

это для нового конвейера Jenkinsfile, который работает на сервере Ubuntu Jenkins

String[] env =  env()

pipeline {
    agent any
    properties([
            parameters([
                    choice(
                    choices: env,
                    description: 'Select the environment',
                    name: 'ENV',
                    )
            ])
    ])

    stages {
        stage('deploy') {
            steps {
                sh "echo ${ENV}"
            }
        }    
   }    
}

ожидание вывода списка переменных среды DB, APP и WEB, поэтому я могу быть уверен, что смогу передать эти значения другому сценарию оболочки, который добавлю позже для развертывания, но я не получил это меню на первом месте и я получаю эту ошибку

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 5: The ‘properties’ section has been renamed as of version 0.8. Use ‘options’ instead. @ line 5, column 5.
       properties([
       ^

1 error

    at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
    at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1085)
    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:603)
    at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:581)
    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:558)
    at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
    at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)
    at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
    at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.doParse(CpsGroovyShell.java:133)
    at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:126)
    at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:561)
    at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:522)
    at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:320)
    at hudson.model.ResourceController.execute(ResourceController.java:97)
    at hudson.model.Executor.run(Executor.java:429)
Finished: FAILURE

1 Ответ

0 голосов
/ 14 июня 2019

ИМХО, нет возможности напрямую использовать переменную в качестве имени карты, но у нас есть оператор switch.

Попробуйте это:

def map

pipeline {
    agent any

    parameters {
            choice( name: 'env', choices: ['DEV', 'UAT', 'QA'] , description: "Choose ENV?" )
    }

    stages {
        //I'm a bit lazy, in Your case use regular file :) 
        stage('create file') {
            steps {
                script {
                    sh "echo \"DEV = [ DB : '10.0.0.5' , APP : '10.0.0.10' , WEB : '10.0.0.15' ]\" > env.groovy"
                    sh "echo \"UAT = [ DB : '10.0.0.20' , APP : '10.0.0.25' , WEB : '10.0.0.30' ]\" >> env.groovy"
                    sh "echo \"QA = [ DB : '10.0.0.35' , APP : '10.0.0.40' , WEB : '10.0.0.45' ]\" >> env.groovy"
                }
            }
        }
        stage('switch time') {
            steps {
                script{
                    load "$JENKINS_HOME/workspace/box1/env.groovy"
                    switch (params.env) {
                    case 'DEV':
                        map = DEV
                        break
                    case 'UAT':
                        map = UAT
                        break
                    case 'QA':
                        map = QA
                        break
                    default:
                        map = []
                        break
                    }
                }
            }
        }
        stage('deploy') {
            steps {
                println map.DB
                println map.APP
                println map.WEB
            }
        }
    }
}

Ожидаемый результат:

Started by user 3sky
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] node
Running on Jenkins in /app/jenkins/home/workspace/box1
[Pipeline] {
[Pipeline] stage
[Pipeline] { (create file)
[Pipeline] script
[Pipeline] {
[Pipeline] sh
[box1] Running shell script
+ echo 'DEV = [ DB : '\''10.0.0.5'\'' , APP : '\''10.0.0.10'\'' , WEB : '\''10.0.0.15'\'' ]'
[Pipeline] sh
[box1] Running shell script
+ echo 'UAT = [ DB : '\''10.0.0.20'\'' , APP : '\''10.0.0.25'\'' , WEB : '\''10.0.0.30'\'' ]'
[Pipeline] sh
[box1] Running shell script
+ echo 'QA = [ DB : '\''10.0.0.35'\'' , APP : '\''10.0.0.40'\'' , WEB : '\''10.0.0.45'\'' ]'
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (switch time)
[Pipeline] script
[Pipeline] {
[Pipeline] load
[Pipeline] { (/app/jenkins/home/workspace/box1/env.groovy)
[Pipeline] }
[Pipeline] // load
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (deploy)
[Pipeline] echo
10.0.0.5
[Pipeline] echo
10.0.0.10
[Pipeline] echo
10.0.0.15
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...