【发布时间】:2020-09-23 11:45:54
【问题描述】:
我正在尝试访问通过管道作业中的参数提供的 AWS 凭证。
我有一个管道作业,我正在使用这样定义的 AWS 凭证参数:
credentials (
credentialType: 'com.cloudbees.jenkins.plugins.awscredentials.AWSCredentialsImpl',
defaultValue: 'jenkins-deploy-proj',
description: '''
My description
''',
name: 'AWS_ACCOUNT'
)
我是通过 Jenkins UI 中的“管道语法 > 声明性指令生成器 > 参数”获得的。
我需要稍后在工作中访问这些凭据。 From other discussions 似乎我应该使用 withCredentials 块来访问凭据,所以我尝试了这个
script {
withCredentials([[
$class: 'AmazonWebServicesCredentialsBinding',
accessKeyVariable: 'AWS_ACCESS_KEY_ID',
secretKeyVariable: 'AWS_SECRET_ACCESS_KEY',
credentialsId: "${params.AWS_ACCOUNT}"
]]) {
sh 'bash myscript.sh'
}
}
我是通过 Jenkins UI 中的“管道语法 > 片段生成器 > withCredentials”获得的。
管道使用默认凭据(所有用户都可以访问)运行良好,但是当我尝试使用我的个人凭据(仍在全局域中)时,我收到来自 Jenkins 的错误,告诉我凭据不存在:
ERROR: Could not find credentials entry with ID '557ff283-70f3-402b-b065-fb4c9f28305e'
我可以在像这样配置的其他(非管道)Jenkins 作业中使用这些相同的凭据作为参数,并且它们工作正常:
我确实采取了额外的措施,通过创建一个新的凭据对象来确保问题不只是与那个凭据对象有关,但我得到了相同的 Could not find credentials entry with ID 错误。
【问题讨论】:
-
听起来好像您的凭证尚未添加到 AWS 凭证插件设置的列表中。
-
该设置是否特定于管道作业?我会检查一下,但奇怪的是非管道作业不需要该设置,而管道作业需要。
-
管道也可以使用纯文本凭据,但这有安全隐患。
-
是的。我在这里使用用户范围凭据的原因是因为我们想根据他们是否可以提供必要的凭据来锁定谁可以在给定环境中运行作业。因此,一组共享的凭据(或明文凭据)并没有太大帮助。此外,“共享凭据”方案无需修改即可工作。
标签: jenkins jenkins-pipeline jenkins-plugins