다음을 통해 공유


Azure Pipelines를 사용하여 컨테이너 이미지를 빌드하고 레지스트리에 푸시

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

이 문서에서는 Azure Pipelines의 설정 및 구성을 안내하여 Docker 이미지를 빌드하고 Azure Container Registry 및 Docker Hub에 푸시합니다. 또한 파이프라인 내에서 보안 인증을 사용하는 방법에 System.AccessToken 대해 자세히 설명합니다.

이 문서에서는 Azure Pipelines를 사용하여 Docker 이미지를 빌드하고 Docker 허브에 푸시하기 위한 설정 및 구성을 안내합니다. 또한 파이프라인 내에서 보안 인증을 사용하는 방법에 System.AccessToken 대해 자세히 설명합니다.

Docker@2 작업을 사용하여 Docker-이미지를 빌드한 후 컨테이너 레지스트리에 푸시하는 YAML 파이프라인을 만드는 방법을 배웁니다.

필수 조건

제품 요구 사항
Azure DevOps - Azure DevOps 프로젝트.
- 권한:
    - 프로젝트의 모든 파이프라인에 대한 액세스 권한을 부여하려면 프로젝트 관리자 그룹구성원이어야 합니다.
    서비스 연결을 만들려면, 관리자 또는 작성자 역할이 있어야 합니다.
