fix: 更新 Multi-Arch Docker Build 流程,分離建構與推送步驟
This commit is contained in:
parent
e651813034
commit
448011f7e2
1 changed files with 84 additions and 12 deletions
96
.github/workflows/docker-build-remote.yml
vendored
96
.github/workflows/docker-build-remote.yml
vendored
|
|
@ -286,13 +286,13 @@ jobs:
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
|
|
||||||
# ========================================
|
# ========================================
|
||||||
# Step 10: Multi-Arch Docker Build & Push
|
# Step 10: Multi-Arch Docker Build
|
||||||
# 說明:使用 buildx 同時建構 amd64 和 arm64 並推送
|
# 說明:使用 buildx 同時建構 amd64 和 arm64
|
||||||
# ========================================
|
# ========================================
|
||||||
- name: 🔨 Multi-Arch Docker Build & Push
|
- name: 🔨 Multi-Arch Docker Build
|
||||||
run: |
|
run: |
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
echo "🔨 開始 Multi-Arch Docker Build & Push"
|
echo "🔨 開始 Multi-Arch Docker Build"
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
echo "映像名稱: ${{ env.DOCKER_IMAGE_REPO }}:${{ github.event.inputs.image_tag }}"
|
echo "映像名稱: ${{ env.DOCKER_IMAGE_REPO }}:${{ github.event.inputs.image_tag }}"
|
||||||
echo "目標架構: linux/amd64, linux/arm64"
|
echo "目標架構: linux/amd64, linux/arm64"
|
||||||
|
|
@ -319,13 +319,11 @@ jobs:
|
||||||
# 確保使用正確的 builder
|
# 確保使用正確的 builder
|
||||||
docker buildx use "${BUILDER_NAME}"
|
docker buildx use "${BUILDER_NAME}"
|
||||||
|
|
||||||
# Multi-arch build + push
|
# Multi-arch build(只建構,不推送,載入到本地)
|
||||||
# 使用 --progress=plain 顯示完整 log
|
# 使用 --progress=plain 顯示完整 log
|
||||||
# 若失敗會顯示詳細錯誤資訊
|
|
||||||
if ! docker buildx build \
|
if ! docker buildx build \
|
||||||
--platform linux/amd64,linux/arm64 \
|
--platform linux/amd64,linux/arm64 \
|
||||||
-t "${IMAGE}" \
|
-t "${IMAGE}" \
|
||||||
--push \
|
|
||||||
--progress=plain \
|
--progress=plain \
|
||||||
. 2>&1; then
|
. 2>&1; then
|
||||||
|
|
||||||
|
|
@ -350,7 +348,81 @@ jobs:
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "✅ Multi-Arch Docker build & push 完成!"
|
echo "✅ Multi-Arch Docker Build 完成!"
|
||||||
|
echo ""
|
||||||
|
echo "🏗️ 已建構的架構:"
|
||||||
|
echo " - linux/amd64"
|
||||||
|
echo " - linux/arm64"
|
||||||
|
REMOTE_EOF
|
||||||
|
|
||||||
|
echo "========================================"
|
||||||
|
|
||||||
|
# ========================================
|
||||||
|
# Step 11: Docker Push 到 Docker Hub
|
||||||
|
# 說明:推送建構好的映像到 Docker Hub
|
||||||
|
# ========================================
|
||||||
|
- name: 📤 Docker Push 到 Docker Hub
|
||||||
|
run: |
|
||||||
|
echo "========================================"
|
||||||
|
echo "📤 推送映像到 Docker Hub"
|
||||||
|
echo "========================================"
|
||||||
|
echo "映像: ${{ env.DOCKER_IMAGE_REPO }}:${{ github.event.inputs.image_tag }}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 檢查 Docker Hub 登錄狀態,未登錄則重新登錄
|
||||||
|
echo "🔐 檢查 Docker Hub 登錄狀態..."
|
||||||
|
tailscale ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << EOF
|
||||||
|
if docker info 2>/dev/null | grep -q "Username:"; then
|
||||||
|
echo "✅ Docker Hub 已登錄"
|
||||||
|
else
|
||||||
|
echo "⚠️ Docker Hub 未登錄,正在重新登錄..."
|
||||||
|
echo '${{ secrets.DOCKERHUB_TOKEN }}' | docker login -u '${{ secrets.DOCKERHUB_USERNAME }}' --password-stdin
|
||||||
|
echo "✅ Docker Hub 重新登錄成功"
|
||||||
|
fi
|
||||||
|
EOF
|
||||||
|
|
||||||
|
tailscale ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'REMOTE_EOF'
|
||||||
|
set -e
|
||||||
|
|
||||||
|
WORKDIR="${{ env.REMOTE_WORKDIR }}"
|
||||||
|
PROJECT="${{ env.PROJECT_NAME }}"
|
||||||
|
IMAGE="${{ env.DOCKER_IMAGE_REPO }}:${{ github.event.inputs.image_tag }}"
|
||||||
|
BUILDER_NAME="multiarch-builder-${{ github.run_id }}"
|
||||||
|
|
||||||
|
echo "📂 進入專案目錄..."
|
||||||
|
cd "${WORKDIR}/${PROJECT}"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "📤 執行 Docker Push..."
|
||||||
|
echo "映像標籤: ${IMAGE}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 確保使用正確的 builder
|
||||||
|
docker buildx use "${BUILDER_NAME}"
|
||||||
|
|
||||||
|
# 使用 buildx build --push 來推送 multi-arch 映像
|
||||||
|
if ! docker buildx build \
|
||||||
|
--platform linux/amd64,linux/arm64 \
|
||||||
|
-t "${IMAGE}" \
|
||||||
|
--push \
|
||||||
|
--progress=plain \
|
||||||
|
. 2>&1; then
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "========================================"
|
||||||
|
echo "❌ Docker Push 失敗!"
|
||||||
|
echo "========================================"
|
||||||
|
echo ""
|
||||||
|
echo "🔧 可能的原因:"
|
||||||
|
echo " 1. Docker Hub 登入已過期"
|
||||||
|
echo " 2. 網路連線問題"
|
||||||
|
echo " 3. Docker Hub 配額限制"
|
||||||
|
echo ""
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "✅ Docker Push 完成!"
|
||||||
echo ""
|
echo ""
|
||||||
echo "📦 映像已推送至 Docker Hub:"
|
echo "📦 映像已推送至 Docker Hub:"
|
||||||
echo " ${IMAGE}"
|
echo " ${IMAGE}"
|
||||||
|
|
@ -363,7 +435,7 @@ jobs:
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
|
|
||||||
# ========================================
|
# ========================================
|
||||||
# Step 11: 驗證 Docker Hub 映像
|
# Step 13: 驗證 Docker Hub 映像
|
||||||
# 說明:確認映像已成功推送並檢查架構
|
# 說明:確認映像已成功推送並檢查架構
|
||||||
# ========================================
|
# ========================================
|
||||||
- name: ✅ 驗證 Docker Hub 映像
|
- name: ✅ 驗證 Docker Hub 映像
|
||||||
|
|
@ -391,7 +463,7 @@ jobs:
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
|
|
||||||
# ========================================
|
# ========================================
|
||||||
# Step 12: 清理本次 Build 資源
|
# Step 14: 清理本次 Build 資源
|
||||||
# 說明:只清理本次 build 產生的 builder 和 cache
|
# 說明:只清理本次 build 產生的 builder 和 cache
|
||||||
# ========================================
|
# ========================================
|
||||||
- name: 🧹 清理本次 Build 資源
|
- name: 🧹 清理本次 Build 資源
|
||||||
|
|
@ -435,7 +507,7 @@ jobs:
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
|
|
||||||
# ========================================
|
# ========================================
|
||||||
# Step 13: Docker Logout
|
# Step 15: Docker Logout
|
||||||
# 說明:登出 Docker Hub
|
# 說明:登出 Docker Hub
|
||||||
# ========================================
|
# ========================================
|
||||||
- name: 🔒 Docker Hub 登出
|
- name: 🔒 Docker Hub 登出
|
||||||
|
|
@ -451,7 +523,7 @@ jobs:
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
|
|
||||||
# ========================================
|
# ========================================
|
||||||
# Step 14: 顯示完成摘要
|
# Step 16: 顯示完成摘要
|
||||||
# 說明:顯示本次 build 的摘要資訊
|
# 說明:顯示本次 build 的摘要資訊
|
||||||
# ========================================
|
# ========================================
|
||||||
- name: 📋 Build 完成摘要
|
- name: 📋 Build 完成摘要
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue