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


Настройка рабочих процессов Интерфейса командной строки разработчика 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
    • примечание. Для pwshтребуется PowerShell 7.
  • run. Определение встроенного скрипта или пути к файлу.
  • continueOnError. Если набор продолжит выполняться даже после ошибки скрипта во время перехвата команды (по умолчанию false).
  • interactive. При привязке выполняемого скрипта к консоли stdinstdout & stderr (по умолчанию false).
  • windows. Указывает, что вложенные конфигурации будут применяться только в ОС Windows. Если этот параметр конфигурации исключен, перехватчик выполняется на всех платформах.
  • posix. Указывает, что вложенные конфигурации будут применяться только к OSes на основе POSIX (Linux & MaxOS). Если этот параметр конфигурации исключен, перехватчик выполняется на всех платформах.

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

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

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

Перехватчики можно настроить для выполнения определенных команд 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. (shell is required for inline scripts)
    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. (shell is required for inline scripts)
        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

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

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

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, перейдите на страницу устранения неполадок и поддержки.