다음은 Azure DevOps Pipeline을 이용하여 Spring Boot App을 Linux VM에 배포하는 시나리오의 예제입니다. Linux VM은 Azure DevOps의 Environments에 등록하여 구성합니다.
Azure 환경에서 Linux VM 생성
- Azure 포털에 로그온 합니다.
- 좌측 메뉴에서 Create a resource에서 Virtual Machine을 생성합니다.
- Resource Group, Region그리고, Virtual Machine Name을 입력합니다.
- Image는 Ubuntu Server 18.04 LTS를 선택합니다.
- Inbound port rules에서 SSH(22) 포트를 오픈합니다.
- Review+Create를 통해 Linux VM을 생성합니다.
- 생성시에 SSH key (.pem 파일)을 download 하는 데, 적당한 local folder에 저장합니다. 해당 키를 가지고, 해당 VM에 SSH로 접근할 수 있습니다.
Azure DevOps Repo의 구성
- Azure DevOps 포털에 로그온 합니다.
- New Project를 선택하여 새로운 Project를 생성합니다.
- 생성된 Project로 들어가서 좌측의 Repos메뉴를 선택합니다.
- 이후 Import a Repository 부분에서 사용하고자 하는 Spring Boot 예제를 import 하여 구성합니다. (예, https://github.com/spring-guides/gs-spring-boot.git )
Azure DevOps의 Environments에 Linux VM 추가
- Azure DevOps 포털에 로그온 합니다.
- 기 생성된 Project의 좌측 메뉴에서 Pipelines 하위의 Environments를 선택합니다.
- New environment를 선택합니다.
- New environment에서 Name(예, “linuxVM”)을 입력하여 Resource는 Virtual Machines를 선택합니다.
- Virtual machine resource에서 Provider는 Generic provider를 선택하고, OS는 Linux를 선택한 후 Registration script를 copy 합니다.
- 앞서서 생성한 Linux VM에 SSH로 로그온 합니다.
- 5번에서 copy 한 script를 paste 하여 실행합니다.
- 정상적으로 script가 실행이 되었다면, Azure DevOps Environments에 4번에서 입력한 Name (예, “linuxVM”)으로 등록이 됩니다.
- 추가적으로 SSH로 VM에 로그온 된 상태에서 “/lib/artifacts/” 폴더를 생성합니다. (해당 폴더는 Azure Pipeline을 통해서 배포된 Artifacts (jar 파일)를 copy 할 대상 폴더로 사용할 예정입니다.)
- Spring Boot App실행을 위해 Java Runtime Environment(JRE)를 설치합니다.
1
sudo apt-get install -y default-jre
Linux VM에서 추가 Port 오픈
- Azure 포털에서 이전 단계에서 생성한 VM 환경으로 들어갑니다.
- Settings의 Networking메뉴를 선택하고, 이후 Add Inbound Port Rule을 선택합니다.
- Source Port range는 “*”, Destination Port는 “8080”, Source 와 Destination을 둘 다 Any로 선택하고, TCP에 대해서 “Allow”로써 추가합니다.
- 이후 TCP 8080 포트가 오픈 됩니다.
Azure Pipeline의 구성
- Environments에 Linux VM이 추가가 되었다면 다시 pipelines에서 New Pipeline을 선택합니다.
- Azure Repos Git을 선택하여 이전 단계에서 구성한 Repo를 선택합니다.
- Configure your pipeline 단계에서는 Repo에 구성된 소스를 컴파일하기 위해 Maven (build your java project and run tests with Apache Maven)을 선택합니다.
- 프로젝트 내에 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43trigger:
- main
pool:
vmImage: ubuntu-latest
stages:
- stage: Build
displayName: Build Stage
jobs:
- job: Build
displayName: Build Maven Project
steps:
- task: Maven@3
displayName: 'Maven Package'
inputs:
mavenPomFile: 'complete/pom.xml'
- task: CopyFiles@2
displayName: 'Copy Files to artifact staging directory'
inputs:
SourceFolder: '$(System.DefaultWorkingDirectory)'
Contents: '**/target/*.?(war|jar)'
TargetFolder: $(Build.ArtifactStagingDirectory)
- upload: $(Build.ArtifactStagingDirectory)
artifact: drop
- stage: deploy
jobs:
- deployment: DeployWeb
displayName: deploy Web App
pool:
vmImage: 'Ubuntu-latest'
# creates an environment if it doesn't exist
environment:
name: 'linuxVM'
resourceType: VirtualMachine
strategy:
runOnce:
deploy:
steps:
- script: |
sudo cp $(Pipeline.Workspace)/drop/**/target/*.jar /lib/artifacts/
sudo java -jar /lib/artifacts/*.jar >/dev/null 2>&1 & - Run 합니다.
- 정상적으로 Azure Pipeline이 처리가 되었다면, Linux VM의 Public Ip를 통해 실행 중인 Spring Boot App을 접근할 수 있습니다.
※본 정보의 내용(첨부문서, 링크처 등을 포함)은 작성일 현재이며, 예고없이 변경될 수 있습니다.