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


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

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

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

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

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

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

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

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

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

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

Перехватчики можно зарегистрировать в файле 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

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

Перехватчики могут получать и задавать переменные среды в файле .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, перейдите на страницу устранения неполадок и поддержки.