Azure DevOps #1. Introduction

hyukjun·2022년 12월 11일
0

Azure DevOps

목록 보기
1/2
post-thumbnail

Azure DevOps

Azure DevOps Service는 CI/CD 플랫폼일 뿐아니라, Repos(Git) / Boards(프로젝트관리) 등 프로젝트에 필요한 거의 모든 툴을 제공해주는 DevOps 플랫폼 입니다.

주로 CI(Continuous Integration)와 CD(Continuous Delivery/Deployment) 를 위해 사용하며 YAML과 UI를 통해 빌드 및 배포 파이프라인을 설계할 수 있습니다.

Azure DevOps의 주요 기능 및 특징

1. Agents for Excuting Pipeline Job

빌드 파이프라인 실행 화면 예시

Azure DevOps Service에서 파이프라인을 실행해 주는 공간을 'Agent'라고 합니다. Agent는 Microsoft에서 임대해주는 가상의 서버로서, Microsoft에서 호스트하고 작업 완료시 삭제 됩니다. Agent는 가상머신과 컨테이너 모두 사용할 수 있으며, Linux,windows,macOS등의 OS를 지원 합니다.

필요하다면, Self Hosted Agent 기능을 통해 사용자가 소유한 서버에서 파이프라인을 실행하도록 설정 할 수 있습니다.

Azure 계정을 소유하고 지불 수단이 등록되어 있다면, Free tier의 1개의 무료 에이전트를 할당 받아 사용할 수 있습니다. (위와 같은 조건에도 Free tier가 아니라면, 별도 신청 절차를 거쳐 1개의 무료 에이전트를 사용할 수 있습니다.)

혹은 에이전트를 여러개 구매하여 여러개의 파이프라인을 동시에 실행할 수 도 있습니다.

Project Settings -> Pipelines -> Paralles jobs

2. Build Pipeline for Continuous Integration

빌드 파이피프라인은 YAML 스키마로 코드 베이스로 파이프라인을 작성할 수 있습니다. 이름에서 유추할 수 있듯이 애플리케이션 빌드 등 주로 CI로 사용합니다. 하지만, YAML 스키마에서 배포 작업까지 설계할 수 있기 때문에, 필요에 따라 빌드 부터 배포까지 진행되는 파이프라인으로 사용할 수도 있습니다.

또한, UI 어시스턴트의 도움을 받아 Azure Marketplace의 다양한 모듈을 사용할 수 있고, 손쉽게 값을 입력하여 코드로 생성할 수 있습니다.

YAML 스키마
빌드 파이프라인은 YAML 스키마를 통해 설계 합니다. Azure DevOps Service에선 Trigger, Variable, Stage와 같이 크게 3가지로 구성 됩니다.

  1. Trigger
trigger:
  branches:
    include: [ string ]
    exclude: [ string ]
  tags:
    include: [ string ]
    exclude: [ string ]
  paths:
    include: [ string ]
    exclude: [ string ]

빌드를 실행하는 조건 역할을 합니다. 즉, 트리거에서 지정한 특정 조건에 해당될때 파이프라인은 실행됩니다.

트리거에 사용할 수 있는 조건에는 저장소의 branch, tag, path를 사용하여 각각 include 및 exclude 조건을 사용할 수 있습니다. 지정한 조건에 맞는 이벤트가 발생하면 파이프라인을 실행시킵니다. 보통 branches와 paths조합, 혹은 tags와 paths 조합을 사용합니다.

이 뿐만아니라, 배치성 작업은 스케쥴 조건을 통해 정해진 주기 마다 파이프라인을 실행할 수 있습니다.

trigger:
  schedules:
  - cron: string # "0 3 * * Sun-Thu" -> 분 시 일 월 요일 (UTC)
    displayName: string
    branches:
      include: [ string ] 
      exclude: [ string ] 
  1. Variables
variables: { string: string }
variables:
  - name: string
    value: string
  - group: string

파이프라인에 필요한 변수를 지정하는 방법은 YAML의 문법체계인 Hash(Key: Value) 혹은 List ([]) 등을 사용하여 선언 할 수 있으며, 파이프라인 YAML 코드에 직접 선언 하거나 UI를 통해 설정할 수 있습니다.

Pipeline -> Edit -> Variables

  1. Stage
stages:
  - stage: string # Stage Name
    jobs:
      - job: string # Job Name
        pool: 
          vmImage: string # OS Version
        steps:
          - task: string # refer to MS Module's version
            inputs: { string: string}
          - task: string # refer to MS Module's version
            inputs: { string: string}

본격적인 파이프라인 작업을 설계하는 장소입니다. 파이프라인의 가장 작은 작업 단위는 Task 이며, 계층 구조는 다음과 같습니다.

