使用 GitHub Actions 持續傳遞

您可以使用 GitHub Actions 工作流程來定義工作流程,以在 Azure Functions 中自動建置程式碼並將其部署至函式應用程式。

定義工作流程設定的 YAML 檔案 (.yml) 是在存放庫的 /.github/workflows/ 路徑中維護。 此定義包含組成工作流程的動作和參數,其專屬於函式的開發語言。 不論語言為何,Functions 的 GitHub Actions 工作流程都會執行下列工作:

  1. 設定環境。
  2. 建置程式碼專案。
  3. 將套件部署至 Azure 中的函數應用程式。

Azure Functions 動作會處理部署至 Azure 中現有的函數應用程式。

您可以手動建立部署的工作流程組態檔。 您也可以透過下列其中一種方式,從一組語言特定範本產生檔案:

  • 在 Azure 入口網站中
  • 使用 Azure CLI
  • 從 GitHub 存放庫

如果您不想手動建立 YAML 檔案,請選取文章頂端的不同方法。

必要條件

  • 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶

  • GitHub 帳戶。 如果您沒有 Microsoft 帳戶,請免費註冊

  • 裝載在 Azure 上且具有 GitHub 存放庫中原始程式碼的運作中函數應用程式。

  • 在本機開發時,Azure CLI。 您也可以在 Azure Cloud Shell 中使用 Azure CLI。

產生部署認證

由於 GitHub Actions 會在部署期間使用發行設定檔來存取函數應用程式,因此您必須先取得發行設定檔,並將其安全地儲存為 GitHub 祕密

重要

發行設定檔是一種寶貴的認證,可讓您存取 Azure 資源。 請務必一律安全地傳輸及儲存這個設定檔。 在 GitHub 中,發行設定檔只能儲存在 GitHub 祕密中。

下載您的發行設定檔

若要下載函式應用程式的發佈設定檔:

  1. Azure 入口網站中,找出函數應用程式的頁面,展開左側資料行中的 [設定>組態]

  2. 在 [組態] 頁面中,選取 [一般設定] 索引標籤,並確定 SCM 基本驗證發佈認證已 [開啟]。 當此設定為 [關閉] 時,您無法使用發佈設定檔,因此請選取 [開啟],然後選取 [儲存]

  3. 返回函數應用程式的 [概觀] 頁面,然後選取 [取得發佈設定檔]

    下載發行設定檔

  4. 儲存並複製檔案的內容。

新增 GitHub 秘密

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

  2. 前往設定

  3. 選取 [祕密和變數]> [動作].

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

  5. 新增名稱為 AZURE_FUNCTIONAPP_PUBLISH_PROFILE 的新祕密,並將值設定為發行設定檔的內容。

  6. 選取 [新增祕密]。

GitHub 現在可以向 Azure 中的函式應用程式進行驗證。

從範本建立工作流程

手動建立工作流程設定的最佳方式是從正式支援的範本開始。

  1. 選擇 [Windows] 或 [Linux],以確定您取得正確的作業系統範本。

    部署至 Windows 會使用 runs-on: windows-latest

  2. 使用下列連結,從 Azure Functions 動作存放庫複製語言特定範本:

  3. 使用 Azure 中的函數應用程式資源名稱更新 env.AZURE_FUNCTIONAPP_NAME 參數。 您可以選擇性地更新參數,設定應用程式所使用的語言版本,例如針對 C# 為 DOTNET_VERSION

  4. 在存放庫的 /.github/workflows/ 路徑中新增這個 YAML 檔案。

在入口網站中建立工作流程設定

當您使用入口網站來啟用 GitHub Actions 時,Functions 會根據應用程式堆疊建立工作流程檔案,並將其認可至正確目錄中的 GitHub 存放庫。

入口網站會自動取得您的發行設定檔,並將其新增至存放庫的 GitHub 祕密。

函數應用程式建立期間

當您在 Azure 入口網站中建立函式時,可以透過 [部署] 索引標籤快速開始使用 GitHub Actions。 若要在您建立新的函數應用程式時新增 GitHub Actions 工作流程:

  1. Azure 入口網站中,在 [建立函數應用程式] 流程中選取 [部署]

    [函式] 功能表中 [部署] 選項的螢幕擷取畫面。

  2. 如果您想要讓每個程式碼更新觸發程式碼推送至 Azure 入口網站,請啟用 [持續部署]

  3. 輸入您的 GitHub 組織、存放庫和分支。

    GitHub 使用者帳戶詳細資料的螢幕擷取畫面。

  4. 完成函數應用程式的設定。 您的 GitHub 存放庫現在會在 /.github/workflows/ 中包含新的工作流程檔案。

