Azure DevOps를 이용하여 Spring Boot 앱을 Linux VM에 배포하기

Last Update: 공유

다음은 Azure DevOps Pipeline을 이용하여 Spring Boot App을 Linux VM에 배포하는 시나리오의 예제입니다. Linux VM은 Azure DevOps의 Environments에 등록하여 구성합니다.

Azure 환경에서 Linux VM 생성

  1. Azure 포털에 로그온 합니다.
  2. 좌측 메뉴에서 Create a resource에서 Virtual Machine을 생성합니다.
  3. Resource Group, Region그리고, Virtual Machine Name을 입력합니다.
  4. Image는 Ubuntu Server 18.04 LTS를 선택합니다.
  5. Inbound port rules에서 SSH(22) 포트를 오픈합니다.
  6. Review+Create를 통해 Linux VM을 생성합니다.
  7. 생성시에 SSH key (.pem 파일)을 download 하는 데, 적당한 local folder에 저장합니다. 해당 키를 가지고, 해당 VM에 SSH로 접근할 수 있습니다.

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 DevOps의 Environments에 Linux VM 추가

  1. Azure DevOps 포털에 로그온 합니다.
  2. 기 생성된 Project의 좌측 메뉴에서 Pipelines 하위의 Environments를 선택합니다.
  3. New environment를 선택합니다.
  4. New environment에서 Name(예, “linuxVM”)을 입력하여 Resource는 Virtual Machines를 선택합니다.
  5. Virtual machine resource에서 Provider는 Generic provider를 선택하고, OS는 Linux를 선택한 후 Registration script를 copy 합니다.
  6. 앞서서 생성한 Linux VM에 SSH로 로그온 합니다.
  7. 5번에서 copy 한 script를 paste 하여 실행합니다.
  8. 정상적으로 script가 실행이 되었다면, Azure DevOps Environments에 4번에서 입력한 Name (예, “linuxVM”)으로 등록이 됩니다.
  9. 추가적으로 SSH로 VM에 로그온 된 상태에서 “/lib/artifacts/” 폴더를 생성합니다. (해당 폴더는 Azure Pipeline을 통해서 배포된 Artifacts (jar 파일)를 copy 할 대상 폴더로 사용할 예정입니다.)
  10. Spring Boot App실행을 위해 Java Runtime Environment(JRE)를 설치합니다.
    1
    sudo apt-get install -y default-jre

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 포트가 오픈 됩니다.

Azure Pipeline의 구성

  1. Environments에 Linux VM이 추가가 되었다면 다시 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    trigger:
    - 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 &
  5. Run 합니다.
  6. 정상적으로 Azure Pipeline이 처리가 되었다면, Linux VM의 Public Ip를 통해 실행 중인 Spring Boot App을 접근할 수 있습니다.

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