Linux Virtual Machine에 배포

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

환경 및 가상 머신 리소스를 사용하는 다중 가상 머신 배포를 위해 Azure DevOps 파이프라인을 설정하는 방법을 알아봅니.

웹 배포 패키지를 게시하는 모든 앱에 대해 이 문서의 지침을 사용합니다.

사전 요구 사항

샘플 코드 가져오기

GitHub에 배포하려는 앱이 이미 있는 경우 해당 코드에 대한 파이프라인을 만들 수 있습니다.

새 사용자인 경우 GitHub에서 이 리포지토리를 포크합니다.

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

가상 머신을 사용하여 환경 만들기

환경 내에서 가상 머신을 리소스로 추가하고 다중 VM 배포를 대상으로 지정할 수 있습니다. 배포 기록 보기는 VM에서 커밋까지 추적 가능성을 제공합니다.

  1. Azure DevOps organization 로그인하고 프로젝트로 이동합니다.

  2. 파이프라인 페이지로 이동하여 환경환경 만들기> 선택합니다.

  3. 환경에 대한 이름(필수) 및 설명을 지정합니다.

  4. 환경에 추가할 리소스Virtual Machines 선택한 다음, 다음을 선택합니다.

  5. 운영 체제에 대해 Linux를 선택하고 등록 스크립트를 복사합니다.

  6. 환경에 등록된 각 대상 VM에서 등록 스크립트를 실행합니다.

    참고

    • 로그인한 사용자의 PAT(개인용 액세스 토큰)는 스크립트에 미리 삽입되고 3시간 후에 만료됩니다.
    • VM에 이미 에이전트가 실행 중인 경우 환경에 등록할 고유한 이름을 제공합니다.
  7. VM이 등록되면 리소스 아래에 환경 리소스로 표시되기 시작 합니다.

    VM 만들기 스크린샷

  8. VM을 더 추가하려면 스크립트를 다시 복사합니다. 리소스 추가를 선택하고 Virtual Machines 선택합니다. 이 스크립트는 동일한 환경에 추가하려는 모든 VM에 대해 동일합니다.

    각 머신은 Azure Pipelines와 상호 작용하여 앱의 배포를 조정합니다.

    VM 리소스 보기의 스크린샷

  9. VM에 대한 태그를 추가하거나 제거할 수 있습니다. 리소스의 각 VM 리소스 끝에 있는 점을 선택합니다.

    태그는 배포 작업에서 환경이 사용되는 경우 특정 VM으로 배포를 제한합니다. 각 태그는 256자로 제한됩니다. 만들 수 있는 태그 수에는 제한이 없습니다.

    태그 보기의 스크린샷


CI 빌드 파이프라인 정의

웹앱을 게시하는 CI 빌드 파이프라인이 필요합니다. Ubuntu 서버에서 로컬로 실행할 수 있는 배포 스크립트도 필요합니다. 사용하려는 런타임에 따라 CI 빌드 파이프라인을 설정합니다.

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

  2. 프로젝트에서 파이프라인 페이지로 이동한 다음 작업을 선택하여 새 파이프라인을 만듭니다.

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

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

  4. 리포지토리 목록이 나타나면 원하는 샘플 앱 리포지토리를 선택합니다.

  5. Azure Pipelines는 리포지토리를 분석하고 적절한 파이프라인 템플릿을 권장합니다.

    시작 템플릿을 선택하고 이 YAML 코드 조각을 복사하여 npm으로 일반 Node.js 프로젝트를 빌드합니다. 이후 단계에서 이 YAML에 를 추가합니다.

    trigger:
    - main
    
    pool:
      vmImage: ubuntu-latest
    
    stages:
    - stage: Build
      displayName: Build stage
      jobs:  
      - job: Build
        displayName: Build
        steps:
        - task: UseNode@1
          inputs:
            version: '16.x'
          displayName: 'Install Node.js'
        - script: |
            npm install
            npm run build --if-present
            npm run test --if-present
          displayName: 'npm install, build and test'
        - task: ArchiveFiles@2
          displayName: 'Archive files'
          inputs:
            rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
            includeRootFolder: false
            archiveType: zip
            archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
            replaceExistingArchive: true
        - upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
          artifact: drop
    

    자세한 지침은 빌드를 만들기 위한 gulp를 사용하여 Node.js 앱 빌드 에 설명된 단계를 검토합니다.

    • 저장을선택하고커밋을 기본 분기>저장 및 실행에 직접 실행>합니다.

      새 실행이 시작됩니다. 실행이 완료될 때까지 기다립니다.