針對現有的函數應用程式

若要將 GitHub Actions 工作流程新增至現有的函數應用程式:

  1. 瀏覽至 Azure 入口網站中的函數應用程式,然後選取 [部署中心]

  2. 針對 [來源],選取 [GitHub]。 如果您沒有看到「使用 GitHub Actions 建置」的預設訊息,請選取 [變更提供者]、選擇 [GitHub Actions],然後選取 [確定]

  3. 如果您尚未授權 GitHub 存取權,請選取 [授權]。 提供您的 GitHub 認證,然後選取 [登入]。 若要授權不同的 GitHub 帳戶,請選取 [變更帳戶],並使用另一個帳戶登入。

  4. 輸入您的 GitHub [組織]、[存放庫] 和 [分支]。 若要使用 GitHub Actions 進行部署,您必須具有此存放庫的寫入權限。

  5. 在 [驗證設定] 中,選擇是否要讓 GitHub Actions 使用使用者指派的身分識別或使用基本驗證認證進行驗證。 針對基本驗證,系統會使用目前的認證。

  6. 選取 [預覽檔案],以查看將會在 github/workflows/ 中新增至 GitHub 存放庫的工作流程檔案。

  7. 選取 [儲存] 以將工作流程檔案新增至存放庫。

將工作流程設定新增至您的存放庫

您可以使用 az functionapp deployment github-actions add 命令,從函數應用程式的正確範本產生工作流程組態檔。 新的 YAML 檔案接著會儲存在您提供的 GitHub 存放庫中的正確位置 (/.github/workflows/),而您應用程式的發行設定檔檔會新增至相同存放庫中的 GitHub 祕密。

  1. 執行此 az functionapp 命令,取代 githubUser/githubRepoMyResourceGroupMyFunctionapp 的值:

    az functionapp deployment github-actions add --repo "githubUser/githubRepo" -g MyResourceGroup -n MyFunctionapp --login-with-github
    

    此命令會使用互動式方法來擷取 GitHub 帳戶的個人存取權杖。

  2. 在終端機視窗中,您應該會看到類似下列訊息的項目:

    Please navigate to https://github.com/login/device and enter the user code XXXX-XXXX to activate and retrieve your GitHub personal access token.
    
  3. 複製唯一 XXXX-XXXX 程式碼、瀏覽至 https://github.com/login/device,然後輸入您複製的程式碼。 在輸入您的程式碼之後,您應該會看到類似下列訊息的項目:

    Verified GitHub repo and branch
    Getting workflow template using runtime: java
    Filling workflow template with name: func-app-123, branch: main, version: 8, slot: production, build_path: .
    Adding publish profile to GitHub
    Fetching publish profile with secrets for the app 'func-app-123'
    Creating new workflow file: .github/workflows/master_func-app-123.yml
    
  4. 移至您的 GitHub 存放庫並且選取 [動作]。 確認您的工作流程已執行。

建立工作流程組態檔

您可以直接從 GitHub 存放庫,從 Azure Functions 範本建立 GitHub Actions 工作流程組態檔。

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

  2. 選取 [動作],然後選取 [新增工作流程]

  3. 搜尋函式

    搜尋 GitHub Actions 函式範本的螢幕擷取畫面。

  4. 在 Microsoft Azure 所撰寫的顯示函數應用程式工作流程中,尋找符合程式碼語言的工作流程,然後選取 [設定]

  5. 在新建立的 YAML 檔案中,使用 Azure 中的函數應用程式資源名稱更新 env.AZURE_FUNCTIONAPP_NAME 參數。 您可以選擇性地更新參數,設定應用程式所使用的語言版本,例如針對 C# 為 DOTNET_VERSION

  6. 確認新的工作流程檔案儲存在 /.github/workflows/ 中,然後選取 [認可變更...]

更新工作流程設定

如果基於某些原因,您需要更新或變更現有的工作流程設定,只要瀏覽至存放庫中的 /.github/workflows/ 位置、開啟特定 YAML 檔案、進行任何必要的變更,然後將更新認可至存放庫。

範例:工作流程組態檔

下列範本範例使用 functions-action 的版本 1 和 publish profile 進行驗證。 範本取決於您選擇的語言,以及部署函數應用程式的作業系統:

