Jenkins 管道:kubectl:未找到

Mat*_*tty 3 jenkins kubernetes kubectl

我有以下 Jenkinsfile:

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

运行它时,我收到“kubectl:未找到”。我将 Kubernetes-cli 插件安装到 Jenkins,通过 生成密钥kubectl create sa jenkins-deployer。这是怎么回事?

mat*_*t_j 5

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

一种可能的获取方法kubectl是将其安装在 Jenkins 管道中,如下所示:
注意:我用来./kubectl get pods列出默认命名空间中的所有 Pod。此外,您可能需要更改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'
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

结果,在控制台输出中,我们可以看到它按预期工作:

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
Run Code Online (Sandbox Code Playgroud)