共用方式為


使用 GitHub Actions 工作流程在 Azure 儲存體中部署您的靜態網站

使用工作流程將靜態網站部署至 Azure 儲存體帳戶,進而開始使用 GitHub Actions。 設定 GitHub Actions 工作流程之後,您將能夠在對網站的程式碼進行變更時,從 GitHub 自動將您的網站部署至 Azure。

注意

如果您使用 Azure Static Web Apps,則不需要手動設定 GitHub Actions 的工作流程。 Azure Static Web Apps 會為您自動建立 GitHub Actions 的工作流程。

必要條件

Azure 訂用帳戶和 GitHub 帳戶。

注意

經常會使用內容傳遞網路 (CDN),以降低對全球使用者的延遲,並將交易數目減少至您的儲存體帳戶。 若將靜態內容部署到雲端式儲存體服務,則可以減少可能十分昂貴的計算執行個體需求。 如需詳細資訊,請參閱靜態內容裝載模式

產生部署認證

若要搭配 OIDC 使用 Azure 登入動作 ,您必須在 Microsoft Entra 應用程式或使用者指派的受控識別上設定同盟身分識別認證。

選項 1:Microsoft Entra 應用程式

選項 2:使用者指派的受控識別

設定 GitHub 祕密

您必須將應用程式的 用戶端識別碼目錄(租使用者)標識碼訂用帳戶識別碼 提供給登入動作。 這些值可以直接在工作流程中提供,也可以儲存在 GitHub 的秘密中,並在您的工作流程中參考。 將值儲存為 GitHub 秘密是較安全的選擇。

  1. GitHub (英文) 中,前往您的存放庫。

  2. 選取 [安全性] > [祕密和變數] > [動作]。

    新增祕密的螢幕擷取畫面

  3. 選取 [新增存放庫祕密]。

    注意

    若要增強公用存放庫中的工作流程安全性,請使用環境秘密,而不是存放庫秘密。 如果環境需要核准,除非其中一個必要的檢閱者核准環境秘密,否則作業無法存取環境秘密。

  4. 建立 AZURE_CLIENT_IDAZURE_TENANT_IDAZURE_SUBSCRIPTION_ID 的秘密。 從您的 Microsoft Entra 應用程式或 GitHub 秘密的使用者指派受控識別複製這些值:

    GitHub 祕密 Microsoft Entra 應用程式或使用者指派的受控識別
    AZURE_CLIENT_ID Client ID
    AZURE_SUBSCRIPTION_ID 訂用帳戶識別碼
    AZURE_TENANT_ID 目錄 (租用戶) ID

    注意

    基於安全性考慮,我們建議使用 GitHub 秘密,而不是將值直接傳遞至工作流程。

新增您的工作流程

  1. 移至 GitHub 存放庫的 [動作]。

    GitHub Actions 功能表項

  2. 選取 [自行設定工作流程]。

  3. 刪除工作流程檔案 on: 區段之後的所有內容。 例如,剩餘的工作流程看起來可能像這樣。

    name: CI with OpenID Connect
    
    on:
        push:
            branches: [ main ]
    
  4. 新增權限區段。

    name: CI with OpenID Connect
    
    on:
        push:
            branches: [ main ]
    
    permissions:
          id-token: write
          contents: read
    
  5. 加入簽出和登入動作。 這些動作會簽出您的站台碼,並使用您稍早建立的 GitHub 祕密向 Azure 進行驗證。

    name: CI with OpenID Connect
    
    on:
        push:
            branches: [ main ]
    
    permissions:
          id-token: write
          contents: read
    
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v2
          with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
  6. 使用 Azure CLI 動作,將您的程式碼上傳至 Blob 儲存體,並清除 CDN 端點。 針對 az storage blob upload-batch,使用您的儲存體帳戶名稱取代預留位置。 指令碼會上傳至 $web 容器。 針對 az cdn endpoint purge,將預留位置取代為您的 CDN 設定檔名稱、CDN 端點名稱和資源群組。 若要加快 CDN 清除,您可以將 --no-wait 選項新增至 az cdn endpoint purge。 若要加強安全性,您也可以使用儲存體帳戶金鑰來新增 --account-key 選項。

        - name: Upload to blob storage
          uses: azure/CLI@v1
          with:
            inlineScript: |
                az storage blob upload-batch --account-name <STORAGE_ACCOUNT_NAME>  --auth-mode key -d '$web' -s .
        - name: Purge CDN endpoint
          uses: azure/CLI@v1
          with:
            inlineScript: |
               az cdn endpoint purge --content-paths  "/*" --profile-name "CDN_PROFILE_NAME" --name "CDN_ENDPOINT" --resource-group "RESOURCE_GROUP"
    
  7. 藉由新增動作至 Azure 的登出,來完成您的工作流程。 以下是完成後的工作流程。 檔案會出現在存放庫的 .github/workflows 資料夾中。

    name: CI with OpenID Connect
    
    on:
        push:
            branches: [ main ]
    
    permissions:
          id-token: write
          contents: read
    
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v2
          with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
        - name: Upload to blob storage
          uses: azure/CLI@v1
          with:
            inlineScript: |
                az storage blob upload-batch --account-name <STORAGE_ACCOUNT_NAME> --auth-mode key -d '$web' -s .
        - name: Purge CDN endpoint
          uses: azure/CLI@v1
          with:
            inlineScript: |
               az cdn endpoint purge --content-paths  "/*" --profile-name "CDN_PROFILE_NAME" --name "CDN_ENDPOINT" --resource-group "RESOURCE_GROUP"
    
      # Azure logout
        - name: logout
          run: |
                az logout
          if: always()
    

檢閱您的部署

  1. 移至 GitHub 存放庫的 [動作]。

  2. 開啟第一個結果,以查看工作流程的執行詳細記錄。

    GitHub Actions 執行的記錄

清除資源

當您不再需要靜態網站和 GitHub 存放庫時,請刪除資源群組和 GitHub 存放庫,以清除您所部署的資源。

下一步