jenkinsfile не передает env в sh - PullRequest
       11

jenkinsfile не передает env в sh

1 голос
/ 09 марта 2019

Я пытаюсь установить переменную окружения в Jenkinsfile следующим образом,

pipeline {
    agent { label 'slave1' }

    stages {
        stage ('Build') {
            steps {
                script {
                    BUILD_VERSION = sh (
                        script: 'python get_firmware_version.py',
                        returnStdout: true
                    ).trim()
                }
                echo "${BUILD_VERSION}"
                withCredentials([file(credentialsId: 'image-sign', variable: 'IMAGE_SIGN')]) {
                    dir('firmware/') {
                        echo "${BUILD_VERSION}"
                        sh '''
                           echo "Building"
                           echo "${BUILD_VERSION}"
                           echo "${env.BUILD_VERSION}"
                        '''
                    }
                }
            }
        }
    }
    post {
        failure {
            script {
                echo "Pipeline Failed"
            }
        }
    }
}

Но происходит сбой со следующей ошибкой Bad substitution

[Pipeline] echo
0_2_0
[Pipeline] sh
+ echo Building
Building
/home/jenkins/jenkins_slave/workspace/Firmware/Branch/firmware@tmp/durable-54e04481/script.sh: 3: /home/jenkins/jenkins_slave/workspace/Firmware/Branch/firmware@tmp/durable-54e04481/script.sh: Bad substitution

Почему я не могу установить ENV Var и использовать его в шаге sh?

1 Ответ

5 голосов
/ 09 марта 2019

Я думаю, это Дженкинс.Когда вы используете блок sh с ';у него не будет доступа к таким вещам, как переменные среды.Попробуйте использовать " вместо этого.Это должно работать

sh """
    echo "Building"
    echo "${env.BUILD_VERSION}"
    echo "${env}"
"""

Дженкинс должен распознать блок оболочки и автоматически экранировать " в """.

pipeline {
    agent { label 'slave1' }

    stages {
        stage ('Build') {
            steps {
                script {
                    BUILD_VERSION = sh (
                        script: 'python get_firmware_version.py',
                        returnStdout: true
                    ).trim()
                }
                echo "${BUILD_VERSION}"
                withCredentials([file(credentialsId: 'image-sign', variable: 'IMAGE_SIGN')]) {
                    dir('firmware/') {
                        echo "${BUILD_VERSION}"
                        sh """
                           echo "Building"
                           echo "${BUILD_VERSION}"
                           echo "${env.BUILD_VERSION}"
                        """
                    }
                }
            }
        }
    }
    post {
        failure {
            script {
                echo "Pipeline Failed"
            }
        }
    }
}

Мой тестовый пример

pipeline {
  agent {
    node {
      label 'devops-jenkins-slave'
    }
  }

  options {
    timestamps()
  }

  stages {

    stage('Setup'){
      steps {
        dir("${WORKSPACE}/"){
          script {
            BUILD_VERSION = "1"
          }

          sh """
           echo "${BUILD_VERSION}"
          """
        }
      }
    }

  }

    post {
      always {
        dir("${WORKSPACE}/"){
          deleteDir()
        }
      }
    }
}

Результат

Running in Durability level: MAX_SURVIVABILITY
[Pipeline] node
Running on devops-jenkins-slave in /home/jenkins/workspace/Samples/Test
[Pipeline] {
[Pipeline] timestamps
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Setup)
[Pipeline] dir
22:09:55 Running in /home/jenkins/workspace/Samples/Test
[Pipeline] {
[Pipeline] script
[Pipeline] {
[Pipeline] }
[Pipeline] // script
[Pipeline] sh
22:09:56 [Test] Running shell script
22:09:56 + echo 1
22:09:56 1
[Pipeline] }
[Pipeline] // dir
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] dir
22:09:56 Running in /home/jenkins/workspace/Samples/Test
[Pipeline] {
[Pipeline] deleteDir
[Pipeline] }
[Pipeline] // dir
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // timestamps
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...