首页 > 解决方案 > 如何通过声明性管道将 k8s 密钥值传递给 Jenkins

问题描述

我想使用声明式管道在 Jenkins 作业中传递 Kubernetes 密钥和值。

我正在尝试使用 pod 模板读取 k8s 秘密值。配置了 k8s 插件,镜像设置了环境变量。我需要用 k8s 密码覆盖环境值。

K8S-秘密:

spec:
 containers:
   - env:
      - name: K8S-SECRET
          valueFrom:
            secretKeyRef:
              key: USERNAME
              name: PASSWORD

詹金斯管道:

pipeline {
    agent {
        kubernetes {
            label 'docker'
            envVars: [containersecretEnvVar(key: 'USERNAME', value:'PASSWORD')]
        }
    }
    environment {
      BRANCH = 'origin/master'
      PROJECT_NAME = 'k8s'
    }
   stages{
      stage('print k8s secret'){
           steps {
               echo "k8s_secret_name: ${env.k8s_secret_name}"
               echo "k8s_secret_valie: ${env.k8s_secret_value}"
           }
      }
    }
}

标签: kubernetesjenkins-pipeline

解决方案


为了澄清,我从评论部分发布了社区 wiki 答案。

为了解决这个问题 Original Poster 创建了以下代码:

podTemplate(inheritFrom: 'docker', containers: [ 
    containerTemplate( name: "jnlp", image: "<image_name>", 
        envVars: [ 
            envVar(key: "NAME", value: "custom_env"), 
            secretEnvVar(key: "SECRET_ENV", secretName: "K8S-SECRET", secretKey: "USERNAME") 
    ]) ] ){ 
    node(POD_LABEL) { 
        step { 
        sh 'echo ${TOKEN}'
        ...
        }   
    }

在这个解决方案PodTemplates中已经使用了。在本文档中,可以找到有关此的更多信息:

Pod 模板用于创建代理。它们可以通过用户界面进行配置,也可以使用该podTemplate步骤在管道中进行配置。

在这里您可以找到如何定义一个 podTemplate 以在 kubernetes 插件中使用

另请参阅描述 .podTemplate

工作负载 资源的 控制器 从Pod 模板创建 Pod 并代表您管理这些 Pod。

PodTemplates 是创建 Pod 的规范,包含在 DeploymentsJobsDaemonSets等工作负载资源中。

工作负载资源的每个控制器都使用 PodTemplate 工作负载对象内部来创建实际的 Pod。这 PodTemplate 是您用于运行应用程序的任何工作负载资源的所需状态的一部分。


推荐阅读