stages → n*stage → jobs → n*job → pool(agent) + steps → tasks

즉, job단위로 파이프라인을 실행할 Agent를 정하고, 그 안에 여러가지 Task를 구성할 수 있습니다. 이러한 job은 하나의 Stage에 속합니다. Stage 또한 여러개일 수 있으며, 하나의 YAML 스키마에서 Stages로 묶을수 있습니다.

또한, 각 스테이지는 서로 종속성과 조건도 설정할 수 있으며, 이러한 기능들을 통해 보다 섬세한 파이프라인을 설계 할 수 있습니다.

stages:
- stage: string
  dependsOn: string
  condition: string

YAML 스키마 전체 예시

        trigger:
          branches:
            include:
              - main
          paths:
            exclude:
              - README.md

        variables:
          buildConfiguration: 'Release'
          dockerImageTag: 0.3
          repository: 'app-flask'

        stages:
          - stage: Build
            jobs:
              - job:
                pool:
                  vmImage: ubuntu-latest
                steps:
                  - task: Docker@2
                    displayName: Docker Build and Push
                    inputs:
                      command: 'buildAndPush'
                      Dockerfile: '**/Dockerfile'

빌드파이프라인 실행

빌드 파이프라인을 실행하면 아래와 같이 전체 Task의 진행과정을 실시간으로 확인하고, 진행 로그를 남길 수 있습니다. 만약 Java Spring 애플리케이션을 빌드 했다면, 빌드 후 만들어진 war 파일은 빌드 파이프라인의 Artifact로 저장됩니다.

이 다음 소개햐는 릴리즈 파이프라인에서 해당 Build ID를 참조하여 빌드된 war 파일을 배포(릴리즈 파이프라인)에 사용할 수 있습니다.

사용자가 지정한 Task와는 별도로 시스템에 내장된 Task가 존재합니다. 첫번째로 'Initialize job' Task에서 Agent를 호스트 하고, 파이프라인에 필요한 변수 로드 및 각 Task 모듈을 다운로드 합니다, 그 다음 Task인 'Checkout-'에서는 소스 리포지토리(git)를 Agent(가상머신)의 Working Directory에 Checkout 합니다.

3. Release Pipeline for Continuous Deployment

릴리즈 파이프라인은 보통 배포를 위한 파이프라인으로 사용합니다. 특징은 파이프라인을 UI를 통해 설계하기 때문에 보다 직관적이고, 코드에 익숙치 않은 사용자에게도 편리한 환경을 제공합니다. UI로 설계 되지만 전체적인 파이프라인 계층 구조는 앞서 YAML로 설계한 빌드 파이프라인과 동일 합니다.

일반적으로 빌드 파이프라인의 완료 이벤트를 수신하여 지속적인 배포를 수행하기 때문에, Artifacts 항목에는 빌드 파이프라인을 지정합니다. 이를 통해 빌드 파이프라인의 성공 이벤트 및 빌드된 애플리케이션 아티팩트를 전달 받고 릴리즈 파이프라인을 자동으로 실행하도록 구성할 수 있습니다. (아티팩트 소스는 복수개가 될 수 있습니다.)

또한, 각 스테이지마다 승인 절차 및 배포 전/후 자동 테스트 작업을 추가할 수 있습니다.

릴리즈 파이프라인 실행
릴리즈 파이프라인은 아래 처럼 디렉터리 형태로 관리 됩니다. 파이프라인의 실행 이력을 들어가 보면 앞서 빌드 파이프라인으로 만들어진 war 파일을 릴리즈 아티팩트로서 다운로드 받고 배포에 사용한 것을 확인 할 수 있습니다.

4. Boards / Repos / Artifacts

이외에도 프로젝트를 위한 일정/업무 관리 툴인 Boards, 소스 형상관리를 위한 Repos(git), 애플리케이션 및 라이브러리를 위한 저장소인 Artifacts등 다양한 툴을 한번에 제공해 줍니다.
(Repos를 꼭 사용하지 않더라도 외부 저장소(Github, Bitbucket 등 다양한 소스 형상관리 툴을 연결하여 사용할 수도 있습니다.)

마치며

Azure DevOps Service는 프로젝트 개발 부터 배포까지 모든 작업을 하나의 공간에서 수행할 수 있도록 해주는 종합 데브옵스 플랫폼이라고 할 수 있습니다. 사용자에게 매우 편리한 UI를 제공하기 때문에 초보자도 쉽게 사용할 수 있다고 생각합니다.

다음 글에서는 Azure DevOps을 사용해 간단한 튜토리얼을 소개하겠습니다.

감사합니다.

profile
slow and steady

0개의 댓글