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


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

В этой статье вы узнаете, как использовать интерфейс командной строки разработчика 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: в каталоге .azuredevops/pipelines или каталоге .azdo/pipelines. (Оба поддерживаются.)

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

Примечание.

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

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

  • Создает и настраивает субъект-службу для приложения в подписке 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 Connect (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 }}