다음을 통해 공유


Azure Pipelines를 사용하여 Azure Kubernetes Service에 빌드 및 배포합니다

Azure DevOps Services

Azure Pipelines를 사용하여 AKS(Azure Kubernetes Service)에 자동으로 배포합니다. Azure Pipelines를 사용하면 Azure DevOps를 사용하여 CI(연속 통합) 및 CD(지속적인 업데이트)로 빌드, 테스트 및 배포할 수 있습니다.

이 문서에서는 앱을 지속적으로 빌드하고 배포하는 파이프라인을 만드는 방법에 대해 알아봅니다. Dockerfile이 포함된 리포지토리에서 코드를 변경할 때마다 이미지가 Azure Container Registry로 푸시되고 매니페스트가 AKS 클러스터에 배포됩니다.

필수 조건

코드 가져오기

응용 프로그램 예제 및 Dockerfile이 포함된 다음 리포지토리를 포크합니다.

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Azure 리소스 만들기

Azure Portal에 로그인한 다음 오른쪽 위 모서리에서 Cloud Shell 단추를 선택합니다. Azure CLI 또는 PowerShell을 사용하여 AKS 클러스터를 만듭니다.

컨테이너 레지스트리 만들기

# Create a resource group
az group create --name myapp-rg --location eastus

# Create a container registry
az acr create --resource-group myapp-rg --name mycontainerregistry --sku Basic

# Create a Kubernetes cluster
az aks create \
    --resource-group myapp-rg \
    --name myapp \
    --node-count 1 \
    --enable-addons monitoring \
    --generate-ssh-keys

Azure Pipelines 로그인

Azure Pipelines에 로그인합니다. 로그인하면 브라우저가 https://dev.azure.com/my-organization-name으로 이동하여 Azure DevOps 대시보드를 표시합니다.

선택한 조직 내에서 프로젝트를 만듭니다. 조직에 프로젝트가 없으면 프로젝트를 만들어 시작 화면이 표시됩니다. 그렇지 않으면 대시보드의 오른쪽 위 모서리에서 프로젝트 만들기 단추를 선택합니다.

파이프라인 만들기

리포지토리 연결 및 선택

  1. Azure DevOps 조직에 로그인하고, 프로젝트로 이동합니다.

  2. Pipelines로 이동한 다음, 새 파이프라인을 선택합니다.

  3. 먼저 소스 코드의 위치로 GitHub 선택하여 마법사의 단계를 수행합니다.

  4. 로그인할 GitHub로 리디렉션될 수 있습니다. 그렇다면 GitHub 자격 증명을 입력합니다.

  5. 리포지토리 목록이 표시되면 리포지토리를 선택합니다.

  6. Azure Pipelines 앱을 설치하도록 GitHub로 리디렉션될 수 있습니다. 그렇다면 승인 및 설치를 선택합니다.

  7. Azure Kubernetes Service에 배포를 선택합니다.

  8. 메시지가 표시되면 레지스트리 및 클러스터를 만든 구독을 선택합니다.

  9. myapp 클러스터를 선택합니다.

  10. 네임스페이스의 경우 기존을 선택한 다음, 기본값을 선택합니다.

  11. 컨테이너 레지스트리의 이름을 선택합니다.

  12. 이미지 이름을 기본값으로 설정된 상태로 둘 수 있습니다.

  13. 서비스 포트를 8080으로 설정합니다.

  14. 후속 단계에서 자동으로 생성된 파이프라인 YAML에 포함할 검토 앱 관련 구성에 대한 끌어오기 요청에 대한 검토 앱 사용 확인란을 설정합니다.

  15. 유효성 검사 및 구성을 선택합니다.

    Azure Pipelines가 파이프라인을 만들면 프로세스는 다음을 수행합니다.

    • Docker 레지스트리 서비스 연결을 만들어 파이프라인이 컨테이너 레지스트리에 이미지를 푸시할 수 있도록 합니다.

    • 환경 내에서 환경 및 Kubernetes 리소스를 만듭니다. RBAC 사용 클러스터의 경우 생성된 Kubernetes 리소스는 생성된 ServiceAccount가 선택한 네임스페이스 외부에서 작업을 수행할 수 없도록 클러스터에 ServiceAccount 및 RoleBinding 개체를 암시적으로 만듭니다.

    • 파이프라인을 정의하는 azure-pipelines.yml 파일을 생성합니다.

    • Kubernetes 매니페스트 파일을 생성합니다. 이러한 파일은 선택한 항목에 따라 deployment.ymlservice.yml 템플릿을 하이드레이션하여 생성됩니다. 준비가 되면 저장 및 실행을 선택합니다.

  16. 저장 및 실행을 선택합니다.

  17. 커밋 메시지리포지토리에 파이프라인 추가와 같은 항목으로 변경할 수 있습니다. 준비가 되면 저장 및 실행을 선택하여 새 파이프라인을 리포지토리에 커밋한 다음 새 파이프라인의 첫 번째 실행을 시작합니다.

