☁️ 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)
-
✅ 自動推送映像到雲平台
-
✅ 減少人為操作錯誤
-
✅ 加速交付週期
🗺 本文目錄
<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_NAME | Web App 名稱 |
AZURE_PUBLISH_PROFILE | 從 Azure Portal 匯出來的發佈設定(Base64) |
➡️ Azure Portal → Web App → 部署中心 → 下載發佈設定檔
✍️ Workflow 範例:
name: Deploy to Azure Web Appon:push:branches: [main]jobs:build-and-deploy:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v4- name: Deploy to Azure Web Appuses: azure/webapps-deploy@v3with:app-name: ${{ secrets.AZURE_WEBAPP_NAME }}publish-profile: ${{ secrets.AZURE_PUBLISH_PROFILE }}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_ID | IAM 使用者金鑰 |
AWS_SECRET_ACCESS_KEY | IAM 使用者密鑰 |
ECS_CLUSTER | ECS 群組名稱 |
ECS_SERVICE | ECS 服務名稱 |
ECS_TASK_DEFINITION | JSON 定義或已註冊的名稱 |
✍️ Workflow 範例:
name: Deploy to AWS ECSon:push:branches: [main]jobs:deploy:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v4- name: Configure AWS Credentialsuses: aws-actions/configure-aws-credentials@v4with:aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}aws-region: ap-northeast-1- name: Deploy to ECSuses: aws-actions/amazon-ecs-deploy-task-definition@v1with:service: ${{ secrets.ECS_SERVICE }}cluster: ${{ secrets.ECS_CLUSTER }}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_KEY | GCP Service Account JSON 金鑰(base64) |
GKE_PROJECT | GCP 專案名稱 |
GKE_CLUSTER | GKE 群組名稱 |
GKE_ZONE | GKE 區域(如 asia-east1-b) |
✍️ Workflow 範例:
name: Deploy to GKEon:push:branches: [main]jobs:deploy:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v4- name: Set up GCP credentialsuses: google-github-actions/auth@v1with:credentials_json: ${{ secrets.GCP_SA_KEY }}- name: Set up kubectluses: google-github-actions/setup-gcloud@v1with:project_id: ${{ secrets.GKE_PROJECT }}- run: |gcloud container clusters get-credentials ${{ secrets.GKE_CLUSTER }} \--zone ${{ secrets.GKE_ZONE }} --project ${{ secrets.GKE_PROJECT }}- name: Deploy to GKErun: |kubectl apply -f k8s/deployment.yamlkubectl apply -f k8s/service.yaml
📝 你需要在專案內準備好 k8s/deployment.yaml 和 service.yaml 等 Kubernetes 定義檔。
<a name="conclusion"></a>
🧠 結語與延伸學習
透過 GitHub Actions + 雲平台部署,開發者可以打造:
-
💡 自動化的 CI/CD 工作流程
-
🚀 更穩定、快速的交付流程
-
☁️ 無痛整合多雲(Multi-Cloud)架構
留言
張貼留言