【问题标题】:How to pass k8s secret key value into Jenkins via Declarative pipeline如何通过声明式管道将 k8s 密钥值传递给 Jenkins
【发布时间】:2021-10-26 18:21:50
【问题描述】:

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

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

K8S-秘密:

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

Jenkins 流水线:

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}"
           }
      }
    }
}

【问题讨论】:

  • 您使用的是哪个版本的 Kubernetes,您是如何设置集群的?您是使用裸机安装还是某些云提供商?
  • AWS 上的云提供商。使用最新版本。
  • 在管道中使用以下代码 sn-p 获取此错误。 Caused: java.lang.IllegalArgumentException: Could not instantiate {envVars=[@secretEnvVar(key=TOKEN,secretName=foo,secretKey=bar)]} for org.csanchez.jenkins.plugins.kubernetes.ContainerTemplatepodTemplate(inheritFrom: 'docker', containers: [ containerTemplate( envVars: [ secretEnvVar(key: 'TOKEN', secretName: 'foo', secretKey: 'bar') ]) ] ){ node('docker') { stage('test'){ sh "echo ${foo}" } } }
  • 能否提供准确的版本?请不要使用“最新”一词,因为它不准确。
  • 能够修复它。

标签: kubernetes jenkins-pipeline


【解决方案1】:

为了澄清,我发布了 cmets 部分的社区 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。在this documentation 可以找到更多相关信息:

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

在这里你可以找到define a podTemplate to use in the kubernetes plugin的方法。

另请参阅描述podTemplatethis documentation

workload 资源的控制器从 pod 模板创建 Pod 并代表您管理这些 Pod。

PodTemplate 是创建 Pod 的规范,包含在工作负载资源中,例如 DeploymentsJobsDaemonSets

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

【讨论】:

    猜你喜欢
    • 2018-01-24
    • 1970-01-01
    • 2021-01-01
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多