【问题标题】:Jenkins pipeline: kubectl: not found詹金斯管道:kubectl:未找到
【发布时间】:2020-10-16 19:42:30
【问题描述】:

我有以下 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),但还是没有找到
  • 您是否尝试使用命令的完整路径?你可以试试这样:/usr/local/bin/kubectl apply -f$(which kubectl) apply -f
  • 是的,没用。

标签: jenkins kubernetes kubectl


【解决方案1】:

我知道这是一个相当古老的问题,但我决定描述一个可能有用的简单解决方法。
要使用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'
    }
  }
}

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

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),我还必须提供 'withKubeConfig' 的 url。
  • 我们如何在 Windows 中做同样的事情?
  • 非常感谢您的解释和代码!
  • 应该被标记为答案...@matt_j 感谢您抽出宝贵时间发布此内容。
【解决方案2】:

您从 shellscript 步骤调用 kubectl。为了能够做到这一点,执行构建的代理(节点)需要有 kubectl 作为可执行文件。

【讨论】:

  • 我做了chmod +x kubectl,但仍然没有找到kubectl =(
  • 我假设 /usr/local/bin/kubectl 不在路径中,您可以尝试使用sh '/usr/local/bin/kubectl apply -f ' 运行它吗?确保 kubectl 确实在安装的实际代理节点上。
猜你喜欢
  • 1970-01-01
  • 2019-01-09
  • 2018-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 2017-05-24
  • 1970-01-01
相关资源
最近更新 更多