使用 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 存放庫中。

產生部署認證

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

重要

發行配置檔是一種寶貴的認證,可讓您存取 Azure 資源。 請務必一律傳輸並安全地儲存。 在 GitHub 中,發行配置檔只能儲存在 GitHub 秘密中。

下載您的發行配置檔

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

  1. 選取函式應用程式的 [概觀 ] 頁面,然後選取 [ 取得發佈配置檔]。

    下載發行設定檔

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

新增 GitHub 秘密

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

  2. 前往設定

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

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

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

  6. 選取 [新增祕密]。

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

從範本建立工作流程

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

  1. 選擇 WindowsLinux,確定您取得正確作業系統的範本。

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

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

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

  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 存放庫的 github/workflows/工作流程檔案。

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

將工作流程組態新增至您的存放庫

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

  1. 執行此指令az functionapp取代、 值githubUser/githubRepoMyFunctionappMyResourceGroup

    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 參數。 您可以選擇性地更新參數,以設定應用程式所使用的語言版本,例如 DOTNET_VERSION C# 。

  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 秘密名稱。

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

參數 說明
(選擇性)在您的存放庫中設定要發行的子路徑。 根據預設,此值會設定為 .,這表示會部署 GitHub 存放庫中的所有檔案和資料夾。
respect-pom-xml (選擇性)僅適用於 Java 函式。 您的應用程式部署成品是否需要從pom.xml檔案衍生。 部署 Java 函式應用程式時,您應該將此參數設定為 true ,並將 設定 package.。 根據預設,此參數會設定為 false,這表示 package 參數必須指向應用程式的成品位置,例如 ./target/azure-functions/
respect-funcignore (選擇性)GitHub Actions 是否接受 .funcignore 檔案,以排除其中定義的檔案和資料夾。 當您的存放庫有 .funcignore 檔案,而且您想要使用它排除路徑和檔案時,請將此值 true 設定為 ,例如文本編輯器組態、.vscode/或 Python 虛擬環境 (.venv/)。 預設設定是 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 解析您的專案相依性。 true當您想要使用 Oryx 來使用遠端組建來解析專案相依性,而不是 GitHub Actions 工作流程時,請將 設定為 。 當 時 true,您也應該將 設定 scm-do-build-during-deploymenttrue。 預設值是 false

考量

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

  • 使用 GitHub Actions 時,程式代碼會使用 適用於 Azure Functions 的 Zip 部署,部署到函式應用程式。

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

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

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

  • 範本會使用 env 元素來定義建置和部署專屬的設定。

下一步