Linux VM에 배포할 CD 단계 정의

  1. 이전에 만든 환경 및 VM 리소스를 참조하여 파이프라인을 편집하고 배포 작업을 추가합니다. 가상 머신의 태그를 참조하도록 업데이트 tags 합니다.

    jobs:  
    - deployment: VMDeploy
      displayName: Web deploy
      environment:
        name:  <environment name>
        resourceType: VirtualMachine
        tags: web1 # Update or remove value to match your tag
      strategy:
    

배포 작업의 대상이 되는 environment 키워드(keyword) 및 리소스에 대한 자세한 내용은 YAML 스키마를 참조하세요.

  1. 환경의 각 VM에 대해 정의한 태그 를 지정하여 배포를 받을 환경에서 특정 VM 집합을 선택합니다.

    자세한 내용은 배포 작업에 대한 전체 YAML 스키마를 참조하세요.

  2. runOnce 또는 rolling 를 배포 전략으로 지정합니다.

    runOnce 는 가장 간단한 배포 전략입니다. 모든 수명 주기 후크, 즉 preDeploydeploy, routeTrafficpostRouteTraffic가 한 번 실행됩니다. 그런 다음 또는 on:failureon:success 실행됩니다.

    에 대한 배포 작업의 다음 예제를 runOnce참조하세요.

    jobs:
    - deployment: VMDeploy
      displayName: Web deploy
      environment:
        name: <environment name>
        resourceType: VirtualMachine
      strategy:
        runOnce:
          deploy:
            steps:
            - script: echo my first deployment
    
  3. Java 파이프라인을 사용하는 롤링 전략에 대한 YAML 코드 조각의 다음 예제를 참조하세요. 각 반복에서 가져오는 대상을 최대 5개까지 업데이트할 수 있습니다. maxParallel 는 병렬로 배포할 수 있는 대상 수를 결정합니다. 선택 영역은 배포할 대상을 제외하고 언제든지 사용할 수 있어야 하는 대상의 절대 수 또는 백분율을 차지합니다. 배포 중에 성공 및 실패 조건을 확인하는 데도 사용됩니다.

    jobs: 
    - deployment: VMDeploy
      displayName: web
      environment:
        name: <environment name>
        resourceType: VirtualMachine
      strategy:
          rolling:
            maxParallel: 2  #for percentages, mention as x%
            preDeploy:
              steps:
              - download: current
                artifact: drop
              - script: echo initialize, cleanup, backup, install certs
            deploy:
              steps:
              - task: Bash@3
                inputs:
                  targetType: 'inline'
                  script: |
                    # Modify deployment script based on the app type
                    echo "Starting deployment script run"
                    sudo java -jar '$(Pipeline.Workspace)/drop/**/target/*.jar'
            routeTraffic:
              steps:
              - script: echo routing traffic
            postRouteTraffic:
              steps:
              - script: echo health check post-route traffic
            on:
              failure:
                steps:
                - script: echo Restore from backup! This is on failure
              success:
                steps:
                - script: echo Notify! This is on success
    

    이 작업을 실행할 때마다 VM을 만들고 등록한 환경에 대해 <environment name> 배포 기록이 기록됩니다.

환경의 파이프라인 추적 가능성 보기

배포 보기는 커밋 및 작업 항목의 완전한 추적 가능성과 환경당 파이프라인 간 배포 기록을 제공합니다.

배포 보기의 스크린샷

다음 단계