Linux Virtual Machine에 배포
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
환경 및 가상 머신 리소스를 사용하는 다중 가상 머신 배포를 위해 Azure DevOps 파이프라인을 설정하는 방법을 알아봅니다.
웹 배포 패키지를 게시하는 모든 앱에 대해 이 문서의 지침을 사용합니다.
사전 요구 사항
- 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
- 활성 Azure DevOps 조직. Azure Pipelines에 가입합니다.
- Azure에서 호스트되는 Linux VM(가상 머신)입니다.
- JavaScript 또는 Node.js 앱을 설치하려면 Azure에서 Nginx를 사용하여 Linux VM을 설정합니다. Azure CLI를 사용하여 Linux VM 만들기를 참조하세요.
- Java Spring Boot 및 Spring Cloud 기반 앱을 배포하려면 완전히 지원되는 OpenJDK 기반 런타임을 제공하는 Ubuntu 20.04 템플릿의 Java 13 을 사용하여 Azure에서 Linux VM을 만듭니다.
샘플 코드 가져오기
GitHub에 배포하려는 앱이 이미 있는 경우 해당 코드에 대한 파이프라인을 만들 수 있습니다.
새 사용자인 경우 GitHub에서 이 리포지토리를 포크합니다.
https://github.com/MicrosoftDocs/pipelines-javascript
가상 머신을 사용하여 환경 만들기
환경 내에서 가상 머신을 리소스로 추가하고 다중 VM 배포를 대상으로 지정할 수 있습니다. 배포 기록 보기는 VM에서 커밋까지 추적 가능성을 제공합니다.
Azure DevOps organization 로그인하고 프로젝트로 이동합니다.
파이프라인 페이지로 이동하여 환경환경 만들기를> 선택합니다.
환경에 대한 이름(필수) 및 설명을 지정합니다.
환경에 추가할 리소스로 Virtual Machines 선택한 다음, 다음을 선택합니다.
운영 체제에 대해 Linux를 선택하고 등록 스크립트를 복사합니다.
환경에 등록된 각 대상 VM에서 등록 스크립트를 실행합니다.
참고
- 로그인한 사용자의 PAT(개인용 액세스 토큰)는 스크립트에 미리 삽입되고 3시간 후에 만료됩니다.
- VM에 이미 에이전트가 실행 중인 경우 환경에 등록할 고유한 이름을 제공합니다.
VM이 등록되면 리소스 아래에 환경 리소스로 표시되기 시작 합니다.
VM을 더 추가하려면 스크립트를 다시 복사합니다. 리소스 추가를 선택하고 Virtual Machines 선택합니다. 이 스크립트는 동일한 환경에 추가하려는 모든 VM에 대해 동일합니다.
각 머신은 Azure Pipelines와 상호 작용하여 앱의 배포를 조정합니다.
VM에 대한 태그를 추가하거나 제거할 수 있습니다. 리소스의 각 VM 리소스 끝에 있는 점을 선택합니다.
태그는 배포 작업에서 환경이 사용되는 경우 특정 VM으로 배포를 제한합니다. 각 태그는 256자로 제한됩니다. 만들 수 있는 태그 수에는 제한이 없습니다.
CI 빌드 파이프라인 정의
웹앱을 게시하는 CI 빌드 파이프라인이 필요합니다. Ubuntu 서버에서 로컬로 실행할 수 있는 배포 스크립트도 필요합니다. 사용하려는 런타임에 따라 CI 빌드 파이프라인을 설정합니다.
Azure DevOps 조직에 로그인하고, 프로젝트로 이동합니다.
프로젝트에서 파이프라인 페이지로 이동한 다음 작업을 선택하여 새 파이프라인을 만듭니다.
소스 코드의 위치로 GitHub 를 선택합니다.
로그인하려면 GitHub로 리디렉션될 수 있습니다. 그렇다면 GitHub 자격 증명을 입력합니다.
리포지토리 목록이 나타나면 원하는 샘플 앱 리포지토리를 선택합니다.
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 단계 정의
이전에 만든 환경 및 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 스키마를 참조하세요.
환경의 각 VM에 대해 정의한 태그 를 지정하여 배포를 받을 환경에서 특정 VM 집합을 선택합니다.
자세한 내용은 배포 작업에 대한 전체 YAML 스키마를 참조하세요.
runOnce
또는rolling
를 배포 전략으로 지정합니다.runOnce
는 가장 간단한 배포 전략입니다. 모든 수명 주기 후크, 즉preDeploy
deploy
,routeTraffic
및postRouteTraffic
가 한 번 실행됩니다. 그런 다음 또는on:
failure
가on:
success
실행됩니다.에 대한 배포 작업의 다음 예제를
runOnce
참조하세요.jobs: - deployment: VMDeploy displayName: Web deploy environment: name: <environment name> resourceType: VirtualMachine strategy: runOnce: deploy: steps: - script: echo my first deployment
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>
배포 기록이 기록됩니다.
환경의 파이프라인 추적 가능성 보기
배포 보기는 커밋 및 작업 항목의 완전한 추적 가능성과 환경당 파이프라인 간 배포 기록을 제공합니다.
다음 단계
관련 문서
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기