Jenkinsfile环境变量未反映在脚本部分中调用的Makefile中

时间:2018-07-18 07:17:34

标签: linux jenkins makefile jenkins-pipeline

我有下面的jenkins文件,我试图在make文件中打印jenkins文件中定义的环境变量。但是,它不会反映在make文件中。它仍然是空的。

pipeline {
  environment {
      CREDS = credentials('some jenkins credential id')
  }
  agent{
     kubernetes {
        label 'mypod'
        containerTemplate {
            name 'ubuntu'
            image 'ubuntu:16.04'
            ttyEnabled true
            command 'cat'
        }
    }
  }
  stages{
      stage('execute Makefile'){
         script{
           sh"""
             make print-jenkinsfile-env-var

             echo ${CREDS_USR}
             echo ${CREDS}

            """
         }

      }
  }
}

下面是我的Makefile:

usercred := $(CREDS)
export usercred
username := $(CRED_USR)
export username
testuser := 'newvar'
export testuser
print-jenkinsfile-env-var:
     @echo "$$usercred"
     @echo "$$username"
     @echo "$$testuser"

建议在make文件中进行编辑,但也无法打印。

usercred := $(CREDS)
export usercred
username := $(CRED_USR)
export username
testuser := 'newvar'
export testuser
print-jenkinsfile-env-var:
     @echo $(usercred)
     @echo $(username)
     @echo "$$testuser"

Testuser如在Makefile中定义的那样被打印,但是其他两个变量打印为空。 我可以在脚本部分中显式打印环境变量,但不能通过makefile打印。

我正在寻找下面的东西

push-package:
#tgz file creation step
#push the package 
@curl -u $(CREDS) -X PUT "jfrog artifactory repo url" -T *tgz

但是,我的Makefile无法获得Jenkins文件环境中$(CRED)的值。但是,我可以像在Jenkinsfile中那样执行相同的脚本

curl -u ${CREDS} -X PUT "jfrog artifactory repo url" -T *tgz

有人可以建议吗?

1 个答案:

答案 0 :(得分:1)

得到Zelnes的帮助,他对我的帖子进行了评论,我做了以下更改,并且能够在我的makefile中使用jenkinsfile env var。我在jenkins文件中进行了以下更改。

script{
       sh"""
         make print-jenkinsfile-env-var CREDS=${CREDS}

        """
     }