Настройка рабочих процессов Интерфейса командной строки разработчика Azure с помощью команд и перехватчиков событий

Перехватчики — это azd точки расширения, которые автоматически выполняют пользовательские скрипты до и после azd команд и событий жизненного цикла службы. Перехватчики следуют соглашению об именовании с помощью префиксов предварительного и post в соответствующей azd команде или имени события службы.

Например, может потребоваться запустить пользовательский скрипт в следующих сценариях:

  • Используйте перехватчик предварительного хранилища для настройки управления зависимостями.
  • Используйте перехватчик predeploy для проверки внешних зависимостей или пользовательских конфигураций перед развертыванием приложения.
  • Используйте перехватчик в конце рабочего процесса или конвейера для выполнения пользовательской очистки или ведения журнала.

Доступные крючки

Доступны следующие azd перехватчики команд.

  • prerestore и postrestore: выполняется до и после восстановления зависимостей пакета.
  • preprovision и postprovision. Запуск до и после создания ресурсов Azure.
  • prepackage и postpackage: запуск до и после упаковки приложения.
  • predeploy и postdeploy. Запуск до и после развертывания кода приложения в Azure.
  • prepublish и postpublish: запуск до и после публикации приложения.
  • preup и postup: запуск до и после объединенного конвейера развертывания. Up — это сокращенная команда, которая выполняется restore, provisionи последовательно deploy.
  • predown и postdown. Запуск до и после удаления ресурсов.

Доступны следующие перехватчики событий жизненного цикла службы:

  • prerestore и postrestore. Запуск до и после восстановления пакетов служб и зависимостей.
  • prebuild и postbuild. Запуск до и после создания исходного кода или контейнера службы.
  • prepackage и postpackage. Запуск до и после упаковки приложения для развертывания.
  • predeploy и postdeploy. Запуск до и после развертывания кода службы в Azure.
  • prepublish и postpublish: запуск до и после публикации службы.

Конфигурация перехватчика

Перехватчики регистрируются в файле в azure.yaml корневом каталоге или в определенной конфигурации службы. Все типы перехватчиков поддерживают следующие параметры конфигурации:

  • shell: sh | pwsh (необязательно). Если опущено, azd выбирается значение по умолчанию на основе операционной системы: pwsh на Windows и sh в Linux и macOS. azd выводит предупреждение при использовании по умолчанию и рекомендует явно задать shell для кроссплатформенной надежности. Для PowerShell 7 требуется pwsh.
  • run. Определение встроенного скрипта или пути к файлу. Для путей azd к файлам включает оболочку из расширения файла (например, .sh или .ps1).
  • continueOnError. Если набор продолжит выполняться даже после ошибки скрипта во время перехвата команды (по умолчанию false).
  • interactive. При привязке выполняемого скрипта к консоли stdinstdout & stderr (по умолчанию false).
  • windows. Указывает, что вложенные конфигурации будут применяться только в ОС Windows. Если этот параметр конфигурации исключен, перехватчик выполняется на всех платформах.
  • posix. Указывает, что вложенные конфигурации будут применяться только к OSes на основе POSIX (Linux & MaxOS). Если этот параметр конфигурации исключен, перехватчик выполняется на всех платформах.

Замечание

Явное определение shell остается рекомендуемым подходом для кроссплатформенных проектов, так как значение по умолчанию зависит от операционной системы участника. Если встроенный скрипт использует синтаксис, допустимый только в одной оболочке, объявите shell , чтобы избежать сбоев среды выполнения.

Примеры перехватчика

В следующих примерах показаны различные типы регистраций и конфигураций перехватчиков.

Регистрация корневой команды

Перехватчики можно настроить для выполнения определенных команд azd в корне файла azure.yaml.

Каталог проекта (где находится файл azure.yaml) — текущий рабочий каталог по умолчанию (cwd) для перехватчиков команд.

name: todo-nodejs-mongo
metadata:
  template: todo-nodejs-mongo@0.0.1-beta
hooks:
  prerestore: # Example of an inline script with an explicit shell
    shell: sh
    run: echo 'Hello'
  preprovision: # Example of external script (Relative path from project root)
    run: ./hooks/preprovision.sh
services:
  web:
    project: ./src/web
    dist: build
    language: js
    host: appservice
  api:
    project: ./src/api
    language: js
    host: appservice

Регистрация службы

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

Каталог службы (тот же путь, что и в свойстве project конфигурации службы в файле azure.yaml) — это cwd по умолчанию для перехватчиков служб.

name: todo-nodejs-mongo
metadata:
  template: todo-nodejs-mongo@0.0.1-beta
services:
  web:
    project: ./src/web
    dist: build
    language: js
    host: appservice
  api:
    project: ./src/api
    language: js
    host: appservice
    hooks:
      prerestore: # Example of an inline script with an explicit shell
        shell: sh
        run: echo 'Restoring API service...'
      prepackage: # Example of external script (Relative path from service path)
        run: ./hooks/prepackage.sh

Определенные перехватчики ОС

При необходимости можно настроить перехватчики для запуска в Windows или Posix (Linux & MaxOS). По умолчанию, если конфигурации Windows или Posix исключены, перехватчик выполняется на всех платформах.

name: todo-nodejs-mongo
metadata:
  template: todo-nodejs-mongo@0.0.1-beta
hooks:
  prerestore: 
    posix: # Only runs on Posix environments
      shell: sh
      run: echo 'Hello'
   windows: # Only runs on Windows environments
     shell: pwsh
     run: Write-Host "Hello"
