Jenkins管道:找不到kubectl

3

I have the following Jenkinsfile:

node {
  stage('Apply Kubernetes files') {
    withKubeConfig([credentialsId: 'jenkins-deployer', serverUrl: 'https://192.168.64.2:8443']) {
      sh 'kubectl apply -f '
    }
  }
}

在运行时,我得到了"kubectl: not found"的错误提示。我将 Kubernetes-cli 插件安装到了 Jenkins 中,并通过 kubectl create sa jenkins-deployer 生成了密钥,这里有什么问题吗?

另外,我已经安装了Kubectl(/usr/local/bin),但仍然找不到它。 - Matty
你尝试使用完整的命令路径了吗?你可以尝试像这样:/usr/local/bin/kubectl apply -f 或者 $(which kubectl) apply -f - Mr.KoopaKiller
是的,它没有帮助。 - Matty
2个回答

5

我知道这是一个相当久远的问题,但我决定描述一个简单的解决方法,它可能会有所帮助。
要使用Kubernetes CLI插件,我们需要安装kubectl执行器。

获取kubectl的一种可能方式是在Jenkins pipeline中安装,如下述代码片段:
注意:我使用./kubectl get pods列出默认命名空间中所有Pods。此外,您可能需要更改kubectl版本(v1.20.5)。

node {
  stage('List pods') {
    withKubeConfig([credentialsId: 'kubernetes-config']) {
        sh 'curl -LO "https://storage.googleapis.com/kubernetes-release/release/v1.20.5/bin/linux/amd64/kubectl"'  
        sh 'chmod u+x ./kubectl'  
        sh './kubectl get pods'
    }
  }
}

因此,在"控制台输出"中,我们可以看到它按预期工作:
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.20.5/bin/linux/amd64/kubectl
  ...
[Pipeline] sh
+ chmod u+x ./kubectl
[Pipeline] sh
+ ./kubectl get pods
NAME            READY   STATUS    RESTARTS   AGE
default-zhxwb   1/1     Running   0          34s
my-jenkins-0    2/2     Running   0          134m

谢谢!它像魔法一样运行。唯一需要补充的是 - 凭据必须是x509,并且在我的情况下(minikube),我还需要提供一个url到'withKubeConfig'。 - WinterChild
我们如何在Windows中做同样的事情? - Oplop98
非常感谢您的解释和代码! - kaizokun
@matt_j谢谢你抽出时间发布这个帖子。 - Krik

0

您可以从shell脚本步骤中调用kubectl。为了能够这样做,执行构建的代理(节点)需要将kubectl作为可执行文件可用。


我已经执行了chmod +x kubectl,但是kubectl仍然找不到=( - Matty
我猜测 /usr/local/bin/kubectl 不在路径中,你可以尝试使用 sh '/usr/local/bin/kubectl apply -f ' 运行它。确保 kubectl 真的已经安装在实际的代理节点上。 - Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接