在管道中使用参数时,Jenkins语法错误

我有一个jenkins设置,每个Prod和UAT都有一个从属节点。我需要运行一个作业,以便如果用户选择uat1或uat2之一,则该作业将在UAT节点上运行。如果用户选择生产,则应在“生产”节点中运行作业。这项工作涉及  1.从git下载要执行的代码  2.根据选择的是UAT还是Prod,ec2实例应扮演适当的角色

在下面的代码中,我尝试运行为作业设置参数以及在主节点上选择节点的第一阶段。此后,我在脚本内部使用了一个脚本来为agentLabel变量提供一个值,以便在后续步骤中使用它,以便作业在适当的nde上运行。

    pipeline {
    agent {
        label 'master'
    }

    stages {
        stage('Get Inputs') {
            steps {
                parameters {
                    string(
                        name: 'branch',defaultvalue: 'master',description: 'Branch of code to be deployed'
                    )
                    choice(
                        name: 'service',choices: 'calcs-service\naudits-service\nrate-alerts',description: 'Service to be cleaned'
                    )
                    choice(
                        name: 'environment',choices: 'uat1\nuat2\nprod',description: 'Environement whose services need cleanup'
                    )
                }
                script {
                    switch("${environment}") {
                        case uat1:
                            agentLabel = 'uat'
                        case uat2:
                            agentLabel = 'uat'
                        case prod:
                            agentLabel = 'prod'
                    }
                }
            }
        }
        stage('Clone cleanup_lambda_functions') {
            agent { 
                label "${agentLabel}"
            }
            steps {
                checkout([$class: 'GitSCM',branches: [[name: "*/${branch}"]],doGenerateSubmoduleConfigurations: false,extensions: [],submoduleCfg: [],userRemoteConfigs: [[url: 'git@bitbucket.org:canstar-dev/devops.git']]])
            }
        }
        stage('Clean up Lambda un UAT') {
            agent { 
                label "${agentLabel}"
            }
            when {
                expression {"${agentLabel}" == 'uat'}
            }
            steps {
                 withAWS(role: 'arn:aws:iam::000000000006:role/cns-iam-role-delete-lambda-version') {
                    ansiColor('xterm') {
                        sh '''
                            set -x
                            set -eo pipefail
                            echo "Assumed Support role for:"
                            echo "${environment}"
                        '''
                    }
                }
            }
        }
        stage('Clean up Lambda un Prod') {
            agent { 
                label "${agentLabel}"
            }
            when {
                expression {"${agentLabel}" == 'prod'}
            }
            steps {
                 withAWS(role: 'arn:aws:iam::0000000000005:role/cns-iam-role-delete-lambda-version') {
                    ansiColor('xterm') {
                        sh '''
                            set -x
                            set -eo pipefail
                            echo "Assumed Support role for Prod"
                        '''
                    }
                }
            }
        }

    }

    post {
        cleanup {
            cleanWs()
        }
    }
}

但这失败并显示错误:

  

org.codehaus.groovy.control.MultipleCompilationErrorsException:   启动失败:WorkflowScript:9:缺少必需的参数:   第9行,第17列,“ parameterDefinitions”。                      参数{                      ^

     

WorkflowScript:10:缺少必需的参数:“ trim” @第10行,   第21栏                          串(                          ^

     

2个错误

我对编写jenkinsfiles还是很陌生,所以如果有人可以向我指出正确的方向,那将非常有帮助。

ccl200667 回答:在管道中使用参数时,Jenkins语法错误

parameters必须在管道范围内而不是在单个阶段的范围内声明。 (Source)。

以下应解决您的语法错误:

pipeline {
    agent {
        label 'master'
    }
    parameters {
                string(
                    name: 'branch',defaultValue: 'master',description: 'Branch of code to be deployed'
                )
                choice(
                    name: 'service',choices: 'calcs-service\naudits-service\nrate-alerts',description: 'Service to be cleaned'
                )
                choice(
                    name: 'environment',choices: 'uat1\nuat2\nprod',description: 'Environement whose services need cleanup'
                )
     } // close parameters
    stages {
        stage('Get Inputs') {
    ...
本文链接:https://www.f2er.com/3119419.html

大家都在问