docker - jenkins管道中docker gcloud容器内的kubectl问题
问题描述
我在詹金斯有一个部署阶段,如下所示。
stage('Deploy service to K8S') {
steps {
withDockerContainer(image: "gcr.io/google.com/cloudsdktool/cloud-sdk", toolName: 'latest'){
withCredentials([file(credentialsId: 'jenkins_secret', variable: 'GC_KEY')]) {
sh("HOME=$WORKSPACE gcloud --quiet auth activate-service-account --key-file=${GC_KEY}")
sh("HOME=$WORKSPACE gcloud container clusters get-credentials test --zone us-central1-c --project ${PROJECT_ID}")
sh("kubectl get pods")
}
}
}
}
尽管 Jenkins 的日志显示我成功了认证。但是 kubectl get pods 命令失败并出现以下错误:与服务器 localhost:8080 的连接被拒绝 - 你指定了正确的主机或端口吗?
那里可能有什么问题?
PS我可以手动在docker里面运行它。
解决方案
我最近遇到了这样一个问题,这有帮助: kubectl 上的 GitHub 问题
它基本上是由于错误的 kubeconfig 而失败。请检查您的文件系统中是否没有旧~/.kube/config
文件。
如果这也不起作用,请尝试明确地提供 kube api 服务器,因为它似乎尝试连接到 localhost 而不是您的 kubectl api 服务器:
kubectl config set-cluster some-cluster --server=http://master.example.com:8080
推荐阅读
- java-8 - Iterate lists of different length using Java 8 streams
- python - 如何跨两个列表获取整数和操作的所有组合?
- hbase - HBase : What is the default size of Memcache,WAL and BlockCache if i don't configure them?
- anaconda - 创建 Anaconda 环境时缺少依赖项
- jquery - 有什么方法可以通过类名获取元素的偏移高度
- python - 在 python 中使用 selenium 在流体容器中查找元素
- jenkins - 使用 Jenkins 声明式语法获取秘密文件
- amazon-web-services - 来自 EC2 实例的 AWS / Heptio Authenticator
- c++ - 如何更改 C++ 标准 Eclipse CDT
- linux - 当 FOR 循环出现时,`kill "$!"` 不起作用