kubernetes - 如何通过声明性管道将 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}"
}
}
}
}
解决方案
为了澄清,我从评论部分发布了社区 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 的规范,包含在 Deployments、 Jobs和 DaemonSets等工作负载资源中。
工作负载资源的每个控制器都使用
PodTemplate
工作负载对象内部来创建实际的 Pod。这PodTemplate
是您用于运行应用程序的任何工作负载资源的所需状态的一部分。
推荐阅读
- php - PHP 输出 HTML,更好的方法?
- node.js - 如何在 Node JS 中截取整个屏幕的屏幕截图?
- javascript - 使用 React Hooks 隐藏点击按钮
- javascript - 反应按钮,使用tone.Js,在第一次按键后中断,错误:setValueAtTime 的参数无效:{},2.2188208616780045
- github - Github:如何列出创建了 Private Access Tokens 的组织成员?
- c# - 拆分字段字符串并将每个值与字符串 linq c# 进行比较
- java - 如何更改 JList?
- python - 当玩家不再碰撞时,敌人停止移动
- c# - 我有一个哨兵while循环,里面有if语句,我想跳出if语句而不跳出while循环C#
- python - svg 文件的分形设计