Настройка конвейера и отправки обновлений
В этой статье вы узнаете, как использовать интерфейс командной строки разработчика Azure (azd
) для отправки изменений шаблона через конвейер CI/CD, например GitHub Actions или Azure DevOps. В этом примере вы будете использовать Веб-приложение React с Node.js API и MongoDB в шаблоне Azure , но вы можете применить принципы, которые вы узнаете в этой статье, к любому из шаблонов Интерфейса командной строки разработчика Azure.
Примечание.
Команда azd pipeline config
по-прежнему находится в бета-версии. Дополнительные сведения о поддержке альфа-и бета-компонентов см. на странице стратегии управления версиями компонентов и выпуска.
Необходимые компоненты
- Установите интерфейс командной строки разработчика Azure.
- Разверните шаблон Node.js.
- Установленный экземпляр Visual Studio Code.
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
создает субъект-службу и федеративные учетные данные для него.
Выполните следующую команду, чтобы создать субъект-службу Azure и настроить конвейер:
azd pipeline config
Эта команда при необходимости создает репозиторий GitHub и отправляет код в новый репозиторий.
Примечание.
По умолчанию
azd pipeline config
используется Подключение OpenID (OIDC) с именем федеративных учетных данных. Если вы не хотите использовать OIDC, выполните командуazd pipeline config --auth-type client-credentials
.Учетные данные OIDC/федеративные не поддерживаются для Terraform.
Укажите запрошенные сведения GitHub.
При появлении запроса на фиксацию и отправку локальных изменений для запуска нового запуска GitHub Actions укажите
y
.В окне терминала просмотрите результаты
azd pipeline config
команды. Командаazd pipeline config
выводит имя репозитория GitHub для проекта.Откройте репозиторий GitHub для проекта с помощью браузера.
Выберите действия , чтобы просмотреть запущенный рабочий процесс.
Создание и отправка изменения кода
В каталоге
/src/web/src/layout
проекта откройтеheader.tsx
файл .Найдите строку
<Text variant="xLarge">ToDo</Text>
.Измените литерал
ToDo
myTodo
на .Сохраните файл.
Зафиксируйте изменения. Фиксация изменения запускает конвейер действия GitHub для развертывания обновления.
Откройте репозиторий GitHub проекта с помощью браузера, чтобы увидеть оба:
- Фиксация
- Фиксация из GitHub Actions, настроенная.
Выберите действия , чтобы просмотреть тестовое обновление, отраженное в рабочем процессе.
Посетите 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 id
environment 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 }}
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по