Azure DevOps 파이프라인: Docker를 빌드 환경으로 사용

4213 단어
CI/CD는 DevOps의 가장 중요한 부분이며 저는 이를 위해 Azure DevOps를 사용합니다. DevOps 파이프라인을 실행하려면 다음과 같은 다양한 작업을 수행하는 "DevOps Agent"가 필요합니다.
  • 결제 소스
  • 소스 컴파일
  • 테스트 실행
  • 게시 테스트
  • 아티팩트 생성 등

  • 이러한 작업을 성공적으로 완료하려면 에이전트에 모든 종속성이 설치되어 있어야 하며 Microsoft 호스팅 에이전트에는 많은 언어 및 플랫폼에 대해 알려진 종속성이 상당히 많이 있습니다. Microsoft 호스팅 에이전트 및 각 에이전트의 종속성에 대한 자세한 정보here를 찾을 수 있습니다.

    그러나 일부 시나리오에서는 보다 세분화된 제어가 필요하며 여전히 유효한 자체 호스팅 에이전트를 사용했습니다. 그러나 추가 VM(또는 컴퓨터)을 관리하는 것은 지루한 작업입니다. 따라서 동일한 작업을 수행하기 위해 도커 컨테이너를 사용합니다.

    자체 호스팅 에이전트에 대해서는 here을 참조하십시오.

    Azure DevOps 리포지토리 만들기



    이미 사용하고 있다고 가정하여 방법을 설명하지 않겠습니다. 예제 앱으로 .NET 6 콘솔 앱을 만듭니다. 폴더 구조입니다.



    CI 파이프라인 yaml



    아래와 같이 빌드 파이프라인을 생성했습니다.

    trigger:
    - main
    
    pool:
      vmImage: ubuntu-latest
    
    steps:
    - script: |
        docker run --name $(Build.BuildNumber) -d -t mcr.microsoft.com/dotnet/sdk:6.0
        docker cp $(Build.Repository.LocalPath)/ $(Build.BuildNumber):/app
        docker exec $(Build.BuildNumber) bash -c 'cd /app/MyDotNetProject; dotnet publish -c Release -o out'
        docker cp $(Build.BuildNumber):/app/MyDotNetProject/out $(Build.ArtifactStagingDirectory)
      displayName: 'Build in docker and export artifacts'
    
    - task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
        ArtifactName: 'drop'
        publishLocation: 'Container'
    


    이 yaml에서 다음을 수행했습니다.
  • 도커 이미지를 가져와서 실행하여 코드를 빌드합니다. 이번에는 .NET 6 SDK 이미지를 사용합니다.
  • 이름과 경로를 사용하여 실행 중인 도커에 소스 코드를 복사합니다.
  • 소스를 빌드하고 컴파일된 어셈블리를 복사합니다.
  • 파이프라인 아티팩트에 게시합니다.

  • 그 결과 아래와 같이 출력되는 것을 볼 수 있습니다.



    상호 작용하기 쉽도록 실행 중인 컨테이너에 이름을 지정했습니다. Build.BuildNumber를 사용하지만 모든 문자열을 사용할 수 있습니다.

    이것은 무엇을 의미 하는가?



    이번에는 .NET 6 SDK 이미지를 사용했지만 빌드에 필요한 모든 종속성을 포함하는 자체 도커 이미지를 만들 수 있다고 추론합니다. 이러한 이미지를 생성하고 에이전트가 끌어서 실행할 수 있는 위치로 푸시하기만 하면 됩니다.

    자체 호스팅 에이전트는 언제 사용하나요?



    Microsoft 호스팅 에이전트는 동적으로 할당되고 도커 컨테이너 캐시가 없기 때문에 실행될 때마다 이미지를 다운로드하는 데 시간이 걸릴 수 있습니다. 이러한 시간을 절약하려면 자체 호스팅 에이전트가 유용합니다.

    요약



    이 기사에서는 CLI를 사용하여 docker 명령을 실행하지만 대부분의 명령은 docker 작업으로 대체하거나 재사용 가능한 스크립트를 작성하고 호출할 수 있습니다. 요점은 컨테이너를 DevOps 빌드 파이프라인 내부의 빌드 환경으로 사용할 수 있다는 것입니다!

    좋은 웹페이지 즐겨찾기