将 jenkins 管道中设置的变量传递给 shell 脚本

cod*_*ver 4 shell parameter-passing jenkins-pipeline

我想从 jenkins 作业向我在 Linux 服务器中编写的 shell 脚本之一发送一些参数。以下是我的詹金斯管道工作:

def MY_VAR
def BUILD_NUMBER
pipeline {
    agent any
    stages {
        stage('Stage One') {
            steps {
                script {
                    BUILD_NUMBER={currentBuild.number}
                    MY_VAR ='abc'
                }                         
            }
        }
        stage('Stage Two') {
            steps {                    
                sh '''
                    cd /scripts/
                    ./my_scripts.sh $BUILD_NUMBER $MY_VAR'''
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里我可以发送 的值BUILD_NUMBER,但不能发送 的值MY_VAR。在我看来,自从MY_VAR被设置为管道以来,这就是它发生的原因。有人可以帮忙解决吗

Szy*_*iak 5

如果要$MY_VAR在执行sh步骤时进行插值,则需要将单引号替换为双引号。

def MY_VAR
def BUILD_NUMBER
pipeline {
    agent any
    stages {
        stage('Stage One') {
            steps {
                script {
                    BUILD_NUMBER={currentBuild.number}
                    MY_VAR ='abc'
                }                         
            }
        }
        stage('Stage Two') {
            steps {                    
                sh """
                    cd /scripts/
                    ./my_scripts.sh $BUILD_NUMBER $MY_VAR"""
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

成功了$BUILD_NUMBER,因为管道公开了,并且可以在 shell 步骤内作为 bash 的env 变量env.BUILD_NUMBER访问该变量。$BUILD_NUMBER或者,您可以设置MY_VAR为环境变量并在sh步骤中保留单引号。像这样的事情应该可以解决问题:

pipeline {
    agent any
    stages {
        stage('Stage One') {
            steps {
                script {
                    //you can remove BUILD_NUMBER assignment - env.BUILD_NUMBER is already created.
                    //BUILD_NUMBER={currentBuild.number}
                    env.MY_VAR ='abc'
                }                         
            }
        }
        stage('Stage Two') {
            steps {                    
                sh '''
                    cd /scripts/
                    ./my_scripts.sh $BUILD_NUMBER $MY_VAR'''
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以从我的一篇博客文章中了解有关 Jenkins Pipeline 环境变量的更多信息。