환경에서 Linux VM에 배포
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
이 빠른 시작에서는 환경의 여러 Linux VM(가상 머신) 리소스에 배포할 Azure DevOps 파이프라인을 설정하는 방법을 알아봅니다. 웹 배포 패키지를 게시하는 모든 앱에 대해 이러한 지침을 사용할 수 있습니다.
필수 조건
- 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
- Azure DevOps 조직 및 프로젝트. Azure Pipelines에 가입합니다.
JavaScript 또는 Node.js 앱의 경우 Azure에서 Nginx를 사용하여 두 개 이상의 Linux VM을 설정합니다.
샘플 코드 포크
배포하려는 앱이 GitHub에 이미 있는 경우 해당 코드에 대한 파이프라인을 만들 수 있습니다.
새 사용자인 경우 GitHub에서 이 리포지토리를 포크합니다.
https://github.com/MicrosoftDocs/pipelines-javascript
Linux VM을 사용하여 환경 만들기
환경 내에서 리소스로 VM을 추가하고 다중 VM 배포를 대상으로 지정할 수 있습니다. 환경에 대한 배포 기록은 VM에서 커밋까지의 추적 가능성을 제공합니다.
VM 리소스 추가
Azure DevOps 프로젝트에서 파이프라인>환경으로 이동한 다음, 환경 또는 새 환경 만들기를 선택합니다.
첫 번째 새 환경 화면에서 이름 및 선택적 설명을 추가합니다.
리소스에서 가상 머신을 선택한 다음, 다음을 선택합니다.
다음 새 환경 화면에서 운영 체제에서 Linux를 선택합니다.
Linux 등록 스크립트를 복사합니다. 이 스크립트는 환경에 추가된 모든 Linux VM에 대해 동일합니다.
참고 항목
로그인한 사용자의 PAT(개인 액세스 토큰)는 스크립트에 미리 삽입되고 3시간 후에 만료됩니다.
닫기를 선택하고 새 환경이 만들어집니다.
환경에 등록하려는 각 대상 VM에서 복사된 스크립트를 실행합니다.
참고 항목
VM에 이미 다른 에이전트가 실행 중인 경우 에이전트가 환경에 등록할 고유한 이름을 제공합니다.
VM이 등록되면 환경의 리소스 탭 아래에 리소스 로 표시됩니다.
더 많은 리소스를 만들기 위해 스크립트를 다시 복사하려면(예: PAT가 만료되는 경우) 환경 페이지에서 리소스 추가를 선택합니다.
태그 추가 및 관리
태그는 배포를 위해 환경에서 특정 VM 집합을 대상으로 지정하는 방법입니다. 사용할 수 있는 태그 수에는 제한이 없습니다. 태그는 각각 256자로 제한됩니다.
VM 리소스에 대한 추가 작업을 선택하여 대화형 등록 스크립트 또는 UI를 통해 VM에 대한 태그를 추가하거나 제거할 수 있습니다. 이 빠른 시작에서는 환경의 각 VM에 다른 태그를 할당합니다.
CI 빌드 파이프라인 정의
웹앱을 게시하는 CI(연속 통합) 빌드 파이프라인과 Linux 서버에서 로컬로 실행되는 배포 스크립트가 필요합니다. 사용하려는 런타임에 따라 CI 빌드 파이프라인을 설정합니다.
Important
GitHub 프로시저 중에 GitHub 서비스 연결을 만들거나 GitHub로 리디렉션되어 로그인, Azure Pipelines 설치 또는 Azure Pipelines 권한을 부여하라는 메시지가 표시될 수 있습니다. 화면의 지침에 따라 프로세스를 완료합니다. 자세한 내용은 GitHub 리포지토리에 대한 액세스를 참조 하세요.
- Azure DevOps 프로젝트에서 파이프라인>만들기 파이프라인을 선택한 다음, 소스 코드의 위치로 GitHub를 선택합니다.
- 리포지토리 선택 화면에서 포크된 샘플 리포지토리를 선택합니다.
- 파이프라인 구성 화면에서 시작 파이프라인을 선택합니다. Azure Pipelines는 파이프라인에 대한 azure-pipelines.yml이라는 YAML 파일을 생성합니다.
- 저장 및 실행 옆에 있는 드롭다운 케어를 선택하고 저장을 선택한 다음 다시 저장을 선택합니다. 파일이 포크된 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에 배포
파이프라인을 편집하여 다음 배포 작업을 추가합니다. 앞에서 만든 환경의 이름으로 바꿉
<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 정의를 참조 하세요.runOnce
배포strategy
로 지정합니다rolling
.runOnce
는 가장 간단한 배포 전략입니다.preDeploy
deploy
,routeTraffic
및postRouteTraffic
수명 주기 후크는 각각 한 번 실행됩니다. 그런 다음 실행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을 만들고 등록한 환경에 대해 배포 기록이 기록됩니다.
환경에서 파이프라인 추적 가능성 액세스
환경 배포 보기는 커밋 및 작업 항목의 완전한 추적 가능성과 환경에 대한 파이프라인 간 배포 기록을 제공합니다.