web-dev-qa-db-ja.com

Jenkins Pipelineでグローバル変数を使用する

あらゆる方法を試しましたが、何も機能していないようです。これが私のjenkinsfileです。

def Zip_NODE
def CODE_VERSION
pipeline{
    /*A declarative pipeline*/

    agent {
        /*Agent section*/ 
        // where would you like to run the code 
        label 'ubuntu' 
        }
    options{
        timestamps()
        }
    parameters {
        choice(choices: ['dev'], description: 'Name of the environment', name: 'ENV')
        choice(choices: ['us-east-1', 'us-west-1','us-west-2','us-east-2','ap-south-1'], description: 'What AWS region?', name: 'AWS_DEFAULT_REGION')
        string(defaultValue: "", description: '', name: 'APP_VERSION')

        }
    stages{
        /*stages section*/
        stage('Initialize the variables') {
            // Each stage is made up of steps
            steps{
                script{
                    CODE_VERSION='${BUILD_NUMBER}-${ENV}'
                    Zip_NODE='abcdefgh-0.0.${CODE_VERSION}.Zip'
                }
            }                
        }
        stage ('code - Checkout') {
            steps{
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'xxxxxxxxxxxxxxxxxxxxxxxxxx', url: 'http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.git']]]) 
            }  
        }

        stage ('code - Build'){
            steps{
                sh ''' 
                    echo ${JOB_NAME}
                    pwd
                    echo ${Zip_NODE}
                    echo 'remove alraedy existing Zip files'
                    rm -rf *.Zip
                    Zip -r ${Zip_NODE} . 
                    chmod 777 $Zip_NODE 
                ''' 
            }
        }
        stage('Deploy on Beanstalk'){
            steps{
                build job: 'abcdefgh-PHASER' , parameters: [[$class: 'StringParameterValue', name: 'vpc', value: ENV], [$class: 'StringParameterValue', name: 'Zip_NODE', value: Zip_NODE], [$class: 'StringParameterValue', name: 'CODE_VERSION', value: CODE_VERSION], [$class: 'StringParameterValue', name: 'APP_VERSION', value: BUILD_NUMBER], [$class: 'StringParameterValue', name: 'AWS_DEFAULT_REGION', value: AWS_DEFAULT_REGION], [$class: 'StringParameterValue', name: 'ParentJobName', value: JOB_NAME]]
            }
        }
    } 

}

ステージのステップスクリプトの出力( 'Initialize the variables')からは何も得られません。グローバル変数Zip_NODEの値は設定されていません。

