명령 및 이벤트 후크를 사용하여 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
: 서비스 패키지 및 종속성이 복원되기 전과 후에 실행합니다. -
prebuild
및postbuild
: 서비스 소스 코드 또는 컨테이너가 빌드되기 전과 후에 실행합니다. -
prepackage
및postpackage
: 배포를 위해 앱을 패키지하기 전과 후에 실행합니다. -
predeploy
및postdeploy
: 서비스 코드가 Azure에 배포되기 전과 후에 실행합니다.
후크 구성
후크는 루트 또는 특정 서비스 구성 내에서 azure.yaml
파일에 등록할 수 있습니다. 모든 유형의 후크는 다음 구성 옵션을 지원합니다.
-
shell
:sh
|pwsh
-
참고:
pwsh
경우 PowerShell 7이 필요합니다.
-
참고:
-
run
: 인라인 스크립트 또는 파일 경로를 정의합니다. -
continueOnError
: 명령 후크 중에 스크립트 오류가 발생한 후에도 집합이 계속 실행됩니다(기본값 false). -
interactive
: 설정된 경우 실행 중인 스크립트를 콘솔stdin
stdout
&stderr
(기본값 false)에 바인딩합니다. -
windows
: 중첩된 구성이 Windows OS에만 적용되도록 지정합니다. 이 구성 옵션을 제외하면 후크가 모든 플랫폼에서 실행됩니다. -
posix
: 중첩된 구성이 POSIX 기반 OS(Linux & MaxOS)에만 적용되도록 지정합니다. 이 구성 옵션을 제외하면 후크가 모든 플랫폼에서 실행됩니다.
후크 예제
다음 예제에서는 다양한 유형의 후크 등록 및 구성을 보여 줍니다.
루트 명령 등록
후크는 azure.yaml
파일의 루트에 있는 특정 azd
명령에 대해 실행되도록 구성할 수 있습니다.
프로젝트 디렉터리(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
파일에 정의된 특정 서비스에 대해서만 실행되도록 구성할 수도 있습니다.
서비스 디렉터리(azure.yaml
파일의 서비스 구성 project
속성에 정의된 것과 동일한 경로)는 서비스 후크의 기본 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
이벤트당 여러 후크
루트 등록 수준 또는 특정 서비스에 대해 여러 범위에서 이벤트당 여러 후크를 구성할 수 있습니다.
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 env get-values
및 azd set <key> <value>
명령을 사용하여 .env
파일에서 환경 변수를 가져와서 설정할 수 있습니다. 후크는 ${YOUR_ENVIRONMENT VARIABLE}
구문을 사용하여 로컬 환경에서 환경 변수를 검색할 수도 있습니다.
azd
명령이 실행되면 AZURE_ENV_NAME
및 AZURE_LOCATION
같은 특정 환경 변수를 .env
파일에서 자동으로 설정합니다.
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에 대한 새 기능을 제안하는 방법에 대한 자세한 내용은 문제 해결 및 지원 페이지를 참조하세요.