앱 배포 보기

파이프라인이 실행되면 빌드 단계를 확인하고 배포 단계를 파란색(실행 중)에서 녹색(완료됨)으로 이동합니다. 스테이지를 선택하여 실행 중인 파이프라인을 볼 수 있습니다.

참고 항목

Microsoft 호스트된 에이전트를 사용하는 경우 방화벽에 Microsoft 호스트된 에이전트의 IP 범위를 추가해야 합니다. 매주 수요일에 게시되는 주간 JSON 파일에서 IP 범위의 주간 목록을 가져옵니다. 새 IP 범위는 다음 월요일에 적용됩니다. 자세한 내용은 Microsoft 호스트된 에이전트를 참조하세요. Azure DevOps 조직에 필요한 IP 범위를 찾으려면 Microsoft 호스트된 에이전트의 가능한 IP 범위를 식별하는 방법을 알아봅니다.

파이프라인 실행이 완료되면 발생한 작업을 탐색한 다음 앱이 배포된 것을 확인합니다. 파이프라인 요약에서:

  1. 환경 탭을 선택합니다.

  2. 환경 보기를 선택합니다.

  3. 배포한 네임스페이스에 대한 앱의 인스턴스를 선택합니다. 기본값을 사용한 경우 기본 네임스페이스의 myapp 앱입니다.

  4. 서비스 탭을 선택합니다.

  5. 외부 IP 주소를 선택하고 이를 클립보드에 복사합니다.

  6. 새 브라우저 탭을 열고 <IP 주소>(8080)를 입력합니다.

샘플 앱을 빌드하는 경우 브라우저에 Hello World가 나타납니다.

파이프라인 빌드 방법

옵션 선택을 완료한 다음 Azure Kubernetes Service에 배포하기 템플릿을 사용하여 파이프라인의 유효성을 검사하고 구성한 Azure Pipelines 파이프라인을 만들었습니다.

빌드 단계에서는 Docker 작업을 사용하여 이미지를 빌드하고 Azure Container Registry에 푸시합니다.

- stage: Build
  displayName: Build stage
  jobs:  
  - job: Build
    displayName: Build job
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)
          
    - task: PublishPipelineArtifact@1
      inputs:
        artifactName: 'manifests'
        path: 'manifests'

배포 작업은 Kubernetes 매니페스트 작업을 사용하여 Kubernetes 클러스터 노드가 Azure Container Registry 리소스에서 끌어오는 데 필요한 imagePullSecret을(를) 만듭니다. 그런 다음, Kubernetes 매니페스트 작업에서 매니페스트 파일을 사용하여 Kubernetes 클러스터에 배포합니다. 매니페스트 파일 service.ymldeployment.ymlAzure Kubernetes Service에 배포 템플릿을 사용할 때 생성되었습니다.

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build
  jobs:
  - deployment: Deploy
    displayName: Deploy job
    pool:
      vmImage: $(vmImageName)
    environment: 'myenv.aksnamespace' #customize with your environment
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadPipelineArtifact@2
            inputs:
              artifactName: 'manifests'
              downloadPath: '$(System.ArtifactsDirectory)/manifests'

          - task: KubernetesManifest@1
            displayName: Create imagePullSecret
            inputs:
              action: 'createSecret'
              connectionType: 'kubernetesServiceConnection'
              kubernetesServiceConnection: 'myapp-default' #customize for your Kubernetes service connection
              secretType: 'dockerRegistry'
              secretName: '$(imagePullSecret)'
              dockerRegistryEndpoint: '$(dockerRegistryServiceConnection)'

          - task: KubernetesManifest@1
            displayName: Deploy to Kubernetes cluster
            inputs:
              action: 'deploy'
              connectionType: 'kubernetesServiceConnection'
              kubernetesServiceConnection: 'myapp-default' #customize for your Kubernetes service connection
              manifests: |
                $(Pipeline.Workspace)/manifests/deployment.yml
                $(Pipeline.Workspace)/manifests/service.yml
              containers: '$(containerRegistry)/$(imageRepository):$(tag)'
              imagePullSecrets: '$(imagePullSecret)'

리소스 정리

만든 리소스를 완료할 때마다 다음 명령을 사용하여 삭제할 수 있습니다.

az group delete --name myapp-rg

메시지가 나타나면 y을(를) 입력합니다.