2017-05-09 131 views
2

我正在尝试创建一些Docker镜像。为此,我想使用Maven pom.xml文件中指定的版本号作为标记。然而,我对Jenkins的声明流水线并不熟悉,我不知道如何更改我的环境变量,以便VERSION包含所有阶段的正确版本。如何更改Jenkins声明式管道环境变量?

这是我的代码

#!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: '[email protected]: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}" 
        } 
       } 
      } 
     } 
    } 
} 
+0

什么是你的问题? Stage'Build Docker images'中的VERSION不包含在VERSION = pom.version中分配的版本号? – haschibaschi

+0

确实是这个问题。它仅在“构建和测试Java代码”阶段提供。 –

回答

5

的问题是语句的单引号

sh 'cp ../../../target/whales-microservice-${VERSION}.jar whales-microservice.jar' 

单引号不扩大在常规变量:http://docs.groovy-lang.org/latest/html/documentation/#_string_interpolation

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

sh "cp ../../../target/whales-microservice-${VERSION}.jar whales-microservice.jar" 
+0

这确实解决了我的问题,谢谢! –

+0

有趣......谢谢! –

+1

这突出显示了字符串和GStrings(Groovy字符串)之间的区别。变量在GStrings(双引号)中插入,而不在字符串(单引号)中插入。 – user944849