我有一个linux虚拟机,在那里我可以毫无问题地运行kubectl get pods
命令。
我发现当我运行时:
gcloud container clusters get-credentials --cluster <cluster-name>
命令,它将kubeconfig文件按预期存储在$HOME/.kube/config
中。
但当我在同一个虚拟机中通过jenkins管道运行相同的步骤时,它会导致到GKE集群的连接超时问题。此外,kubeconfig文件的内容相同,但这次的路径不同。它是在管道的当前目录中创建的,名为.kube。我也尝试过在管道中传递--kubeconfig $HOME/.kube/config
,但再次出现相同的问题。
我也尝试过在管道中传递--kubeconfig$HOME/.kube/config,但问题再次出现。
通过在jenkins管道中指定$HOME
变量,您正在从jenkins user
的主目录请求kube配置文件,例如/var/lib/jenkins
和:
它是在管道的当前目录中创建的,名称为.kube
因此,解决方案是在jenkins作业中设置KUBECONFIG
环境变量,或者设置--kubeconfig
标志并将其指向现有的工作kube配置文件(检查kube配置路径(。查看yourJenkinsUrl:port/env-vars.html
中所有可用的詹金斯环境变量
编辑:
有一个变通方法可能会有所帮助-Jenkins的Kubernetes CLI插件。
允许您在作业中配置kubectl以与Kubernetes集群交互。在kubectl之上构建的任何工具都可以从管道中使用来执行部署,例如Shopify/krane。
// Example when used in a pipeline
node {
stage('Apply Kubernetes files') {
withKubeConfig([credentialsId: 'user1', serverUrl: 'https://api.k8s.my-company.com']) {
sh 'kubectl apply -f my-kubernetes-directory'
}
}
}
它是如何工作的?
插件根据构建中提供的参数生成一个kubeconfig文件。该文件存储在构建工作区内的一个临时文件中,确切路径可以在KUBECONFIG环境变量中找到。kubectl会自动从这个环境变量中获取路径。一旦构建完成(或管道块退出(,临时kubeconfig文件就会自动删除。