当前位置: 首页 > 面试题库 >

使用凭证参数在多分支管道作业中从Jenkins凭证管理器读取问题难以解决

羊舌子瑜
2023-03-14
问题内容

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

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

机密值作为机密文本存储在Credentials Manager中,其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)

我认为我需要将该凭证绑定到该工作,但是我看不到针对多分支管道工作(以Freestyle或Pipeline工作为方式)执行此操作的选项。

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


问题答案:

您可以使用凭据()帮助方法来存档您的目的。

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}"
            }
        }
   }

}


 类似资料:
  • 我有一个Jenkins的管道作业,它使用中的秘密值: 秘密值作为存储在凭据管理器中,ID为。我通过引用凭据管理器中的秘密文本来参数化我的Jenkins管道作业: 我试图在Jenkinsfile中读取此值,如上所示,但得到以下输出: 它只打印凭据的ID,而不是值。我认为这可能是一种Jenkins的安全机制,但是当我尝试对Freestyle作业做类似的事情时,我得到了一个屏蔽输出()。 但是,如果我在

  • 问题内容: 如何通过Jenkins管道groovy脚本检出需要用户凭据的Subversion存储库?似乎内置命令不支持凭据,因此我尝试了如下代码: 但这失败了 我想念什么? 问题答案: 您可以将 代码片段生成器 用于 常规SCM 步骤。这将显示熟悉的Subversion配置选项,并照常将凭据作为参数。 代码段生成器会产生一些难看的参数选择表示,如下所示: 注意, 远程 部分使用双引号,因此变量$

  • 前文提到传统 Remember-Me 的实现方式中,通过 cookie 存储登录信息的方式存在安全问题,需要制定一系列校验策略和失效规则等等来确保可靠性,对开发者的技术要求较高;而通过表单登录的方式去触发浏览器的账户信息存储和自动填充的这种方法限制条件较多,且浏览器行为不可控,具体操作起来会比较麻烦。 因此浏览器提供了一套凭据管理 API(Crediential Management API),可

  • 一直以来,登录网站总是一件非常麻烦的事情,尤其是在移动端,如果过早要求用户进行登录,转化率会大大降低。用户输入账号密码并提交给服务器进行校验,服务器校验通过之后将创建 session 保持会话。基于安全角度的考虑,用户的账号密码是不允许通过 JavaScript 写入本地存储之中的。当 session 会话过期时,用户将不得不再次输入账号密码信息进行登录,体验很差。使用浏览器提供的凭证管理 API

  • null null 我怎样才能想象这些工作类型之间的关系?还有其他插件支持这些类型吗?

  • 现在多分支管道作业类型已经成熟,还有什么理由再使用简单的管道作业类型吗?即使您现在只有一个分支,考虑到未来多个分支的可能性可能是明智的,那么假设您将Jenkins管道存储在SCM中,那么为您的Jenkins管道使用管道作业类型与始终使用多分支管道作业类型的动机是什么?现在这两种作业类型之间是否存在功能平价?