如何将所有全局凭证传递给Jenkins管道

时间:2020-06-24 13:33:40

标签: powershell jenkins jenkins-pipeline credentials

这是我在stackoverflow上发布的第一个问题,因此如果我做错了事,请告诉我。

说明
我目前正在将自由式项目转换为Jenkins中的声明性管道(保存在Git存储库中的jenkinsfiles)。原始的自由式作业正在触发PowerShell脚本,该脚本需要访问在“配置系统”中的“掩码密码”插件部分中定义的全局名称/密码对。解决此问题的方法是在项目本身中添加一个额外的标记(不幸的是,我还不允许将截图添加到帖子中,因此编辑器将屏幕上传到imgur并粘贴了链接-请参见截图1): Screenshot 1

因此,我开始寻找对jenkinsfile这样的解决方案的可能的实现,但运气不佳。

我的问题
当脚本从管道中触发时,它会错误地指出无法找到相关的密码(powershell指的是有关环境变量的凭据)。从自由式项目运行时,此方法工作正常。 我认为这是由于管道无法访问先前提到的凭据造成的。

我尝试过的事情
将步骤包装为以下代码段:

wrap([$class: 'MaskPasswordsBuildWrapper']) {
    bat(batch file launching ps script)
}

然后,上述代码块将相关步骤包装到

script {
    wrap(...)
}

但是他们都不起作用。 我看过其他插件,例如Credentials Binding PluginCredentials Plugin,但这些插件允许每步绑定/传递一个凭证,并且我需要传递Jenkins中指定的所有凭证(我可以移动保存的凭证到詹金斯内的任何其他位置)。 我看过添加环境变量:

credentials('Credentials-ID')

但是问题与提到的插件相同。

有没有机会遇到任何类似情况并且知道如何做才能使管道访问/传递给詹金斯中指定的所有凭证,而不是一次绑定/传递它们?

非常欢迎所有提示!

1 个答案:

答案 0 :(得分:0)

您可以执行此操作,然后在整个工作中都可以使用env变量。您也可以定义多个env变量。

environment {
        // Use credentials() to hide the environment variable's output
        MY_PERSONAL_TOKEN = credentials('Credentials-ID')
    }

stages {
  stage('Test Stage') {
        steps {
            script {
                 // do what you need to
            }
        }
    }
}