☁️ GitHub Actions 自動部署 Docker 映像到 Azure Web App、ECS、GKE 的實戰指南

 

📖 文章摘要(Meta Description)

學會如何將 GitHub Actions 建構好的 Docker 映像,自動部署到 Azure Web App、AWS ECS、Google Kubernetes Engine(GKE)。從權限設定到 YAML Workflow 實作,帶你一次搞懂雲端部署流程!


🚀 為什麼用 GitHub Actions 搭配雲平台部署?

CI/CD 不應只停留在「建構映像」,還應該延伸到「部署到生產環境」。透過 GitHub Actions,我們可以:

  • ✅ 持續部署(Continuous Deployment)

  • ✅ 自動推送映像到雲平台

  • ✅ 減少人為操作錯誤

  • ✅ 加速交付週期


🗺 本文目錄

  1. 部署到 Azure Web App

  2. 部署到 AWS ECS Fargate

  3. 部署到 GCP GKE

  4. 結語與延伸閱讀


<a name="azure"></a>

☁️ 1. 部署到 Azure Web App for Containers

✅ 先決條件:

  • 已建立 Azure Web App(Linux 容器類型)

  • 建構完成並推送到 Docker Hub 或 Azure Container Registry (ACR)

🔐 建立 GitHub Secrets:

Key說明
AZURE_WEBAPP_NAMEWeb App 名稱
AZURE_PUBLISH_PROFILE從 Azure Portal 匯出來的發佈設定(Base64)

➡️ Azure Portal → Web App → 部署中心下載發佈設定檔

✍️ Workflow 範例:

  1. name: Deploy to Azure Web App
  2. on:
  3. push:
  4. branches: [main]
  5. jobs:
  6. build-and-deploy:
  7. runs-on: ubuntu-latest
  8. steps:
  9. - uses: actions/checkout@v4
  10. - name: Deploy to Azure Web App
  11. uses: azure/webapps-deploy@v3
  12. with:
  13. app-name: ${{ secrets.AZURE_WEBAPP_NAME }}
  14. publish-profile: ${{ secrets.AZURE_PUBLISH_PROFILE }}
  15. images: yourdockerhubusername/yourapp:latest



<a name="ecs"></a>

🐳 2. 部署到 AWS ECS Fargate

✅ 先決條件:

  • 已建立 ECS Cluster、Task Definition 與 Service

  • 使用 Docker Hub 或 Amazon ECR 儲存映像

🔐 建立 Secrets:

Key說明
AWS_ACCESS_KEY_IDIAM 使用者金鑰
AWS_SECRET_ACCESS_KEYIAM 使用者密鑰
ECS_CLUSTERECS 群組名稱
ECS_SERVICEECS 服務名稱
ECS_TASK_DEFINITIONJSON 定義或已註冊的名稱

✍️ Workflow 範例:

  1. name: Deploy to AWS ECS
  2. on:
  3. push:
  4. branches: [main]
  5. jobs:
  6. deploy:
  7. runs-on: ubuntu-latest
  8. steps:
  9. - uses: actions/checkout@v4
  10. - name: Configure AWS Credentials
  11. uses: aws-actions/configure-aws-credentials@v4
  12. with:
  13. aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
  14. aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
  15. aws-region: ap-northeast-1
  16. - name: Deploy to ECS
  17. uses: aws-actions/amazon-ecs-deploy-task-definition@v1
  18. with:
  19. service: ${{ secrets.ECS_SERVICE }}
  20. cluster: ${{ secrets.ECS_CLUSTER }}
  21. task-definition: ${{ secrets.ECS_TASK_DEFINITION }}


✅ 若有多容器或動態更新映像 URI,可以先 sed 替換 task definition JSON,再註冊新版本。


<a name="gke"></a>

☸️ 3. 部署到 Google Kubernetes Engine(GKE)

✅ 先決條件:

  • 已建立 GKE Cluster 並開啟 Kubernetes API

  • 已將映像推送到 Google Container Registry (GCR)Artifact Registry

  • 已建立 Service Account 並下載 JSON 金鑰檔

🔐 建立 Secrets:

Key說明
GCP_SA_KEYGCP Service Account JSON 金鑰(base64)
GKE_PROJECTGCP 專案名稱
GKE_CLUSTERGKE 群組名稱
GKE_ZONEGKE 區域(如 asia-east1-b)

✍️ Workflow 範例:

  1. name: Deploy to GKE
  2. on:
  3. push:
  4. branches: [main]
  5. jobs:
  6. deploy:
  7. runs-on: ubuntu-latest
  8. steps:
  9. - uses: actions/checkout@v4
  10. - name: Set up GCP credentials
  11. uses: google-github-actions/auth@v1
  12. with:
  13. credentials_json: ${{ secrets.GCP_SA_KEY }}
  14. - name: Set up kubectl
  15. uses: google-github-actions/setup-gcloud@v1
  16. with:
  17. project_id: ${{ secrets.GKE_PROJECT }}
  18. - run: |
  19. gcloud container clusters get-credentials ${{ secrets.GKE_CLUSTER }} \
  20. --zone ${{ secrets.GKE_ZONE }} --project ${{ secrets.GKE_PROJECT }}
  21. - name: Deploy to GKE
  22. run: |
  23. kubectl apply -f k8s/deployment.yaml
  24. kubectl apply -f k8s/service.yaml


📝 你需要在專案內準備好 k8s/deployment.yamlservice.yaml 等 Kubernetes 定義檔。


<a name="conclusion"></a>

🧠 結語與延伸學習

透過 GitHub Actions + 雲平台部署,開發者可以打造:

  • 💡 自動化的 CI/CD 工作流程

  • 🚀 更穩定、快速的交付流程

  • ☁️ 無痛整合多雲(Multi-Cloud)架構

留言

這個網誌中的熱門文章

🛠【ASP.NET Core + Oracle】解決 ORA-00904 "FALSE": 無效的 ID 錯誤與資料欄位動態插入顯示問題

🛠【實戰排除教學】從 VS Code 的 _logger 錯誤,到 PowerShell 找不到 npm/serve,再到 Oracle ORA-03135 連線中斷——一次搞懂!

🔎如何在 Oracle PL/SQL 儲存過程中為文字欄位加入換行符號(CHR(10))——以 Updlcmremark 為例