首页 > 解决方案 > Jenkinsfile 环境变量不反映在脚本部分中调用的 Makefile

问题描述

我有以下 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

有人可以建议吗?

标签: linuxjenkinsmakefilejenkins-pipeline

解决方案


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

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

        """
     }

推荐阅读