services:
  web:
    project: ./src/web
    dist: build
    language: js
    host: appservice
  api:
    project: ./src/api
    language: js
    host: appservice

Кроссплатформенные встроенные скрипты без явной оболочки

При пропуске shell встроенного перехватчика azd выбирает оболочку по умолчанию на основе операционной системы: pwsh на Windows и sh в Linux и macOS. Этот параметр полезен для простых команд, работающих в обоих оболочках, таких как печать сообщения о состоянии или вызов интерфейса командной строки, который уже находится на пути пользователя.

name: example-project
hooks:
  prerestore: # No shell specified; azd uses pwsh on Windows and sh on Linux/macOS
    run: echo 'Restoring dependencies...'

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

Несколько перехватчиков на событие

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

name: example-project
services:
    api:
        project: src/api
        host: containerapp
        language: ts
        hooks:
            postprovision:
                - shell: sh
                  run: scripts/postprovision1.sh
                - shell: sh
                  run: scripts/postprovision2.sh
hooks:
    postprovision:
        - shell: sh
          run: scripts/postprovision1.sh
        - shell: sh
          run: scripts/postprovision2.sh

Запуск крючков независимо

Эта azd hooks run команда позволяет выполнять перехватчики независимо от их обычных событий триггера. Это полезно для тестирования и отладки перехватчиков без прохождения всего рабочего процесса.

azd hooks run <hook-name>

Замените <hook-name> именем перехватчика, который вы хотите запустить (например, preprovision, postdeploy).

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

# Run a specific service hook
azd hooks run postdeploy --service api

# Force hooks to run for a specific platform
azd hooks run preprovision --platform windows

# Run hooks in a specific environment
azd hooks run postup -e staging

# Run hooks with all options combined
azd hooks run predeploy --service frontend --platform posix -e production --interactive

Настройка интерактивного режима

Перехватчики выполняются в интерактивном режиме по умолчанию. Режим интерактивных перехватчиков позволяет запускать скрипты перехватчиков с прямым взаимодействием консоли, что упрощает отладку, мониторинг и взаимодействие с перехватчиками в режиме реального времени. Вы можете явно задать interactive свойство в конфигурации перехватчика, если вы хотите отключить интерактивный режим для определенного перехватчика:

hooks:
  postprovision:
    shell: sh
    run: ./scripts/setup-database.sh
    interactive: false # Default is true

Для перехватчиков для конкретных служб:

services:
  api:
    project: ./src/api
    language: js
    host: appservice
    hooks:
      postdeploy:
        shell: sh
        run: ./scripts/post-deploy-verification.sh
        interactive: false  # Override the default interactive mode

Использование переменных среды с перехватчиками

Перехватчики могут получать и задавать переменные среды в файле .env с помощью команд azd env get-values и azd set <key> <value>. Перехватчики также могут извлекать переменные среды из локальной среды с помощью синтаксиса ${YOUR_ENVIRONMENT VARIABLE}. azd автоматически задает определенные переменные среды в файле .env при выполнении команд, таких как AZURE_ENV_NAME и AZURE_LOCATION. Выходные параметры из файла main.bicep также задаются в файле .env. На странице управления переменными среды содержатся дополнительные сведения о рабочих процессах переменных среды.

Перехватчики могут получать и задавать встроенные переменные среды или с помощью ссылочных скриптов, как показано в следующем примере:

name: azure-search-openai-demo
metadata:
  template: azure-search-openai-demo@0.0.2-beta
services:
  backend:
    project: ./app/backend
    language: py
    host: appservice
hooks:
  postprovision:
    windows: # Run referenced script that uses environment variables (script shown below)
      shell: pwsh
      run: ./scripts/prepdocs.ps1
      interactive: true
      continueOnError: false
    posix:
      shell: sh
      run: ./scripts/prepdocs.sh
      interactive: true
      continueOnError: false
  postdeploy: # Pull environment variable inline from local device and set in .env file
      shell: sh
      run: azd env set REACT_APP_WEB_BASE_URL ${SERVICE_WEB_ENDPOINT_URL}

Ссылка: скрипт prepdocs.sh:

echo "Loading azd .env file from current environment"

# Use the `get-values` azd command to retrieve environment variables from the `.env` file
while IFS='=' read -r key value; do
    value=$(echo "$value" | sed 's/^"//' | sed 's/"$//')
    export "$key=$value"
done <<EOF
$(azd env get-values) 
EOF

echo 'Creating python virtual environment "scripts/.venv"'
python3 -m venv scripts/.venv

echo 'Installing dependencies from "requirements.txt" into virtual environment'
./scripts/.venv/bin/python -m pip install -r scripts/requirements.txt

echo 'Running "prepdocs.py"'
./scripts/.venv/bin/python ./scripts/prepdocs.py './data/*' 
    --storageaccount "$AZURE_STORAGE_ACCOUNT"
    --container "$AZURE_STORAGE_CONTAINER"
    --searchservice "$AZURE_SEARCH_SERVICE"
    --openaiservice "$AZURE_OPENAI_SERVICE"
    --openaideployment "$AZURE_OPENAI_EMB_DEPLOYMENT"
    --index "$AZURE_SEARCH_INDEX"
    --formrecognizerservice "$AZURE_FORMRECOGNIZER_SERVICE"
    --tenantid "$AZURE_TENANT_ID" -v

Запрос справки

Сведения о том, как отправить ошибку, запросить справку или предложить новую функцию для Интерфейса командной строки разработчика Azure, перейдите на страницу устранения неполадок и поддержки.