如何更改Jenkins Declarative Pipeline环境变量?

Bra*_*lle 5 jenkins jenkins-pipeline

我正在尝试创建一些Docker镜像.为此,我想使用Maven pom.xml文件中指定的版本号作为标记.然而,我对声明性Jenkins管道很新,我无法弄清楚如何更改我的环境变量,以便VERSION包含所有阶段的正确版本.

这是我的代码

#!groovy

pipeline {
    tools { 
        maven 'maven 3.3.9' 
        jdk 'Java 1.8' 
    }
    environment {
        VERSION = '0.0.0'
    }

    agent any 

    stages {
        stage('Checkout') { 
            steps {
                git branch: 'master', credentialsId: '290dd8ee-2381-4c5b-8d33-5631d03ee7be', url: 'git@gitlab.crosslang.local:company/SOME-API.git'
                sh "git clean -f && git reset --hard origin/master"
            }
        }
        stage('Build and Test Java code') {
            steps {
                script {
                    def pom = readMavenPom file: 'pom.xml'
                    VERSION = pom.version
                }
                echo "${VERSION}"
                sh "mvn clean install -DskipTests"
            }
        }
        stage('Build Docker images') {
            steps {
                dir('whales-microservice/src/main/docker'){
                    sh 'cp ../../../target/whales-microservice-${VERSION}.jar whales-microservice.jar'
                    script {
                        docker.build "company/whales-microservice:${VERSION}"
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

has*_*chi 12

问题是声明的单引号

sh 'cp ../../../target/whales-microservice-${VERSION}.jar whales-microservice.jar'
Run Code Online (Sandbox Code Playgroud)

单引号不会在groovy中扩展变量:http://docs.groovy-lang.org/latest/html/documentation/#_string_interpolation

所以你必须双引用你的shell语句:

sh "cp ../../../target/whales-microservice-${VERSION}.jar whales-microservice.jar"
Run Code Online (Sandbox Code Playgroud)

  • 这突出了Strings和GStrings(Groovy Strings)之间的区别.变量在GStrings(双引号)中插入,而不在字符串(单引号)中插入. (2认同)