- 자체 호스팅 에이전트를 사용하는 경우 Docker가 설치되어 있고 Docker 엔진이 상승된 권한으로 실행되고 있는지 확인합니다. Microsoft 호스팅 에이전트에는 Docker가 미리 설치되어 있습니다.
GitHub - GitHub 계정입니다.
- Dockerfile이 있는 GitHub 리포지토리입니다. 고유한 프로젝트가 없는 경우 샘플 리포지토리 사용합니다.
- Azure Pipelines에 권한을 부여하는 GitHub 서비스 연결.
Azure - Azure 구독권.
- Azure Container Registry.
Docker Hub - Docker Hub 계정.
- Docker Hub 이미지 리포지토리입니다.
  • 프로젝트 요구 사항:Azure DevOps 프로젝트.
  • 권한:
  • 구독:
    • GitHub 계정. 계정이 없는 경우, GitHub에서 무료로 하나를 만들 수 있습니다.
    • Docker 허브 계정: Docker 허브 계정이 필요합니다. 하나 없는 경우, Docker Hub에서 무료로 만들 수 있습니다.
  • 리포지토리: Dockerfile이 있는 GitHub 리포지토리. 리포지토리가 없는 경우, 샘플 리포지토리를 사용할 수 있습니다.
  • 서비스 연결: GitHub Enterprise Server 서비스 연결. 없는 경우 Azure DevOps 프로젝트 설정에서 만들 수 있습니다. 서비스 연결을 만드는 방법에 대한 자세한 내용은 서비스 연결참조하세요.
  • 컨테이너 레지스트리: A (Docker Hub 컨테이너 레지스트리
  • 소프트웨어 요구 사항: Docker가 설치되어 있어야 하며, 자체 호스팅 에이전트에서 Docker 엔진이 관리자 권한으로 실행되어야 합니다.

Docker 서비스 연결 만들기

레지스트리에 컨테이너 이미지를 푸시하기 전에 Azure DevOps에서 서비스 연결을 만들어야 합니다. 이 서비스 연결은 컨테이너 레지스트리를 사용하여 안전하게 인증하는 데 필요한 자격 증명을 저장합니다. Azure DevOps 프로젝트 설정에서 서비스 연결로 이동하여 새로운 Docker 레지스트리 서비스 연결을 만드세요.

Docker 레지스트리 서비스 연결에서 Docker 허브 옵션을 선택하고 사용자 이름과 암호를 제공하여 Docker 서비스 연결을 만듭니다.

Docker 이미지를 빌드하고 푸시하는 YAML 파이프라인 만들기

Docker@2 작업은 Azure Pipelines 내에서 Docker 이미지를 빌드, 푸시 및 관리하는 프로세스를 간소화하도록 설계되었습니다. 이 작업은 빌드, 푸시, 로그인, 로그아웃, 시작, 중지 및 실행을 비롯한 광범위한 Docker 명령을 지원합니다.

다음 단계를 사용하여 Docker@2 작업을 사용하여 이미지를 빌드하고 푸시하는 YAML 파이프라인을 만듭니다.

  1. Azure DevOps 프로젝트로 이동하여 왼쪽 메뉴에서 파이프라인 선택합니다.

  2. 새 파이프라인선택하기.

  3. 원본 리포지토리의 위치를 선택합니다.

  4. GitHub 소스 코드의 위치로 선택하고 리포지토리를 선택합니다.

    • 로그인하기 위해 GitHub로 리디렉션되는 경우 GitHub 자격 증명을 입력합니다.
    • Azure Pipelines 앱을 설치하기 위해 GitHub로 리디렉션되는 경우 승인 및 설치를 선택합니다.
  5. 시작 파이프라인 템플릿을 선택하여 기본 파이프라인 구성을 만듭니다.

  6. azure-pipelines.yml 내용을 다음 코드로 바꿉니다.

    
     trigger:
     - main
    
     pool:
       vmImage: 'ubuntu-latest' 
    
     variables:
       repositoryName: '<target repository name>'
    
     steps:
     - task: Docker@2
       inputs:
         containerRegistry: '<docker connection>'
         repository: $(repositoryName)
         command: 'buildAndPush'
         Dockerfile: '**/Dockerfile'
    
    
  7. 다음과 같이 파이프라인 YAML 파일을 편집합니다.

    • Linux 또는 Windows 앱을 배포하는지 여부에 따라 각각 중 하나 vmImage 또는 ubuntu-latest.로 설정 windows-latest 해야 합니다.

      자체 호스팅 에이전트를 사용하는 경우 Docker 기능이 있는 자체 호스팅 에이전트를 포함하는 풀의 이름으로 설정합니다 vmImage . 속성을 추가하여 demands: Docker가 설치된 에이전트가 선택되었는지 확인할 수 있습니다. 예시:

          pool:
            name: <your agent pool>
            demands: docker
      
    • 이전에 만든 Docker 서비스 연결의 이름으로 바꿉 <docker connection> 습니다.

    • 이미지를 푸시하려는 컨테이너 레지스트리의 리포지토리 이름으로 바꿉 <target repository name> 습니다. 예들 들어 <your-docker-hub-username>/<repository-name>입니다.

  8. 완료되면 저장을 선택하고 실행합니다.

  9. azure-pipelines.yml 파일을 리포지토리에 저장하면 커밋 메시지 추가하라는 메시지가 표시됩니다. 메시지를 입력한 다음 저장 및 실행을 선택합니다.

자체 호스팅 에이전트를 사용하는 경우 Docker가 에이전트의 호스트에 설치되어 있고 Docker 엔진/디먼이 상승된 권한으로 실행되고 있는지 확인합니다.

이미지를 빌드하려면 Docker를 에이전트의 호스트에 설치해야 하며 Docker 엔진/디먼이 상승된 권한으로 실행되어야 합니다.

YAML 파이프라인 편집기를 사용하여 파이프라인을 만들려면 다음 단계를 사용합니다.

  1. 컬렉션으로 이동하여 프로젝트를 만듭니다.

  2. 프로젝트에서 파이프라인을 선택합니다.

  3. 파이프라인 생성를 선택합니다.

  4. 소스 코드의 위치로 GitHub Enterprise Server를 선택합니다.

  5. 아직 연결하지 않은 경우 GitHub Enterprise Server 계정에 연결하도록 Azure Pipelines에 권한을 부여합니다.

    1. GitHub Enterprise Server에 연결을 선택합니다.
    2. 계정 세부 정보를 입력한 다음 확인 및 저장을 선택합니다.
  6. 리포지토리를 선택합니다. Azure Pipelines 앱을 설치하기 위해 GitHub로 리디렉션되는 경우 승인 및 설치를 선택합니다.

  7. 파이프라인을 구성하려면 Docker 이미지 템플릿 빌드를 선택합니다.

  8. YAML 파이프라인 편집기에서 YAML 파일의 내용을 다음 코드로 바꿉니다.

    
    trigger:
    - main
    
    pool:
      name: default
      demands: docker
    
    variables:
      repositoryName: '<target repository name>'
    
    steps:
    - task: Docker@2
      inputs:
        containerRegistry: '<docker connection>'
        repository: $(repositoryName)
        command: 'buildAndPush'
        Dockerfile: '**/Dockerfile'
    
    
  9. 다음과 같이 파이프라인 YAML 파일을 편집합니다.

    • 풀 이름을 자체 호스팅 에이전트가 포함된 풀의 이름으로 Docker 기능으로 바꿉니다.
    • 이미지를 푸시하려는 컨테이너 레지스트리의 리포지토리 이름으로 바꿉 <target repository name> 습니다. 예들 들어 <your-docker-hub-username>/<repository-name>입니다.
    • 이전에 만든 Docker 서비스 연결의 이름으로 바꿉 <docker connection> 습니다.
  10. 저장 및 실행을 선택합니다.

  11. 저장 및 실행 페이지에서 저장을 선택하고 다시 실행합니다.

파이프라인 실행을 확인하고 로그를 확인하여 Docker 이미지가 빌드되고 컨테이너 레지스트리로 푸시되는지 확인할 수 있습니다.

Docker@2 작업에서 인증에 System.AccessToken 사용

Azure DevOps에서 제공하는 것을 사용하여 컨테이너 레지스트리로 인증할 System.AccessToken 수 있습니다. 이 토큰을 사용하면 중요한 자격 증명을 노출하지 않고도 파이프라인 내의 리소스에 안전하게 액세스할 수 있습니다.

다음 YAML 파이프라인 예제에서는 Docker@2 작업을 사용하여 컨테이너 레지스트리에 로그인하고 Docker 이미지를 푸시합니다. Docker System.AccessToken 명령을 인증하기 위한 환경 변수로 설정됩니다.

Docker 레지스트리 서비스 연결 이름으로 대체 <docker connection> 합니다. Docker 리포지토리의 이름으로 바꿉 <your repository> 습니다.

trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

variables:
  SYSTEM_ACCESSTOKEN: $(System.AccessToken)

steps:
- task: Docker@2
  inputs:
    command: login
    containerRegistry: '<docker connection>'
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)

- task: Docker@2
  inputs:
    command: buildAndPush
    repository: '<your repository>'
    dockerfile: '**/Dockerfile'
    tags: |
      $(Build.BuildId)
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)