다음을 통해 공유


Azure 개발자 CLI 게시 워크플로

azd publish 명령을 사용하면 컨테이너 이미지를 Azure 리소스에 즉시 배포하지 않고 Azure Container Registry 또는 Docker Hub와 같은 컨테이너 레지스트리에 빌드하고 푸시할 수 있습니다.

배포 단계에서 빌드 및 푸시 단계를 분리하여 "빌드 한 번, 모든 곳에 배포" 패턴과 같은 고급 배포 워크플로를 구현할 수 있습니다. 이 방법은 Azure Container Apps 또는 AKS(Azure Kubernetes Service)를 대상으로 하는 컨테이너화된 애플리케이션에 유용합니다.

azd publish을(를) 사용합니까?

표준 azd 워크플로 azd deploy 에서 명령은 다음 세 가지 작업을 순서대로 수행합니다.

  1. 빌드: 애플리케이션 코드를 컨테이너 이미지로 빌드합니다.
  2. 푸시: 해당 이미지를 레지스트리에 푸시합니다.
  3. 배포: Azure 호스팅 서비스(예: Container Apps)를 업데이트하여 새 이미지를 실행합니다.

내부 루프 개발에는 편리하지만 이 방법은 모든 배포에 새 빌드가 필요하다고 가정합니다. 프로덕션 시나리오에서는 종종 다음을 수행하려고 합니다.

  • 한 번 빌드하고, 모든 곳에 배포합니다. 단일 아티팩트(이미지)를 빌드하고, 개발 환경에서 테스트한 다음, 다시 빌드하지 않고 동일한 아티팩 트를 프로덕션으로 승격합니다.
  • 아티팩트 중앙 집중화: 단일 공유 ACR(Azure Container Registry)을 사용하여 모든 환경에 대한 이미지를 저장합니다.
  • 보안 향상: 확인 및 테스트된 이미지만 프로덕션에 배포되었는지 확인합니다.

azd publish 에서는 1단계와 2단계(빌드 및 푸시)만 처리하여 이러한 시나리오를 사용할 수 있습니다. 그런 다음, 특정 플래그와 함께 사용하여 azd deploy 미리 게시된 이미지를 사용하여 3단계(배포)를 처리할 수 있습니다.

주요 기능

  • 독립 게시: 배포를 트리거하지 않고 레지스트리에 이미지를 게시합니다.
  • 사용자 지정 대상: 플래그를 --to 사용하여 이미지를 푸시해야 하는 위치()[registry/]repository[:tag]를 정확하게 지정하고 기본 명명 규칙을 재정의합니다.
  • 타사 레지스트리 지원: Azure Container Registry 외에 외부 레지스트리(예: Docker Hub)로 푸시합니다.
  • 후크 지원: 사용자 지정 자동화를 위한 prepublishpostpublish 후크를 지원합니다.
  • 서비스 대상 지정: 현재 Azure Container AppsAKS에서 호스트되는 서비스를 지원합니다.

Usage

azure.yaml에서 정의된 특정 서비스에 대한 이미지를 빌드하고 게시하려면:

azd publish <service-name>

모든 서비스를 빌드하고 게시하려면 다음을 수행합니다.

azd publish --all

매개 변수

Flag Description
--all 에 정의된 모든 서비스를 게시합니다 azure.yaml.
--from-package <image> 원본에서 빌드하는 대신 기존 로컬 이미지 또는 패키지를 사용합니다.
--to <image-ref> 대상 이미지 참조(예: <your-registry>.azurecr.io/my-app:v1)를 지정합니다. azure.yaml에서 기본 이름 지정을 재정의합니다.

예시

사용자 지정 태그에 특정 서비스를 게시합니다.

azd publish api-service --to <your-registry>.azurecr.io/api-service:v1.0.0

원격 레지스트리에 로컬 이미지를 게시합니다.

이미지를 이미 로컬로 빌드한 경우(예: local-api:dev) 다음을 사용하여 azd태그를 지정하고 푸시할 수 있습니다.

azd publish api-service --from-package local-api:dev --to <your-registry>.azurecr.io/api-service:v1.0.0

시나리오: 한 번 빌드, 모든 곳에 배포

일반적인 프로덕션 워크플로에는 이미지를 한 번 빌드하고 개발 - 테스트 ->> Prod와 같은 여러 환경을 통해 이미지를 승격하는 작업이 포함됩니다. 이 작업은 다음과 같은 조합 azd publish 으로 수행합니다azd deploy.

  1. 이미지를 게시합니다.

    코드를 빌드하고 공유 레지스트리에 푸시합니다.

    azd publish api-service --to <your-registry>.azurecr.io/my-app:v1.0.0
    
  2. 개발 환경으로 배포:

    개발 환경에 특정 이미지 버전을 배포합니다. 플래그는 --from-package 빌드/푸시 단계를 건너뛰고 서비스 구성을 업데이트하도록 지시 azd deploy 합니다.

    azd env select dev
    azd deploy api-service --from-package <your-registry>.azurecr.io/my-app:v1.0.0
    
  3. 프로덕션으로 승격:

    Dev에서 테스트한 후 프로덕션 환경에 동일한 이미지 참조를 배포합니다.

    azd env select prod
    azd deploy api-service --from-package <your-registry>.azurecr.io/my-app:v1.0.0
    

다른 명령과의 비교

Command 수행된 작업 적합한 대상
azd publish 빌드 -> 푸시 CI/CD 파이프라인, 아티팩트 만들기, "한 번 빌드" 워크플로.
azd publish --from-package 푸시 전용 는 미리 빌드된 아티팩트들을 환경에 푸시합니다.
azd deploy 빌드 -> 푸시 -> 배포 표준 개발 반복(내부 루프).
azd deploy --from-package 배포만 미리 빌드된/게시된 아티팩트를 환경에 배포.
azd up 프로비전 -> 빌드 -> 푸시 -> 배포 시작, 처음부터 새 환경 초기화

비고

기본 동작은 azd up 변경되지 않은 상태로 유지됩니다. 여전히 전체 엔드 투 엔드 프로세스를 오케스트레이션합니다. 그러나 azure.yaml에서 azd publish을(를) 사용하도록 워크플로를 사용자 지정할 수 있습니다.

azure.yaml의 구성

에서 azure.yaml서비스에 대한 기본 Docker 설정을 구성합니다. 이 azd publish 명령은 다음과 같은 --to플래그로 재정의되지 않는 한 이러한 설정을 적용합니다.

name: my-app
services:
  api:
    project: ./src/api
    host: containerapp
    docker:
      registry: 'docker.io/myusername' # Default registry
      image: 'my-api'                  # Default image name
      tag: 'latest'                    # Default tag

이 구성을 사용하면 azd publish api를 실행하여 docker.io/myusername/my-api:latest로 푸시됩니다.

다음 단계