Настройка конвейера и отправки обновлений
В этой статье вы узнаете, как использовать интерфейс командной строки разработчика 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: в каталоге
.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
создает субъект-службу и федеративные учетные данные для него.
Выполните следующую команду, чтобы создать субъект-службу Azure и настроить конвейер:
azd pipeline config
Эта команда при необходимости создает репозиторий GitHub и отправляет код в новый репозиторий.
Примечание.
По умолчанию
azd pipeline config
используется OpenID Connect (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 }}