我正在使用 JenkinsFile 从 Jenkins 中提取一个秘密,并通过将其设置为环境变量来进一步使用它。下面是我的代码片段。如何从脚本或硬编码值设置 env.K8S_CREDENTIALS_ID_STG
值作为起点并将其传递给 Kubernetes 函数以部署 Kubernetes 正在做什么?我想消除在 Jenkins 或 Kubernetes 中存储机密的依赖性。我们有自己的凭证管理,可以在运行时通过 API 调用获取机密。
steps {
script {
env.K8S_CREDENTIALS_ID_STG = 'ece-prm-agents-stg-token'
withCredentials([usernamePassword(credentialsId: 'ece_auto', usernameVariable: 'DOCKER_USER', passwordVariable: 'DOCKER_PASS')]){
statusCheck('pending', 'deploy to stg')
try {
glKubernetesDeleteBasic credentials: "$env.K8S_CREDENTIALS_ID_STG",cluster: "k8s-nonprod-ctc-aci.optum.com",namespace: "ece-prm-stg", yaml: "ece-kinds/k8/ece-prm-k8-depl-stg.yaml", env: "Dev", isProduction: false
}
catch(Exception e) {
echo "${e}"
}
try{
glKubernetesCreateBasic credentials: "$env.K8S_CREDENTIALS_ID_STG",cluster: "k8s-nonprod-ctc-aci.optum.com",namespace: "ece-prm-stg", yaml: "ece-kinds/k8/ece-prm-k8-depl-stg.yaml", env: "Dev", isProduction: false
statusCheck('success', 'deploy to stg')
} catch (Exception ex){
statusCheck('failure', 'deploy to stg')
}
}
}
}
如何消除必须在 Jenkins 中存储机密的依赖性?
答案 0 :(得分:1)
我会编写一个共享库步骤,它接受要获取的凭证名称,然后调用您的凭证 API 并将凭证返回给管道
有点像
steps {
script {
env.K8S_CREDENTIALS_ID_STG = getMyCredentials('ece-prm-agents-stg-token')
如果您以前没有使用过共享库,可以在此处找到有关共享库的更多信息 https://www.jenkins.io/doc/book/pipeline/shared-libraries/
当然,如果 API 是 Authd,那么您将遇到秘密零问题,但我建议明智地将其存储在 Jenkins 中