Azure DevOps Service가 제공하는 Deployment Groups를 이용하여 Linux 머신에 Spring-Boot App을 배포하기

Last Update: 공유

Azure DevOps Service는 CI/CD 파이프라인 기능을 이용해 다양한 방법을 통해서 앱을 원하는 배포 머신에 배포할 수 있습니다. 그 중에서 Deployment Groups에 배포 머신을 등록하고 이를 이용하여 앱을 배포하는 방법에 대해서는 다음과 같은 절차를 통해서 접근해 보실 수 있습니다.

Azure DevOps Repo의 구성

  1. Azure DevOps 포털에 로그온 합니다.
  2. New Project를 선택하여 새로운 Project를 생성합니다.
  3. 생성된 Project로 들어가서 좌측의 Repos메뉴를 선택합니다.
  4. 이후 Import a Repository 부분에서 사용하고자 하는 Spring Boot 예제를 import 하여 구성합니다. (예, https://github.com/spring-guides/gs-spring-boot.git )

Azure Build Pipeline을 구성

  1. Pipelines에서 New Pipeline을 선택합니다.
  2. Azure Repos Git을 선택하여 이전 단계에서 구성한 Repo를 선택합니다.
  3. Configure your pipeline 단계에서는 Repo에 구성된 소스를 컴파일하기 위해 Maven (build your java project and run tests with Apache Maven)을 선택합니다.
  4. 프로젝트 내에 azure-pipelines.yml 파일이 자동 생성되고, 아래와 같이 내용을 추가합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
pool:
vmImage: ubuntu-latest

steps:
- task: Maven@3
inputs:
mavenPomFile: 'complete/pom.xml'
mavenOptions: '-Xmx3072m'
javaHomeOption: 'JDKVersion'
jdkVersionOption: '1.8'
jdkArchitectureOption: 'x64'
publishJUnitResults: true
testResultsFiles: '**/surefire-reports/TEST-*.xml'
goals: 'package'

- task: CopyFiles@2
displayName: 'Copy Files to: $(build.artifactstagingdirectory)'
inputs:
SourceFolder: '$(system.defaultworkingdirectory)'
Contents: '**/*.?(jar|sh)'
TargetFolder: '$(build.artifactstagingdirectory)'
flattenFolders: true
condition: succeededOrFailed()

- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
  1. 빌드가 완료되면, Artifacts가 생성됩니다. 해당 Artifacts는 Azure Release Pipeline에서 download 받아서 처리될 예정입니다.

Deployment Groups의 생성

  1. Azure Pipelines의 메뉴 중에 Deployment Groups를 선택하고, “New”을 클릭하여 생성합니다.
  2. “Deployment group name”에 임의의 이름 (예를 들면, ‘testdg’)을 입력하여 생성합니다.

Personal Access Token의 생성

  1. Azure DevOps Portal에 로그온 후에 우측 상단에 User Settings메뉴가 존재하며, 이들 중 Personal Access Token 메뉴로 들어갑니다.
  2. New Token을 선택합니다.
  3. Name 과 Expiration Date를 원하는 내용으로 입력합니다.
  4. Scopes는 Custom defined를 선택하고, Show All Scopes를 클릭하여 확장합니다.
  5. 리스트된 Scope 중에 Deployment Groups에 Read & Manage 를 선택하여 생성합니다.
  6. 이후 Personal Access Token을 Copy 하여 기억합니다.

Deployment Groups에 포함될 Linux VM의 생성

  1. Azure Portal에 로그온 합니다.
  2. Create a resource 를 통해서 Virtual Machine을 생성합니다.
  3. 적절한 Subscription을 입력합니다.
  4. Resource Group에 Create New를 통해서 새롭게 생성합니다.
  5. Virtual machine name을 입력합니다.
  6. Region을 선택합니다.
  7. Image 를 선택합니다. (예를 들어, Ubuntu Server 18.04를 선택할 수 있습니다.)
  8. Size 를 선택합니다. (예를 들어, Standard D2s_V3 를 선택할 수 있습니다.)
  9. 테스트 및 확인을 위해서 SSH (22)를 허용할 수 있습니다.
  10. Review + Create 를 통해서 생성합니다.

TeamServicesAgentLinux의 설치

  1. Azure Portal에서 앞서서 생성한 VM 리소스를 선택합니다.
  2. Settings에 Extensions를 선택합니다.
  3. +Add를 통해 “Azure Pipeline Agent For Linux”를 선택합니다.
  4. “Configure Azure Pipelines Agent For Linux Extension” 화면을 통해서 구성합니다.
  5. Azure DevOps Organization Url 에 기존에 생성한 Azure DevOps의 Project가 존재하는 조직을 포함하여 입력합니다. (예를 들어, https://dev.azure.com/organizationName")
  6. Team Project에 앞서서 구성한 Team Project의 이름을 입력합니다.
  7. Deployment Group에 앞서서 구성한 Deployment group name을 입력합니다. 이것은 앞서서 ‘Deployment Groups의 생성’ 단계에서 입력한 이름입니다.
  8. Personal Access Token에는 앞서서 ‘Personal Access Token의 생성’ 단계에서 복사한 값을 입력합니다.
  9. Review + Create를 통해 설치합니다.
  10. 정상적으로 설치가 완료되면, Azure DevOps의 Deployment Groups에 생성한 Deployment Group (예를 들어, ‘Testdg’)을 선택하고, Targets를 확인하면, Healthy 상태의 VM이 등록된 것을 확인할 수 있습니다.

Release Pipeline의 구성 및 실행

  1. Azure DevOps 포털에서 Releases를 선택하고, 새로운 Release를 생성합니다.
  2. Add an Artifact를 통해서 Build Pipeline에서 설정된 Project와 Source를 선택한 후에 Add 합니다.
  3. Add a stage에서 Empty Job을 선택합니다.
  4. View Stage Task를 클릭합니다.
  5. 새로운 Release Pipeline의 Tasks에 존재하는 Agent Job을 선택하고, 우측의 remove 버튼을 클릭하여 제거합니다.
  6. Add phase options를 클릭하여, add a deployment group job을 선택합니다.
  7. Deployment group job 에서 임의의 Name을 입력하고, Deployment targets의 Deployment group은 앞서서 생성한 Deployment Group을 선택합니다. (예를 들어, ‘testdg’)
  8. Add a task to Deployment Group Job (+ 메뉴)을 통해 Task를 추가합니다. Task는 ‘Bash’를 검색하여 추가합니다.
  9. Bash task 안에서 Type을 inline으로 선택하고 다음의 script 를 입력합니다.
    1
    2
    3
    sudo mkdir /lib/artifacts/
    sudo cp $(System.DefaultWorkingDirectory)/_Test/drop/spring-boot-complete-0.0.1-SNAPSHOT.jar/lib/artifacts/
    sudo java -jar /lib/artifacts/spring-boot-complete-0.0.1-SNAPSHOT.jar >/dev/null 2>&1 &
  10. 저장하고, release 를 생성한 후에 실행합니다.

테스트 및 확인 (Linux VM의 추가 Port 오픈)

  1. Azure 포털에서 이전 단계에서 생성한 VM 환경으로 들어갑니다.
  2. Settings의 Networking메뉴를 선택하고, 이후 Add Inbound Port Rule을 선택합니다.
  3. Source Port range는 “*”, Destination Port는 “8080”, Source 와 Destination을 둘 다 Any로 선택하고, TCP에 대해서 “Allow”로써 추가합니다.
  4. 이후 TCP 8080 포트가 오픈 됩니다.
  5. 해당 VM의 public IP:8080 을 통해 Spring Boot App의 실행을 확인합니다.

※본 정보의 내용(첨부문서, 링크처 등을 포함)은 작성일 현재이며, 예고없이 변경될 수 있습니다.