我已经为本地部署创建了上下文。
root@jenkins-linux-vm:/usr/lib# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
K8sCluster-CC-pre-release kubernetes kubernetes-admin K8sCluster-CC-pre-release
PR kubernetes kubernetes-admin PR
* kubernetes-admin@kubernetes kubernetes kubernetes-admin
当我的詹金斯人正在运行构建时,即使我已经创建了上下文及其指向(*),我仍会遇到错误。
+ kubectl '--kubeconfig=****' '--context=K8sCluster-CC-pre-release' apply -f ./environment/pre-release '-n=pre-release'
error: context "K8sCluster-CC-pre-release" does not exist
tage('deployment') {
container('kubectl') {
withCredentials([kubeconfigFile(credentialsId: 'KUBERNETES_CLUSTER_CONFIG', variable: 'KUBECONFIG')]) {
def kubectl
echo 'Deployment Start'
if(gitBranch == "future-master-fix") {
kubectl = "kubectl --kubeconfig=${KUBECONFIG} --context=K8sCluster-CC-pre-release"
echo 'deploy to PRERELEASE!'
sh "${kubectl} apply -f ./environment/pre-release -n=pre-release"
echo 'Deployment End'
}
}
}
}
配置后,Jenkins
您可能会使用基于Kubeconfig
as的配置。
该插件根据构建中提供的参数生成kubeconfig文件。该文件存储在Jenkins执行程序的临时文件夹中,确切的路径可以在KUBECONFIG环境变量中找到。kubectl会自动从该环境变量中选择路径。构建完成(或退出管道块)后,临时kubeconfig文件将自动删除。
使用时,kubectl config get-contexts
您使用的本地配置${HOME}/.kube/config
。
如果您进行检查kubectl config --help
,将会得到:
- 如果设置了--kubeconfig标志,则仅加载该文件。该标志只能设置一次,并且不会发生合并。
- 如果设置了$ KUBECONFIG环境变量,则它将用作路径列表(系统的常规路径定界规则)。这些路径被合并。修改值后,将在定义节的文件中对其进行修改。创建值后,将在存在的第一个文件中创建该值。如果链中没有文件,那么它将创建列表中的最后一个文件。
- 否则,将使用$ {HOME} /。kube / config,并且不会进行合并。
这意味着,如果您在Kubernetes
本地使用,则使用选项3。
在Jenkins
您使用选项1的情况下,因此每次您kubectl
使用不同的配置运行时,其中不包含required context
。
在此命令中:kubectl = "kubectl --kubeconfig=${KUBECONFIG} --context=K8sCluster-CC-pre-release"
您正在重写kubeconfig
,因此找不到它context
。
请--kubeconfig=${KUBECONFIG}
从代码中删除,然后重试。那应该可以了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句