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

如何通过Jenkins流水线构建Kaniko镜像并推送至AWS ECR及凭证问题

解决Kaniko推送AWS ECR时凭证预加载为空的问题

获取有效凭证的三种方式

  • 使用IAM角色(推荐)
    如果Kaniko运行在EC2实例、EKS Pod或其他AWS托管服务上,给对应资源绑定具备ECR操作权限的IAM角色即可。Kaniko会自动通过AWS元数据服务获取临时凭证,无需手动配置。所需核心权限包括:
    ecr:GetAuthorizationToken、ecr:BatchCheckLayerAvailability、ecr:GetDownloadUrlForLayer、ecr:BatchGetImage、ecr:InitiateLayerUpload、ecr:UploadLayerPart、ecr:CompleteLayerUpload、ecr:PutImage

  • 生成临时凭证
    通过AWS CLI执行以下命令直接获取可用于Kaniko的凭证:

    aws ecr get-login-password --region <你的AWS区域>
    

    输出结果就是Kaniko推送时需要的密码,用户名固定为AWS。也可以通过AWS STS API生成带会话令牌的临时凭证,设置环境变量AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_SESSION_TOKEN后,Kaniko会自动读取。

  • 使用ECR凭证助手
    安装docker-credential-ecr-login工具并配置Docker使用该凭证助手,Kaniko会复用Docker的凭证配置,避免手动输入凭证信息。

Jenkins流水线构建并推送Kaniko镜像至AWS ECR

前置准备

  1. Jenkins服务器需安装AWS CLI,或安装AWS Credentials插件以管理AWS凭证。
  2. 确保Jenkins具备访问AWS ECR的权限:要么在全局凭证中添加AWS Access Key/Secret Key,要么给Jenkins所在的AWS资源(如EC2、EKS Pod)绑定对应IAM角色。

流水线示例代码

pipeline {
    agent any
    environment {
        AWS_REGION = "us-east-1" // 替换为你的AWS区域
        ECR_REPO_URI = "<你的AWS账户ID>.dkr.ecr.${AWS_REGION}.amazonaws.com/<你的镜像仓库名>"
        IMAGE_TAG = "latest"
    }
    stages {
        stage('拉取代码') {
            steps {
                checkout scm
            }
        }
        stage('Kaniko构建并推送镜像') {
            steps {
                script {
                    // 获取ECR登录密码
                    def ecrLoginPassword = sh(
                        script: "aws ecr get-login-password --region ${AWS_REGION}",
                        returnStdout: true
                    ).trim()

                    // 运行Kaniko executor容器
                    sh """
                        docker run -v \$(pwd):/workspace gcr.io/kaniko-project/executor:latest \
                        --dockerfile=/workspace/Dockerfile \
                        --context=/workspace \
                        --destination=${ECR_REPO_URI}:${IMAGE_TAG} \
                        --username=AWS \
                        --password=${ecrLoginPassword}
                    """
                }
            }
        }
    }
    post {
        success {
            echo "镜像已成功推送至ECR:${ECR_REPO_URI}:${IMAGE_TAG}"
        }
        failure {
            echo "镜像推送失败,请查看日志排查问题"
        }
    }
}

关键注意事项

  • 如果Jenkins运行在EKS集群中,优先给Jenkins Pod绑定IAM角色,无需在流水线中处理凭证,AWS CLI会自动获取权限。
  • 确保代码根目录存在Dockerfile,若路径不同需调整--dockerfile参数的路径。
  • Kaniko的--username必须设置为AWS,密码为aws ecr get-login-password的输出内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:00:55