如果您的函數應用程式在 Linux 上執行,請選取 [Linux]

name: Deploy DotNet project to Azure Function App

on:
  [push]

env:
  AZURE_FUNCTIONAPP_NAME: 'your-app-name'   # set this to your function app name on Azure
  AZURE_FUNCTIONAPP_PACKAGE_PATH: '.'       # set this to the path to your function app project, defaults to the repository root
  DOTNET_VERSION: '6.0.x'                   # set this to the dotnet version to use (e.g. '2.1.x', '3.1.x', '5.0.x')

jobs:
  build-and-deploy:
    runs-on: windows-latest
    environment: dev
    steps:
    - name: 'Checkout GitHub Action'
      uses: actions/checkout@v3

    - name: Setup DotNet ${{ env.DOTNET_VERSION }} Environment
      uses: actions/setup-dotnet@v3
      with:
        dotnet-version: ${{ env.DOTNET_VERSION }}

    - name: 'Resolve Project Dependencies Using Dotnet'
      shell: pwsh
      run: |
        pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}'
        dotnet build --configuration Release --output ./output
        popd

    - name: 'Run Azure Functions Action'
      uses: Azure/functions-action@v1
      id: fa
      with:
        app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
        package: '${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}/output'
        publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }}

Azure Functions 動作

Azure Functions 動作 (Azure/azure-functions) 會定義如何將程式碼發佈至 Azure 中的現有函數應用程式,或發佈至應用程式中的特定位置。

參數

下列參數最常與此動作搭配使用:

參數 說明
app-name (強制) 函式應用程式的名稱。
slot-name (選擇性) 您要部署的特定部署位置名稱。 位置必須已存在於函數應用程式中。 未指定時,程式碼會部署到作用中位置。
publish-profile (選擇性) 包含發行設定檔的 GitHub 祕密名稱。

也支援下列參數,但僅適用於特定案例:

參數 說明
package (選擇性) 設定您要從中發佈的存放庫的子路徑。 根據預設,此值會設定為 .,這表示會部署 GitHub 存放庫中的所有檔案和資料夾。
respect-pom-xml (選擇性) 僅針對 Java 函式使用。 您的應用程式部署成品是否需要從 pom.xml 檔案衍生。 部署 Java 函數應用程式時,您應該將此參數設定為 true,並將 package 設定為 .。 根據預設,此參數會設定為 false,這表示 package 參數必須指向應用程式的成品位置,例如 ./target/azure-functions/
respect-funcignore (選擇性) GitHub Actions 是否會接受您的 .funcignore 檔案,排除在其中定義的檔案和資料夾。 當您的存放庫具有 .funcignore 檔案且您想要用來排除路徑和檔案時,例如文字編輯器設定、.vscode/ 或 Python 虛擬環境 (.venv/),請將此值設定為 true。 預設設定是 false
scm-do-build-during-deployment (選擇性) App Service 部署網站 (Kudu) 是否會執行預先部署作業。 您可以在 https://<APP_NAME>.scm.azurewebsites.net/ 找到函數應用程式的部署網站。 當您需要控制 Kudu 中的部署,而不是解析 GitHub Actions 工作流程中的相依性時,請將此設定變更為 true。 預設值是 false。 如需詳細資訊,請參閱 SCM_DO_BUILD_DURING_DEPLOYMENT 設定。
enable-oryx-build (選擇性) Kudu 部署網站是否會使用 Oryx 來解析您的專案相依性。 當您想要使用 Oryx 透過利用遠端建置 (而不是 GitHub Actions 工作流程) 來解析專案相依性時,請設定為 true。 當 true 時,您也應該將 scm-do-build-during-deployment 設定為 true。 預設值是 false

考量

使用 Azure Functions 動作時,請記住下列考量:

  • 使用 GitHub Actions 時,程式碼是透過使用 Azure Functions 的 ZIP 部署,部署至您的函數應用程式。

  • GitHub 連線至 Azure 以進行部署所需的認證會儲存為 GitHub 存放庫中的祕密,並在部署中以 secrets.<SECRET_NAME> 的形式存取。

  • GitHub Actions 向 Azure Functions 驗證以進行部署最簡單的方式是使用發行設定檔。 您也可以使用服務主體進行驗證。 若要深入了解,請參閱此 GitHub Actions 存放庫

  • 設定環境和執行組建的動作會從範本產生,而且是語言特定。

  • 範本會使用 env 元素來定義組建和部署唯一的設定。

下一步