这是我在stackoverflow上发布的第一个问题,因此如果我做错了事,请告诉我。
说明
我目前正在将自由式项目转换为Jenkins中的声明性管道(保存在Git存储库中的jenkinsfiles)。原始的自由式作业正在触发PowerShell脚本,该脚本需要访问在“配置系统”中的“掩码密码”插件部分中定义的全局名称/密码对。解决此问题的方法是在项目本身中添加一个额外的标记(不幸的是,我还不允许将截图添加到帖子中,因此编辑器将屏幕上传到imgur并粘贴了链接-请参见截图1):
Screenshot 1
因此,我开始寻找对jenkinsfile这样的解决方案的可能的实现,但运气不佳。
我的问题
当脚本从管道中触发时,它会错误地指出无法找到相关的密码(powershell指的是有关环境变量的凭据)。从自由式项目运行时,此方法工作正常。
我认为这是由于管道无法访问先前提到的凭据造成的。
我尝试过的事情
将步骤包装为以下代码段:
wrap([$class: 'MaskPasswordsBuildWrapper']) {
bat(batch file launching ps script)
}
然后,上述代码块将相关步骤包装到
script {
wrap(...)
}
但是他们都不起作用。 我看过其他插件,例如Credentials Binding Plugin或Credentials Plugin,但这些插件允许每步绑定/传递一个凭证,并且我需要传递Jenkins中指定的所有凭证(我可以移动保存的凭证到詹金斯内的任何其他位置)。 我看过添加环境变量:
credentials('Credentials-ID')
但是问题与提到的插件相同。
有没有机会遇到任何类似情况并且知道如何做才能使管道访问/传递给詹金斯中指定的所有凭证,而不是一次绑定/传递它们?
非常欢迎所有提示!
答案 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
}
}
}
}