다음을 통해 공유


환경에서 Linux VM에 배포

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

이 빠른 시작에서는 환경의 여러 Linux VM(가상 머신) 리소스에 배포할 Azure DevOps 파이프라인을 설정하는 방법을 알아봅니다. 웹 배포 패키지를 게시하는 모든 앱에 대해 이러한 지침을 사용할 수 있습니다.

필수 조건

JavaScript 또는 Node.js 앱의 경우 Azure에서 Nginx를 사용하여 두 개 이상의 Linux VM을 설정합니다.

샘플 코드 포크

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

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

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

Linux VM을 사용하여 환경 만들기

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

VM 리소스 추가

  1. Azure DevOps 프로젝트에서 파이프라인>환경으로 이동한 다음, 환경 또는 새 환경 만들기를 선택합니다.

  2. 첫 번째 새 환경 화면에서 이름 및 선택적 설명을 추가합니다.

  3. 리소스에서 가상 머신을 선택한 다음, 다음을 선택합니다.

  4. 다음 새 환경 화면에서 운영 체제에서 Linux를 선택합니다.

  5. Linux 등록 스크립트를 복사합니다. 이 스크립트는 환경에 추가된 모든 Linux VM에 대해 동일합니다.

    VM 만들기의 스크린샷.

    참고 항목

    로그인한 사용자의 PAT(개인 액세스 토큰)는 스크립트에 미리 삽입되고 3시간 후에 만료됩니다.

  6. 닫기를 선택하고 새 환경이 만들어집니다.

  7. 환경에 등록하려는 각 대상 VM에서 복사된 스크립트를 실행합니다.

    참고 항목

    VM에 이미 다른 에이전트가 실행 중인 경우 에이전트가 환경에 등록할 고유한 이름을 제공합니다.

VM이 등록되면 환경의 리소스 탭 아래에 리소스 로 표시됩니다.

VM 리소스 보기의 스크린샷.

더 많은 리소스를 만들기 위해 스크립트를 다시 복사하려면(예: PAT가 만료되는 경우) 환경 페이지에서 리소스 추가를 선택합니다.

태그 추가 및 관리

태그는 배포를 위해 환경에서 특정 VM 집합을 대상으로 지정하는 방법입니다. 사용할 수 있는 태그 수에는 제한이 없습니다. 태그는 각각 256자로 제한됩니다.

VM 리소스에 대한 추가 작업을 선택하여 대화형 등록 스크립트 또는 UI를 통해 VM에 대한 태그를 추가하거나 제거할 수 있습니다. 이 빠른 시작에서는 환경의 각 VM에 다른 태그를 할당합니다.

태그 보기의 스크린샷.

CI 빌드 파이프라인 정의

웹앱을 게시하는 CI(연속 통합) 빌드 파이프라인과 Linux 서버에서 로컬로 실행되는 배포 스크립트가 필요합니다. 사용하려는 런타임에 따라 CI 빌드 파이프라인을 설정합니다.

Important

GitHub 프로시저 중에 GitHub 서비스 연결을 만들거나 GitHub로 리디렉션되어 로그인, Azure Pipelines 설치 또는 Azure Pipelines 권한을 부여하라는 메시지가 표시될 수 있습니다. 화면의 지침에 따라 프로세스를 완료합니다. 자세한 내용은 GitHub 리포지토리에 대한 액세스를 참조 하세요.

  1. Azure DevOps 프로젝트에서 파이프라인>만들기 파이프라인을 선택한 다음, 소스 코드의 위치로 GitHub를 선택합니다.
  2. 리포지토리 선택 화면에서 포크된 샘플 리포지토리를 선택합니다.
  3. 파이프라인 구성 화면에서 시작 파이프라인을 선택합니다. Azure Pipelines는 파이프라인에 대한 azure-pipelines.yml이라는 YAML 파일을 생성합니다.
  4. 저장 및 실행 옆에 있는 드롭다운 케어를 선택하고 저장을 선택한 다음 다시 저장을 선택합니다. 파일이 포크된 GitHub 리포지토리에 저장됩니다.

코드 편집

편집을 선택하고 azure-pipelines.yml 파일의 내용을 다음 코드로 바꿉니다. 이후 단계에서 이 YAML에 추가합니다.

다음 코드는 npm을 사용하여 Node.js 프로젝트를 빌드합니다.

    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에 배포

  1. 파이프라인을 편집하여 다음 배포 작업을 추가합니다. 앞에서 만든 환경의 이름으로 바꿉 <environment name> 습니다. 각 VM에 대해 정의한 VM을 지정하여 <VM tag> 배포를 받을 환경에서 특정 VM을 선택합니다.

    jobs:  
    - deployment: VMDeploy
      displayName: Web deploy
      environment:
        name:  <environment name>
        resourceType: VirtualMachine
        tags: <VM tag> # Update value for VMs to deploy to
      strategy:
    

    자세한 내용은 전체 jobs.deployment 정의를 참조하세요.

    배포 작업의 대상이 되는 키워드 및 리소스에 대한 environment 자세한 내용은 jobs.deployment.environment 정의를 참조 하세요.

  2. runOnce 배포strategy로 지정합니다rolling.

    • runOnce 는 가장 간단한 배포 전략입니다. preDeploy deploy, routeTrafficpostRouteTraffic 수명 주기 후크는 각각 한 번 실행됩니다. 그런 다음 실행 on: success 합니다 on: failure .

      다음 코드는 다음에 대한 runOnce배포 작업을 보여줍니다.

      jobs:
      - deployment: VMDeploy
        displayName: Web deploy
        environment:
          name: <environment name>
          resourceType: VirtualMachine
          tags: <VM tag>
        strategy:
          runOnce:
            deploy:
              steps:
              - script: echo my first deployment
      
    • 다음 코드는 Java 파이프라인을 사용하여 배포 전략에 대한 rolling YAML 코드 조각을 보여 있습니다. 각 반복에서 최대 5개의 대상을 업데이트할 수 있습니다. 매개 변수는 maxParallel 병렬로 배포할 수 있는 대상 수를 지정합니다.

      선택 영역은 maxParallel 배포 대상을 제외하고 언제든지 사용할 수 있어야 하는 대상의 절대 수 또는 백분율을 차지하고 배포 중에 성공 및 실패 조건을 결정합니다.

      jobs: 
      - deployment: VMDeploy
        displayName: web
        environment:
          name: <environment name>
          resourceType: VirtualMachine
          tags: <VM tag>
        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을 만들고 등록한 환경에 대해 배포 기록이 기록됩니다.

환경에서 파이프라인 추적 가능성 액세스

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

배포 보기의 스크린샷.