[Pipeline] stage
[Pipeline] { (Initialize the variables)
[Pipeline] script
[Pipeline] {
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage

そして、ステージ(コード-ビルド)に進み、Zip_NODEの値を取得しません。 22:34:17のechoステートメントを参照してください

[Pipeline] stage
[Pipeline] { (code - Build)
[Pipeline] sh
22:34:16 [abcdefgh-ci-dev-pipeline] Running Shell script
22:34:17 + echo abcdefgh-ci-dev-pipeline
22:34:17 abcdefgh-ci-dev-pipeline
22:34:17 + pwd
22:34:17 /home/advisor/Jenkins/workspace/abcdefgh-ci-dev-pipeline
22:34:17 + echo
22:34:17 
22:34:17 + echo remove alraedy existing Zip files

@awefsomeのおかげで、詳細を追加したい観察がありました:以下のコードを使用すると、目的の出力、つまりZip_NODEの正しい値が得られます:

 stage ('code - Build'){
            steps{
                sh "echo ${JOB_NAME} && pwd && echo ${Zip_NODE} && echo 'remove alraedy existing Zip files' && rm -rf *.Zip && Zip -r ${Zip_NODE} . && chmod 777 $Zip_NODE"
            }
        }

しかし、以下のコードを使用すると、Zip_NODEの値を取得できません。

stage ('code - Build'){
            steps{

                sh ''' 
                        echo ${Zip_NODE}
                        echo ${JOB_NAME}
                        pwd
                        echo ${Zip_NODE}
                        echo ${CODE_VERSION}
                        #rm -rf .ebextensions
                        echo 'remove alraedy existing Zip files'
                        rm -rf *.Zip
                        Zip -r ${Zip_NODE} . 
                        chmod 777 $Zip_NODE 
                    '''
            }
        }
10
user271418

以下を試して、それがどうなるかを見てください

def Zip_NODE
def CODE_VERSION
pipeline{
    /*A declarative pipeline*/

    agent {
        /*Agent section*/ 
        // where would you like to run the code 
        label 'master' 
        }
    options{
        timestamps()
        }
    parameters {
        choice(choices: ['dev'], description: 'Name of the environment', name: 'ENV')
        choice(choices: ['us-east-1', 'us-west-1','us-west-2','us-east-2','ap-south-1'], description: 'What AWS region?', name: 'AWS_DEFAULT_REGION')
        string(defaultValue: "", description: '', name: 'APP_VERSION')

        }
    stages{
        /*stages section*/
        stage('Initialize the variables') {
            // Each stage is made up of steps
            steps{
                script{
                    CODE_VERSION="${BUILD_NUMBER}-${ENV}"
                    Zip_NODE="abcdefgh-0.0.${CODE_VERSION}.Zip"
                }
            }                
        }
        stage ('code - Checkout') {
            steps{
                println "checkout skipped"
                //checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'xxxxxxxxxxxxxxxxxxxxxxxxxx', url: 'http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.git']]]) 
            }  
        }

        stage ('code - Build'){
            steps{
                sh "echo ${JOB_NAME} && pwd && echo ${Zip_NODE} && echo 'remove alraedy existing Zip files' && rm -rf *.Zip && Zip -r ${Zip_NODE} . && chmod 777 $Zip_NODE"
            }
        }
        stage('Deploy on Beanstalk'){
            steps{
                println "build job skipped"
                //build job: 'abcdefgh-PHASER' , parameters: [[$class: 'StringParameterValue', name: 'vpc', value: ENV], [$class: 'StringParameterValue', name: 'Zip_NODE', value: Zip_NODE], [$class: 'StringParameterValue', name: 'CODE_VERSION', value: CODE_VERSION], [$class: 'StringParameterValue', name: 'APP_VERSION', value: BUILD_NUMBER], [$class: 'StringParameterValue', name: 'AWS_DEFAULT_REGION', value: AWS_DEFAULT_REGION], [$class: 'StringParameterValue', name: 'ParentJobName', value: JOB_NAME]]
            }
        }
    } 
}

私は次の出力を得ました:

Started by user jenkins
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] node
Running on Jenkins in /Users/Shared/Jenkins/Home/workspace/test
[Pipeline] {
[Pipeline] timestamps
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Initialize the variables)
[Pipeline] script
[Pipeline] {
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (code - Checkout)
[Pipeline] echo
21:19:06 checkout skipped
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (code - Build)
[Pipeline] sh
21:19:06 [test] Running Shell script
21:19:06 + echo test
21:19:06 test
21:19:06 + pwd
21:19:06 /Users/Shared/Jenkins/Home/workspace/test
21:19:06 + echo abcdefgh-0.0.17-dev.Zip
21:19:06 abcdefgh-0.0.17-dev.Zip
21:19:06 + echo 'remove alraedy existing Zip files'
21:19:06 remove alraedy existing Zip files
21:19:06 + rm -rf '*.Zip'
21:19:06 + Zip -r abcdefgh-0.0.17-dev.Zip .
21:19:06 
21:19:06 Zip error: Nothing to do! (try: Zip -r abcdefgh-0.0.17-dev.Zip . -i .)
[Pipeline] }
[Pipeline] // stage
6
awefsome
sh '''
'''

あるべき

sh """
"""

単一引用符を使用すると、変数は処理されません。

12
Simon