我在k8s集群中定义了几个具有命名空间的不同上下文。 对于Jenkins使用不同的管道,我想在它们之间进行切换。 思路是:基于git分支对特定环境进行部署。为此,我必须切换到现有的生产/开发/功能上下文和名称空间。
我想使用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
如何解决该问题?是否可以使用所有提到的插件使用名称空间?如果没有,在Jenkins管道步骤中是否还有另一种方法可以实现上下文+命名空间切换?
编辑:
似乎在Jenkins机器上将条目添加到.kube / config并不能解决该问题。这个Jenkins的插件kubernetes-cli
创建了隔离的上下文,并且不太关心.kube / config:(
手动强制配置,在这种情况下也无济于事;
kubectl config use-context aws-production --namespace=aws-production --kubeconfig=/home/jenkins/.kube/config
答案 0 :(得分:2)
该插件没有namespace
参数,但~/.kube/config
有。因此,您可以创建2个上下文来处理两个不同的名称空间。在您的〜/ .kube / config`
contexts:
- context:
cluster: k8s.mycluster
namespace: mynamespace1
user: k8s.user
name: clusternamespace1
- context:
cluster: k8s.mycluster
namespace: mynamespace2
user: k8s.user
name: clusternamespace2
答案 1 :(得分:1)
感谢詹金斯(Jenkins)官方IRC频道的帮助,下面提供解决方案。
解决方案:
您必须将原始.kube / config文件作为credentialsId
传递。
credentialsId
字段 withKubeConfig([[credentialsId: 'file-aws-config'
,[..]])...