#!/bin/bash set -e # 遇到错误立即退出 # 配置变量 AWS_ACCOUNT_ID="177603749739" AWS_REGION="us-west-2" ECR_REGISTRY="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com" IMAGE_NAME="goalfy/goalfymax-admin" IMAGE_TAG="${1:-latest}" # 默认使用 latest,可通过第一个参数指定版本 FULL_IMAGE_NAME="${ECR_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}" echo "==========================================" echo "构建和推送 Docker 镜像到 AWS ECR" echo "==========================================" echo "镜像名称: ${FULL_IMAGE_NAME}" echo "==========================================" # 1. 登录到 AWS ECR echo "步骤 1/4: 登录到 AWS ECR..." aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin ${ECR_REGISTRY} if [ $? -ne 0 ]; then echo "错误: ECR 登录失败,请检查 AWS 凭证配置" exit 1 fi echo "✓ ECR 登录成功" # 2. 构建 Docker 镜像 echo "" echo "步骤 2/4: 构建 Docker 镜像..." docker build --platform linux/amd64 -t ${FULL_IMAGE_NAME} -f Dockerfile . if [ $? -ne 0 ]; then echo "错误: Docker 镜像构建失败" exit 1 fi echo "✓ 镜像构建成功" # 3. 如果指定了版本标签,同时也打上 latest 标签 if [ "${IMAGE_TAG}" != "latest" ]; then echo "" echo "步骤 3/4: 打 latest 标签..." LATEST_IMAGE_NAME="${ECR_REGISTRY}/${IMAGE_NAME}:latest" docker tag ${FULL_IMAGE_NAME} ${LATEST_IMAGE_NAME} echo "✓ latest 标签已创建" else echo "" echo "步骤 3/4: 跳过(已经是 latest 标签)" fi # 4. 推送镜像到 ECR echo "" echo "步骤 4/4: 推送镜像到 ECR..." docker push ${FULL_IMAGE_NAME} if [ $? -ne 0 ]; then echo "错误: 镜像推送失败" exit 1 fi # 如果创建了 latest 标签,也推送它 if [ "${IMAGE_TAG}" != "latest" ]; then echo "推送 latest 标签..." docker push ${LATEST_IMAGE_NAME} fi echo "" echo "==========================================" echo "✓ 完成!镜像已成功推送" echo "==========================================" echo "镜像地址: ${FULL_IMAGE_NAME}" if [ "${IMAGE_TAG}" != "latest" ]; then echo " ${LATEST_IMAGE_NAME}" fi echo "==========================================" echo "" echo "下一步: 更新 k8s/deployment.yaml 中的镜像地址为:" echo " ${FULL_IMAGE_NAME}"