You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker化Jenkins环境中kubectl无法正常运行的问题求助

解决Jenkins中kubectl调用AWS凭证插件失败的问题

问题分析

你的kubeconfig配置了通过aws命令获取EKS集群的访问凭证,但Jenkins Agent环境默认没有安装AWS CLI,导致kubectl报错executable aws not found。后续手动安装AWS CLI时遇到权限拒绝,大概率是因为Jenkins workspace目录的权限限制,无法直接在当前目录执行安装后的AWS二进制文件。

下面提供两种解决方案,优先推荐第一种(自定义Jenkins Agent镜像),更高效且稳定。


方案1:自定义Jenkins Agent镜像(推荐)

预先在镜像中安装好AWS CLI、kubectl及依赖工具,避免每次构建重复安装,同时彻底解决权限问题。

步骤1:创建Dockerfile

# 基于Jenkins官方BlueOcean镜像
FROM jenkinsci/blueocean:latest

# 切换到root用户执行安装操作
USER root

# 安装基础依赖(curl、unzip等)
RUN apt-get update && apt-get install -y --no-install-recommends curl unzip && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

# 安装AWS CLI v2
RUN curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "/tmp/awscliv2.zip" && \
    unzip /tmp/awscliv2.zip -d /tmp && \
    /tmp/aws/install && \
    rm -rf /tmp/awscliv2.zip /tmp/aws

# 安装指定版本的kubectl(和你的集群版本匹配)
RUN curl -fsSL "https://storage.googleapis.com/kubernetes-release/release/v1.20.5/bin/linux/amd64/kubectl" -o "/usr/local/bin/kubectl" && \
    chmod +x /usr/local/bin/kubectl

# 切换回jenkins用户,符合安全规范
USER jenkins

步骤2:构建并使用镜像

  1. 构建镜像:
docker build -t custom-jenkins-agent:latest .
  1. 在Jenkins流水线中指定使用该镜像:
pipeline {
    agent { docker { image 'custom-jenkins-agent:latest' } }
    stages {
        stage('Cloning Repo') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'githubcreds', url: '<repo url>']]])
            }
        }
        stage('List pods') {
            steps {
                // 配置AWS凭证(需提前在Jenkins中添加AWS Access Key/Secret Key凭证)
                withAWS(credentials: 'aws-creds-id') {
                    withKubeConfig([credentialsId: 'kubecreds']) {
                        sh 'kubectl get pods -n stage'
                    }
                }
            }
        }
    }
}

方案2:在流水线中调整AWS CLI安装方式(临时方案)

如果无法自定义镜像,可以将AWS CLI安装到临时目录(如/tmp),绕开workspace的权限限制:

pipeline {
    agent any
    stages {
        stage('Cloning Repo') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'githubcreds', url: '<repo url>']]])
            }
        }
        stage('List pods') {
            steps {
                withAWS(credentials: 'aws-creds-id') {
                    withKubeConfig([credentialsId: 'kubecreds']) {
                        // 安装AWS CLI到临时目录
                        sh 'curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "/tmp/awscliv2.zip"'
                        sh 'unzip -q /tmp/awscliv2.zip -d /tmp'
                        sh '/tmp/aws/install --update -i /tmp/aws-cli -b /tmp'
                        
                        // 安装kubectl到临时目录
                        sh 'curl -fsSL "https://storage.googleapis.com/kubernetes-release/release/v1.20.5/bin/linux/amd64/kubectl" -o "/tmp/kubectl"'
                        sh 'chmod +x /tmp/kubectl'
                        
                        // 执行kubectl命令(使用绝对路径)
                        sh '/tmp/kubectl get pods -n stage'
                    }
                }
            }
        }
    }
}

额外注意事项

  • 确保Jenkins中已安装AWS Credentials Plugin和Kubernetes CLI Plugin,并正确配置了AWS凭证(Access Key/Secret Key)和kubeconfig凭证。
  • 你的kubectl版本要和Kubernetes集群版本兼容(建议相差不超过1个大版本)。

内容的提问来源于stack exchange,提问作者aquaman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 21:52:29