将配置文件从 GitHub 存储库导入应用程序配置存储区

如果你已采用配置即代码并在 GitHub 中管理配置,可以使用 GitHub Actions 将配置文件从 GitHub 存储库自动导入应用程序配置存储区。 这样,可以照常对配置文件进行更改,同时获得应用程序配置存储区的优势,例如:

  • 在代码之外集中配置。
  • 更新配置,而无需重新部署整个应用。
  • 与 Azure 应用服务和 Functions 等服务集成。

GitHub 操作工作流在 GitHub 存储库中定义自动化流程。 若要将配置文件从 GitHub 存储库导入 Azure 应用程序配置存储区,请使用 Azure CLI GitHub 操作,该操作提供将文件导入应用程序配置存储区的完整功能。

身份验证

若要将配置导入 Azure 应用程序配置存储区,可以使用以下方法之一进行身份验证:

使用 Microsoft Entra ID

建议的身份验证方法是使用 Microsoft Entra ID,它让你可以安全连接到 Azure 资源。 可以使用 Azure 登录 GitHub 操作自动完成身份验证过程。

Azure 登录让你可以使用具有机密的服务主体或具有联合标识凭据的 OpenID Connect 进行身份验证。 在此示例中,你将使用 OpenID Connect 登录到应用程序配置存储区。

将 Azure 登录与 OpenID Connect 配合使用

若要将 Azure 登录与 OpenID Connect 配合使用,需要:

  1. 设置一个具有服务主体的 Microsoft Entra 应用程序
  2. 为 Microsoft Entra 应用程序分配“应用程序配置数据所有者”角色,以允许 GitHub 操作读取和写入应用程序配置存储区
  3. 为登录操作提供 Microsoft Entra 应用程序的客户端 ID、租户 ID 和订阅 ID。 这些值可以直接在工作流中提供,也可以存储为 GitHub 机密以提高安全性。 在以下示例中,这些值设置为机密。 有关在 GitHub 中使用机密的详细信息,请参阅在 GitHub Actions 中使用机密

若要开始使用此 GitHub 操作,请转到存储库,然后选择“操作”选项卡。选择“新建工作流”,然后“自己设置工作流”。 最后,在市场中搜索“Azure 登录名”。 找到后,单击操作并将提供的片段复制到工作流文件中。

选择“操作”选项卡

使用 Azure 登录操作

使用 Microsoft Entra ID 的示例

# Set permissions for the workflow. Specify 'id-token: write' to allow OIDC token generation at the workflow level.
permissions: 
  id-token: write
  contents: read

jobs: 
  syncconfig: 
    runs-on: ubuntu-latest 
    steps: 
      - name: Azure login
        uses: azure/login@v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

使用连接字符串

或者,可以通过将连接字符串直接传递给 Azure CLI 命令来进行身份验证。 此方法涉及到从 Azure 门户检索连接字符串并在命令或脚本中使用它。

首先,可以在 Azure 门户中的“应用程序配置存储区”的“访问设置”下找到连接字符串

接下来,将此连接字符串设置为 GitHub 存储库中的机密变量。 有关在 GitHub 中使用机密的详细信息,请参阅在 GitHub Actions 中使用机密

使用连接字符串的示例

on: 
  push: 
    branches: 
      - 'main' 
    paths: 
      - 'appsettings.json'

jobs: 
  syncconfig: 
    runs-on: ubuntu-latest

    # pass the secret variable as an environment variable to access it in your CLI action.
    env:
      CONNECTION_STRING: ${{ secrets.<ConnectionString> }}

配置文件导入

使用 Azure CLI GitHub 操作将配置文件导入应用程序配置存储区。 若要开始使用此 GitHub 操作,请转到存储库,然后选择“操作”选项卡。选择“新建工作流”,然后“自己设置工作流”。 最后,在市场中搜索“Azure CLI 操作”。找到后,单击该操作,并将提供的代码片段复制到工作流文件中。

选择 Azure CLI 操作

在以下示例中,将更改推送到 appsettings.json 时,你将使用 Azure CLI 操作将配置文件导入 Azure 应用程序配置存储区。 当开发人员将更改推送到 appsettings.json 时,传递给 Azure CLI 操作的脚本会使用新值更新应用程序配置存储区。

此工作流的 on 部分指定这一操作在包含 appsettings.json 的推送推送到主分支后触发。 jobs 部分列出了在此操作触发后立即运行的作业。 该操作签出相关文件并更新应用程序配置存储区。

on: 
  push: 
    branches: 
      - 'main' 
    paths: 
      - 'appsettings.json'

# Set permissions for the workflow. Specify 'id-token: write' to allow OIDC token generation at the workflow level.
permissions: 
  id-token: write
  contents: read

jobs: 
  syncconfig: 
    runs-on: ubuntu-latest 
    steps: 
      - name: Azure login
        uses: azure/login@v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

      # checkout done so that files in the repo can be read by the sync 
      - uses: actions/checkout@v1 
      - uses: azure/cli@v2
        with: 
          azcliversion: latest
          inlineScript: |
            az appconfig kv import --endpoint <your-app-configuration-store-endpoint> --auth-mode login -s file --path appsettings.json --format json --yes

有关 Azure 应用程序配置 CLI 导入命令的详细信息,请参阅 Azure AppConfiguration CLI 文档

导入时使用动态标签

每次导入时使用动态标签是对配置保持清晰准确的版本控制的好办法。 这样就可以在每次导入到应用程序配置存储区时进行唯一标识,从而更容易将代码更改映射到配置更新。

导入时使用动态标签的示例

在以下示例中,所有导入的键值都具有基于提交哈希的唯一标签。

 jobs: 
  syncconfig: 
    runs-on: ubuntu-latest 
    steps:      
      # Creates a label based on the branch name and the first 8 characters          
      # of the commit hash 
      - id: determine_label 
        run: echo ::set-output name=LABEL::"${GITHUB_REF#refs/*/}/${GITHUB_SHA:0:8}" 
      # checkout done so that files in the repo can be read by the sync 
      - uses: actions/checkout@v1 
      - uses: azure/cli@v2
        with: 
          azcliversion: latest
          inlineScript: |
            az appconfig kv import --endpoint <your-app-configuration-store-endpoint> --auth-mode login -s file --path appsettings.json --format json --label ${{ steps.determine_label.outputs.LABEL }} --yes

后续步骤

若要了解如何使用 CLI 导入命令,请查看我们的综合指南 Azure CLI 导入命令

若要详细了解不同的文件内容配置文件,请参阅 Azure 应用程序配置对配置文件的支持