JenkinsFile:如何在运行时从脚本设置 env.variable?

时间:2021-04-13 07:19:35

标签: jenkins kubernetes jenkins-pipeline

我正在使用 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 中存储机密的依赖性?

1 个答案:

答案 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 中

相关问题