我正在尝试创建 Jenkins 管道 (.jenkinsfile) 来在 AWS 中执行某些操作,但无法让公司中的每个人都可以访问该管道。我的想法是让用户将其 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 值(这些值每 24 小时刷新一次)粘贴到 Jenkins 管道参数中,然后将它们用作 .jenkins 文件中的某种类型的凭证。如果用户粘贴错误的值/没有运行代码的正确权限,则作业将失败。到目前为止,我一直无法找到一种方法来执行此操作,因为我看到的所有示例都使用存储在 Jenkins 服务器上的现有凭据,而不是为每次运行生成它们。
我尝试了以下代码,但没有成功:
environment {
TMP_AWS_CREDS =
credentialsBinding {
amazonWebServicesCredentialsBinding {
accessKeyVariable(${AWS_ACCESS_KEY_ID})
secretKeyVariable(${AWS_SECRET_ACCESS_KEY})
credentialsId('temp-aws-creds')
}
}
}
steps {
withAWS(credentials: "${TMP_AWS_CREDS}, region: 'ap-southeast-4') {
// some block
}
}
和
steps {
withAWS(credentials: wrappers {
credentialsBinding {
amazonWebServicesCredentialsBinding {
accessKeyVariable(${AWS_ACCESS_KEY_ID})
secretKeyVariable(${AWS_SECRET_ACCESS_KEY})
credentialsId('temp-aws-creds')
}
}
}, region: 'ap-southeast-4') {
// some block
}
}
和
steps {
withAWS(credentials: '[certificate(credentialsId: 'temp-aws-creds', \
keystoreVariable: AWS_ACCESS_KEY_ID, \
passwordVariable: AWS_SECRET_ACCESS_KEY)]', region: 'ap-southeast-4') {
// some block
}
}
您可以像任何其他管道参数一样使用它们:
parameters {
string(name: 'AWS_ACCESS_KEY_ID', defaultValue: '', description: 'AWS access key')
password(name: 'AWS_SECRET_ACCESS_KEY', defaultValue: '', description: 'AWS secret key associated with the access key')
}
不用担心将它们传递到您的环境中 - Jenkins 会为所有管道参数创建环境变量。但请确保它们不会打印在任何地方,因为 Jenkins 不会从日志中的参数中屏蔽密码。