명령 및 이벤트 후크를 사용하여 Azure 개발자 CLI 워크플로 사용자 지정
Azure 개발자 CLI는 워크플로 및 배포를 사용자 지정하기 위한 다양한 확장 지점을 지원합니다. 후크 미들웨어를 사용하면 명령 및 azd
서비스 수명 주기 이벤트 전후에 사용자 지정 스크립트를 실행할 수 있습니다. 후크는 일치하는 azd
명령 또는 서비스 이벤트 이름에 접두사 및 사후 접두사를 사용하여 명명 규칙을 따릅니다.
예를 들어 다음 시나리오에서 사용자 지정 스크립트를 실행할 수 있습니다.
- prerestore 후크를 사용하여 종속성 관리를 사용자 지정합니다.
- 앱을 배포하기 전에 사전 배포 후크를 사용하여 외부 종속성 또는 사용자 지정 구성이 있는지 확인합니다.
- 워크플로 또는 파이프라인의 끝에 있는 사후 후크를 사용하여 사용자 지정 클린업 또는 로깅을 수행합니다.
사용 가능한 후크
다음 azd
명령 후크를 사용할 수 있습니다.
prerestore
및postrestore
: 패키지 종속성이 복원되기 전과 후에 실행합니다.preprovision
및postprovision
: Azure 리소스를 만들기 전과 후에 실행합니다.predeploy
및postdeploy
: 애플리케이션 코드가 Azure에 배포되기 전과 후에 실행합니다.preup
및postup
: 결합된 배포 파이프라인 전후에 실행합니다.Up
는 순차적으로 실행되는restore
provision
deploy
약식 명령입니다.predown
및postdown
: 리소스가 제거되기 전과 후에 실행합니다.
다음 서비스 수명 주기 이벤트 후크를 사용할 수 있습니다.
prerestore
및postrestore
: 서비스 패키지 및 종속성이 복원되기 전과 후에 실행합니다.prepackage
및postpackage
: 배포를 위해 앱을 패키지하기 전과 후에 실행합니다.predeploy
및postdeploy
: 서비스 코드가 Azure에 배포되기 전과 후에 실행합니다.
후크 구성
후크는 루트 또는 특정 서비스 구성 내에서 파일에 등록 azure.yaml
할 수 있습니다. 모든 유형의 후크는 다음 구성 옵션을 지원합니다.
shell
:sh
|pwsh
(지정하지 않으면 실행에서 자동으로 유추됨).- 참고: PowerShell 7은
pwsh
.
- 참고: PowerShell 7은
run
: 인라인 스크립트 또는 파일 경로를 정의합니다.continueOnError
: 명령 후크 중에 스크립트 오류가 발생한 후에도 집합이 계속 실행됩니다(기본값 false).interactive
: 설정 시 실행 중인 스크립트를 콘솔stdin
에stdout
바인딩합니다. &stderr
(기본값 false).windows
: 중첩된 구성이 Windows OS에만 적용되도록 지정합니다. 이 구성 옵션을 제외하면 후크가 모든 플랫폼에서 실행됩니다.posix
: 중첩된 구성이 POSIX 기반 OS(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
OS 관련 후크
필요에 따라 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
후크로 환경 변수 사용
후크는 및 azd set <key> <value>
명령을 사용하여 파일에서 환경 변수를 .env
azd env get-values
가져와서 설정할 수 있습니다. 후크는 구문을 사용하여 로컬 환경에서 환경 변수를 검색할 ${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 개발자 CLI에 대한 새 기능을 제안하는 방법에 대한 자세한 내용은 문제 해결 및 지원 페이지를 참조하세요.