Поделиться через


Настройка конвейера и отправки обновлений

В этой статье вы узнаете, как использовать интерфейс командной строки разработчика Azure (azd) для отправки изменений шаблона через конвейер CI/CD, например GitHub Actions или Azure DevOps. В этом примере вы будете использовать Веб-приложение React с Node.js API и MongoDB в шаблоне Azure , но вы можете применить принципы, которые вы узнаете в этой статье, к любому из шаблонов Интерфейса командной строки разработчика Azure.

Примечание.

Команда azd pipeline config по-прежнему находится в бета-версии. Дополнительные сведения о поддержке альфа-и бета-компонентов см. на странице стратегии управления версиями компонентов и выпуска.

Необходимые компоненты

azd шаблоны могут включать или не включать файл конфигурации конвейера GitHub по умолчанию или файл azure-dev.ymlконфигурации конвейера Azure DevOps, который требуется для настройки CI/CD. Этот файл конфигурации подготавливает ресурсы Azure и развертывает код в главной ветви. Вы можете найти azure-dev.yml:

  • Для GitHub Actions: в каталоге .github/workflows .
  • Для Azure DevOps: в каталоге .azdo/pipelines .

Вы можете использовать файл конфигурации как есть или изменить его в соответствии с вашими потребностями.

Примечание.

Перед вызовом azd pipeline configубедитесь, что шаблон имеет определение конвейера (azure-dev.yaml). azd не будет автоматически создавать этот файл. См. раздел "Создание определения конвейера" для azd ниже.

Чтобы настроить конвейер CI/CD, используйте azd pipeline config команду, которая обрабатывает следующие задачи:

  • Создает и настраивает субъект-службу для приложения в подписке Azure. Пользователь должен иметь Owner роль или Contributor + User Access Administrator роли в подписке Azure, так как разрешить azd создавать и назначать роли субъекту-службе.
  • Пошаговые инструкции по созданию и настройке репозитория GitHub или Azure DevOps и фиксации кода проекта в нем. Вы также можете использовать существующий репозиторий.
  • Создает безопасное подключение между Azure и репозиторием.
  • Выполняет действие GitHub при проверка в файле рабочего процесса.

Для более детального контроля над этим процессом или если у пользователя нет необходимых ролей, можно вручную настроить конвейер.

Выберите предпочитаемого поставщика конвейеров, чтобы продолжить:

Авторизация GitHub для развертывания в Azure

Чтобы настроить рабочий процесс, необходимо авторизовать субъект-службу для развертывания в Azure от вашего имени из действия GitHub. azd создает субъект-службу и федеративные учетные данные для него.

  1. Выполните следующую команду, чтобы создать субъект-службу Azure и настроить конвейер:

    azd pipeline config
    

    Эта команда при необходимости создает репозиторий GitHub и отправляет код в новый репозиторий.

    Примечание.

    По умолчанию azd pipeline config используется Подключение OpenID (OIDC) с именем федеративных учетных данных. Если вы не хотите использовать OIDC, выполните команду azd pipeline config --auth-type client-credentials.

    Учетные данные OIDC/федеративные не поддерживаются для Terraform.

    Дополнительные сведения о поддержке OIDC см. в azdразделе .

  2. Укажите запрошенные сведения GitHub.

  3. При появлении запроса на фиксацию и отправку локальных изменений для запуска нового запуска GitHub Actions укажите y.

  4. В окне терминала просмотрите результаты azd pipeline config команды. Команда azd pipeline config выводит имя репозитория GitHub для проекта.

  5. Откройте репозиторий GitHub для проекта с помощью браузера.

  6. Выберите действия , чтобы просмотреть запущенный рабочий процесс.

    Снимок экрана: рабочий процесс GitHub, запущенный.

Создание и отправка изменения кода

  1. В каталоге /src/web/src/layout проекта откройте header.tsxфайл .

  2. Найдите строку <Text variant="xLarge">ToDo</Text>.

  3. Измените литерал ToDomyTodoна .

  4. Сохраните файл.

  5. Зафиксируйте изменения. Фиксация изменения запускает конвейер действия GitHub для развертывания обновления.

    Снимок экрана: шаги, необходимые для внесения и фиксации изменений в тестовый файл.

  6. Откройте репозиторий GitHub проекта с помощью браузера, чтобы увидеть оба:

    • Фиксация
    • Фиксация из GitHub Actions, настроенная.

    Снимок экрана: зафиксированные изменения в GitHub.

  7. Выберите действия , чтобы просмотреть тестовое обновление, отраженное в рабочем процессе.

    Снимок экрана: рабочий процесс GitHub, запущенный после тестового обновления.

  8. Посетите URL-адрес веб-интерфейса, чтобы проверить обновление.

azd как действие GitHub

Добавьте azd в качестве действия GitHub. Это действие установит azd. Чтобы использовать его, можно добавить следующее .github\workflows\azure-dev.yml:

on: [push]

jobs:
   build:
      runs-on: ubuntu-latest
      steps:
         - name: Install azd
         uses: Azure/setup-azd@v0.1.0

Очистка ресурсов

Если ресурсы Azure, созданные в этой статье, больше не нужны, выполните следующую команду:

azd down

Расширенные функции

Вы можете расширить azd pipeline config команду для определенных сценариев шаблона или требований, как описано в следующих разделах.

Дополнительные секреты или переменные

По умолчанию azd задает переменные и секреты для конвейера. Например, azd pipeline config команда создает subscription idenvironment name переменные конвейера при region выполнении. Затем определение конвейера ссылается на эти переменные:

env:
   AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
   AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
   AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
   AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
   AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}

При выполнении azd конвейера получает значения из среды, которая сопоставляется с переменными и секретами. В зависимости от шаблона могут быть параметры, которые можно контролировать с помощью переменных среды. Например, для переменной KEY_VAULT_NAME среды можно задать имя ресурса Key Vault в инфраструктуре шаблона. В таких случаях список переменных и секретов можно определить с помощью azure.yamlшаблона. Например, рассмотрим следующую azure.yaml конфигурацию:

pipeline:
  variables:
    - KEY_VAULT_NAME
    - STORAGE_NAME
  secrets:
    - CONNECTION_STRING

В этой конфигурации проверка, azd если в среде имеются непустые переменные или секреты. azd затем создает переменную или секрет для конвейера, используя имя ключа в конфигурации в качестве имени переменной или секрета, а не строковое значение из среды для значения.

Затем azure-dev.yaml определение конвейера может ссылаться на переменные или секреты:

- name: Provision Infrastructure
   run: azd provision --no-prompt
   env:
      KEY_VAULT_NAME: ${{ variables.KEY_VAULT_NAME }}
      STORAGE_NAME: ${{ variables.STORAGE_NAME }}
      CONNECTION_STRING: ${{ secrets.CONNECTION_STRING }}

Примечание.

Необходимо выполнить azd pipeline config после обновления списка секретов или переменных для azure.yaml azd, чтобы сбросить значения конвейера.

Параметры инфраструктуры

Рассмотрим следующий пример bicep:

@secure()
param BlobStorageConnection string

Параметр BlobStorageConnection не имеет набора значений по умолчанию, поэтому azd пользователю будет предложено ввести значение. Однако интерактивный запрос во время CI/CD отсутствует. azd необходимо запросить значение параметра при запуске azd pipeline config, сохранить значение в конвейере, а затем снова получить значение при запуске конвейера.

azd использует секрет конвейера, вызываемого AZD_INITIAL_ENVIRONMENT_CONFIG для автоматического сохранения и задания значения всех необходимых параметров в конвейере. В конвейере необходимо ссылаться только на этот секрет:

- name: Provision Infrastructure
   run: azd provision --no-prompt
   env:
      AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}

При выполнении azd конвейера принимает значения параметров из секрета, удаляя необходимость интерактивного запроса.

Примечание.

При добавлении нового параметра необходимо повторно запустить azd pipeline config .

Создание определения конвейера

Если шаблон azd еще не имеет файла определения конвейера CI/CD, его можно создать самостоятельно. Определение конвейера CI/CD обычно содержит 4 основных раздела:

  • Azure
  • разрешения
  • операционная система или пул
  • шаги для выполнения

В следующих примерах показано, как создать файл определения и связанные конфигурации для GitHub Actions и Azure Pipelines.

Для выполнения azd в GitHub Actions требуются следующие конфигурации:

  • Предоставление id-token: write и contents: read доступ к область.
  • Установите действие azd, если вы не используете образ Docker, где azd уже установлен.

Следующий шаблон можно использовать в качестве отправной точки для собственного определения конвейера:

on:
  workflow_dispatch:
  push:
    # Run when commits are pushed to mainline branch (main or master)
    # Set this to the mainline branch you are using
    branches:
      - main
      - master

# Set this permission if you are using a Federated Credential.
permissions:
  id-token: write
  contents: read

jobs:
  build:
    runs-on: ubuntu-latest
    # azd build-in variables.
    # This variables are always set by `azd pipeline config`
    # You can set them as global env (apply to all steps) or you can add them to individual steps' environment
    env:
      AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
      AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
      AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
      AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
      AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
      ## Define the additional variables or secrets that are required globally (provision and deploy)
      # ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
      # ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}      
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      # using the install-azd action
      - name: Install azd
        uses: Azure/setup-azd@v1.0.0

      # # If you want to use azd-daily build, or install it from a PR, you can remove previous step and
      # # use the next one:
      # - name: Install azd - daily or from PR
      #  # Update this scrip based on the OS - pool of your pipeline. This example is for a linux pipeline installing daily build
      #  run: curl -fsSL https://aka.ms/install-azd.sh | bash -s -- --version daily
      #  shell: pwsh

      # azd set up Federated Credential by default. You can remove this step if you are using Client Credentials
      - name: Log in with Azure (Federated Credentials)
        if: ${{ env.AZURE_CLIENT_ID != '' }}
        run: |
          azd auth login `
            --client-id "$Env:AZURE_CLIENT_ID" `
            --federated-credential-provider "github" `
            --tenant-id "$Env:AZURE_TENANT_ID"
        shell: pwsh

      ## If you set up your pipeline with Client Credentials, remove previous step and uncomment this one
      # - name: Log in with Azure (Client Credentials)
      #   if: ${{ env.AZURE_CREDENTIALS != '' }}
      #   run: |
      #     $info = $Env:AZURE_CREDENTIALS | ConvertFrom-Json -AsHashtable;
      #     Write-Host "::add-mask::$($info.clientSecret)"

      #     azd auth login `
      #       --client-id "$($info.clientId)" `
      #       --client-secret "$($info.clientSecret)" `
      #       --tenant-id "$($info.tenantId)"
      #   shell: pwsh
      #   env:
      #     AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }}

      - name: Provision Infrastructure
        run: azd provision --no-prompt
        env:
         #  # uncomment this if you are using infrastructure parameters
         #  AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}
         ## Define the additional variables or secrets that are required only for provision 
         #  ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
         #  ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}

      - name: Deploy Application
        run: azd deploy --no-prompt
        env:
         ## Define the additional variables or secrets that are required only for deploy
         #  ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
         #  ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}