gpt4 book ai didi

jenkins - 无法将命名空间参数传递给 Jenkins 的 kubernetes-cli 插件

转载 作者:行者123 更新时间:2023-12-02 11:37:21 31 4
gpt4 key购买 nike

我在我的 k8s 集群中定义了几个不同的命名空间上下文。为 Jenkins 使用不同的管道我想在它们之间切换。思路是:基于git branch做部署到特定环境。为此,我必须切换到现有的生产/开发/功能上下文和命名空间。

我想使用 https://wiki.jenkins.io/display/JENKINS/Kubernetes+Cli+Plugin这是 Jenkins 脚本化流水线的示例语法:

例子:

node {
stage('List pods') {
withKubeConfig([credentialsId: '<credential-id>',
caCertificate: '<ca-certificate>',
serverUrl: '<api-server-address>',
contextName: '<context-name>',
clusterName: '<cluster-name>'
]) {
sh 'kubectl get pods'
}
}
}

如您所见,它不接受任何namespace

这是一个带有命名空间的示例生产上下文,我正在使用它:

$ kubectl config get-contexts 
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* aws-production cluster.example.com cluster.example.com aws-production

这是运行该步骤的结果: enter image description here

如何解决这个问题?是否可以完全使用提到的插件来使用命名空间?如果没有,是否有其他方法可以在 Jenkins 管道步骤中实现上下文+命名空间切换?

编辑:似乎在 Jenkins 机器上向 .kube/config 添加条目对解决该问题没有帮助。这个用于 Jenkins 的插件 kubernetes-cli 创建了独立的上下文并且不太关心 .kube/config :(

手动强制配置,在这种情况下也无济于事;

kubectl config use-context aws-production --namespace=aws-production --kubeconfig=/home/jenkins/.kube/config

最佳答案

感谢 Jenkins 官方 IRC channel 的帮助,解决方案如下。

解决方法:您必须将原始 .kube/config 文件作为 credentialsId 传递。

  1. 在 Jenkins 中创建新的凭据。我使用了 secret 文件选项。
  2. 上传您想要的 .kube/config 并在凭证创建表单中为其指定名称/ID。
  3. 将您提供给此凭据资源的 id 名称传递到 credentialsId 字段

withKubeConfig([credentialsId: 'file-aws-config', [..]]) ...

关于jenkins - 无法将命名空间参数传递给 Jenkins 的 kubernetes-cli 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54736584/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com