首页 > 解决方案 > 使用凭证参数在多分支管道作业中从 Jenkins 凭证管理器读取机密时遇到问题

问题描述

我有一个 Jenkins多分支管道作业,它在以下位置使用一个秘密值Jenkinsfile

pipeline {
  agent any
  stages {
    stage('Test') {
      steps {
        echo "DOCKER_REGISTRY_USER is ${env.DOCKER_REGISTRY_USER_NSV}"
      }
    }
  }
}

秘密值作为秘密文本存储在凭据管理器中,其 ID 为DOCKER_REGISTRY_USER_NSV

在此处输入图像描述

我正在尝试在 Jenkinsfile 中读取此值,如上所示,但我得到以下输出,打印出null我的秘密值:

[Pipeline] }
[Pipeline] // stage
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] echo
DOCKER_REGISTRY_USER is null
[Pipeline] sh

我还尝试在我的管道中引用秘密文本,如下所示:

echo "DOCKER_REGISTRY_USER is ${DOCKER_REGISTRY_USER_NSV}"

但是在运行 Jenkins 作业时出现此错误:

groovy.lang.MissingPropertyException: No such property: DOCKER_REGISTRY_USER_NSV for class: groovy.lang.Binding
    at groovy.lang.Binding.getVariable(Binding.java:63)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:264)

我认为我需要将该凭证绑定到作业,但我看不到针对多分支管道作业执行此操作的选项,就像自由式或管道作业一样。

如何在多分支管道作业中使用秘密凭证?

标签: jenkinsjenkins-pipelinejenkins-plugins

解决方案


您可以使用credentials()辅助方法来归档您的目的。

pipeline {
    agent any

    environment {
        DOCKER_REGISTRY_USER = credentials('DOCKER_REGISTRY_USER_NSV') 
                               // put the ID of credential as credentials()'s parameter.
    }

    stages {

        stage('Test') {
            steps {
                echo "DOCKER_REGISTRY_USER is ${DOCKER_REGISTRY_USER}"
            }
        }
   }

}

推荐阅读