Для передачи переменных, установленных в конвейере jenkins, в скрипт оболочки - PullRequest
1 голос
/ 06 ноября 2019

Я хочу отправить несколько параметров в один из моих сценариев оболочки, написанных на сервере Linux, из задания jenkins. Ниже мое задание по конвейеру Дженкинса:

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'''
            }
        }
    }
}

Здесь я могу отправить значение BUILD_NUMBER, но не MY_VAR. Мне кажется, что, поскольку MY_VAR установлен в конвейер, именно поэтому это происходит. Кто-нибудь может пожалуйста помочь с решением

1 Ответ

1 голос
/ 06 ноября 2019

Если вы хотите интерполировать $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"""
            }
        }
    }
}

$BUILD_NUMBER сработало, поскольку конвейер предоставляет env.BUILD_NUMBER, и эта переменная может быть доступна внутри шага оболочки как переменная $BUILD_NUMBER env в bash. В качестве альтернативы вы можете установить 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'''
            }
        }
    }
}

Подробнее о переменных среды Jenkins Pipeline можно узнать из одного из моих постов в блоге .

...