在我的管道中,我正在注入aws凭据:
withCredentials([[$class: 'AmazonWebServicesCredentialsBinding',
credentialsId: '89h9sfh8shf98shf98he9f8sf',
accessKeyVariable: 'AWS_ACCESS_KEY_ID',
secretKeyVariable: 'AWS_SECRET_ACCESS_KEY']]) {
sh 'printenv'
echo myFunc.myMeth('blah','sdjlfkdf')
}
myFunc看起来像这样:
class myFunc {
static Object myMeth (String param1, String param2){
def env = System.getenv()
//Print all the environment variables.
env.each{
println it
}
def ebClient = new AmazonDynamoDBClientBuilder()
.withCredentials(new EnvironmentVariableCredentialsProvider())
.build()
}
}
查看sh 'printenv'
的输出,我看到AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY被注入。
但是在myFunc里面我试着回复一下myFunc有权访问的内容我没看到那些变量和aws api抱怨:
Unable to load AWS credentials from environment variables (AWS_ACCESS_KEY_ID (or AWS_ACCESS_KEY) and AWS_SECRET_KEY (or AWS_SECRET_ACCESS_KEY))
这是设计的吗? myFunc是否已被隔离,我需要更改其范围或其他内容?
为什么sh(和其他步骤)可以访问由withCredtials注入的这些变量,但我的groovy函数没有?
我已经将它们作为纯文本传递并转发给aws api。这很臭,因为它们没有屏蔽控制台输出,我还必须在myFunc中使用BasicAWSCredentials手动应用它们:
myFunc.myMeth('blah','sdjlfkdf',env.AWS_ACCESS_KEY_ID,env.AWS_SECRET_ACCESS_KEY)