×
Community Blog Alibaba Cloud DevOps Flow를 이용하여 Alibaba Cloud에 최적화된 DevOps(CI/CD) 환경 구현하기

Alibaba Cloud DevOps Flow를 이용하여 Alibaba Cloud에 최적화된 DevOps(CI/CD) 환경 구현하기

오늘 이 글에서 우리는 Alibaba Cloud의 DevOps 플랫폼인 FLOW 에 대해서 알아보도록 하겠다.

By Jongjin Lim, Solution Architect at Alibaba Cloud

1. 배경 설명

비즈니스가 다양한 형태로 확장되면서 우리의 IT 환경의 다양성도 증가하고 있다.

같은 기업, 같은 팀에서 조차 업무의 특성에 따라 서로 다른 플랫폼, 툴 심지어는 클라우드 환경마저 다른 환경을 사용하고 있다.

하지만 대부분의 기업은 Legacy한 개발 환경과 프로세스를 그대로 유지하고 있다. 이 두가지의 간극으로 기업들은 큰 투자로 도입한 혁신적인 플랫폼을 효율적으로 사용하지 못하고 있다.

이러한 문제를 해결할 수 있는 프로세스의 혁신이 바로 DevOps이다. DevOps의 핵심 3요소(People, Process, Technology) 중 Technology(기술)의 영역, 즉 CI/CD의 구현이 필수가 되었다.

오늘 이 글에서 우리는 Alibaba Cloud의 DevOps 플랫폼인 FLOW 에 대해서 알아보도록 하겠다.

2. Solution Overview

0

Alibaba Cloud DevOps Flow (이하 Flow)는 Alibaba Cloud에서 제공하는 DevOps SaaS 플랫폼이다. 비슷한 서비스를 제공하는 오픈소스로는 Jenkins, Bamboo, ArgoCD 등이 있다.

기본적으로, 모든 CI/CD Step을 아래 캡쳐와 같이 GUI로 제공하고 있으며 특정한 스크립트 언어, 구체적인 사용법을 몰라도 쉽게 접근하고 사용할 수 있다.

전통적인 CI/CD툴들은 대부분 특정한 script 언어를 사용하며 구성이 어렵다.

1

3. Solution 기능 설명

3.1 용어

  • Source: Git repository 같은 Delivery 도구
  • Phase: Pipeline에서 실행되는 Task의 모음, 자동 혹은 수동으로 실행 가능, 2개의 phase를 연속적으로 실행 가능
  • Task: 실제 action, 2개의 task는 동시에 실행되거나 연속적으로 실행할 수 있음 / 보통 Task는 code scanning, unit test, building, deployment, code merging, manual approval 등을 포함 / Agent task, agent less task 두 종류가 존재
  • Step: Flow의 핵심 기본 기능으로 실제 Operation이 포함

3.2 장점

  • Easy Deployment: workspace를 만들고 몇 분 후에 바로 pipeline 사용 가능
  • Simple management: GUI로 간편하게 파이프라인 관리
  • Tenant Isolation: Multiple workspace를 만들어서 서로간의 격리 가능
  • High stability and reliability: Multiple zone에 배포 가능
  • Various supported pipeline sources: Github, Gitlab 등 DSCM과의 통합
  • Guaranteed business delivery with high quality: Code scanning, security scanning, Unit test 등 기업 환경에 맞는 기능 제공

3.3 기능

3.3.1 Pipeline Source

Pipeline을 시작하기 위한 Source Code Repository를 정의한다. 기본 설정으로 GitHub과 General Git를 사용 가능하다

GitHub은 사용자의 계정을 연결하여 Repository에 대한 Credential을 처리할 수 있으나, General Git은 옵션에서 Key 등을 설정해야 한다

2

3.3.2 Tasks

Task는 Alibaba Cloud에서 제공하는 각 CI/CD Step에서의 필요한 Action을 정의한다.

Alibaba Cloud에서는 다양한 CI/CD Task를 Pre-define하여 제공하며 아래 대표적인 Task 들에 대해 설명을 하겠다.

3.3.2.1 Java Code Scan

Java Source에 대한 Code scanning을 수행한다. Alibaba Cloud에서 제공하는 Script를 이용하여 각 코드에 있는 위험도 높은 code를 분석하여 리포트를 제공한다.

3

  • Task Name: 모든 Task에 포함되며 Task의 subject를 정의
  • Build Cluster: Cluster가 포함된 region을 정의
  • Step Name: Task에 포함될 Step의 subject를 정의
  • JDK Version: JDK 버전 선택
  • Maven Version: Maven Version 선택
  • Enable Incremental Scan: Incremental Scanning 정책 사용
  • Use Custom Rule: 사용자의 code repository에 있는 p3c rule file 사용
  • Sub Folder: Repository에서 검증할 directory를 정할 때 사용, 빈칸일 경우 root directory 사용
  • Excluded Folder: Scanning에 포함하지 않을 directory를 정의

4

파이프라인이 수행된 후 Code Scanning 보고서를 참조할 수 있다. 어떤 소스코드에서 이슈가 있는지 상세히 파악할 수 있다

3.3.2.2 Maven Unit Test

Maven을 이용한 Unit Test진행을 위해 옵션을 설정한다

5

  • JDK Version / Maven Version: JDK와 Maven의 버전을 선택
  • Test Command: Test에 사용할 Command를 정의, 기본적으로 surefice를 이용한 리포팅을 제공
  • Test Report Folder: Test리포트를 저장할 폴더 정의
  • Test Report Entry File: Test report entry file을 정의

3.3.2.3 Java Build

Java 소스코드에 대한 Build를 수행하는 Task이며, 기본 셋팅에서는 Maven build를 사용한다. Flow에서 제공하는 Java Build를 사용하면 개발 배포시 별도의 빌드 서버를 이용하지 않고 쉽게 빌드를 수행할 수 있다.

6

  • JDK Version: Java 빌드에 사용할 JDK 버전을 정의
  • Maven Version: Maven 버전을 정의
  • Build Command: 빌드를 수행할 때 입력할 커맨드를 커스터마이징, mvn 옵션 등을 정의하는 데 사용

3.3.2.4 Java Image Build

주로 컨테이너 배포를 할 때 사용된다. 보통 로컬 환경에서 컨테이너 배포할 때, 개발자는 Base Image를 registry에서 pull한 후 자바 빌드를 수행한다. 그 이후 빌드한 라이브러리와 Base Image를 병합하여 실제 운영할 이미지를 만든다.

Java Image Build를 사용하게 되면 사용자는 별도의 빌드 서버나 Docker build를 수행하지 않아도 쉽게 소스코드를 컨테이너 이미지로 만들 수 있다.

Configuration에 포함되는 Java Build는 위의 내용과 같다

7

먼저 Docker build를 위한 Alibaba Cloud의 Container Registry 서비스인 ACR 빌드의 옵션을 정의한다.

  • Choose Service Connection: ACR 서비스와 credential을 연결할 서비스 선택
  • Region: ACR을 사용할 리전 선택
  • Repository: 기 배포된 ACR의 Repo 선택, 생성이 되어있지 않다면 +로 생성 가능
  • Dockerfile Path: 이미지를 배포할 때 참조할 Dockerfile Path 입력
  • Context Path: Docker build command입력할 때의 Context path 입력
  • No Cache: 만약 체크된다면 docker build의 –no-cache=true 옵션 사용

3.3.2.5 ECS Deployment

배포할 때 사용할 ECS에 대해서 정의한다. 설정에 따라 다수의 ECS에 배포할 수 있다.

8

  • Artifact: Artifact Name 정의
  • Deployment Group: Deployment Group 정의
  • Download Path: Host에서 다운로드 할 Artifact Path를 정의, 빈칸은 Download 없음을 표시
  • Execute User: ECS에서 실행될 User 정의
  • Deployment Script: ECS/VM을 배포할 때 사용할 Script
  • Suspend Strategy: Suspend First Batch, Suspend Per Batch 또는 Without Suspension과 같은 호스트 그룹에서 사용되는 일시 중단 방법에 대한 선택. Suspend First Batch를 권고
  • Batches: 호스트 그룹의 시스템을 나눌 배치 수 정의

3.3.2.6 Kubectl Apply

배포에 Kubernetes를 이용할 경우에 Kubectl Apply task를 적용할 수 있다. 배포할 때 단일 컨테이너를 사용할 수도 있지만 요구사항에 따라 Blue/Green이나 Canary 배포를 이용할 수 있다.

9

  • Service Connection: 배포될 Kubernetes와 연결될 Service Connection 선택
  • Kubectl Version: 배포될 Kubernetes 버전 선택
  • Namespace: 컨테이너가 배포될 Namespace 정의
  • YAML PATH: 배포시 사용할 YAML file path를 정의, 주로 manifests file을 사용
  • Use Replace Mode: 'kubectl apply' 대신 'kubectl install'을 사용하여 대상 리소스를 생성할 때 대체 모드 사용
  • Skip TLS Validation: Kubernetes 구성에서 'insecure-skip-tls-verify'가 true로 구성된 경우 사용

3.3.2.7 Manual Approval

배포시 특정 작업에 대한 승인 절차가 필요할 때 사용한다. 기본적으로 FLOW에 등록된 Account에서 승인을 처리할 수 있다.

10

  • Validation Method: 승인할 User의 그룹을 선택 (Anyone / All)
  • Validator Type: 승인권자의 Type을 선택 (User / Tenant Role)

그 밖에 Blue-green deployment, Node.js build / test, Execute command, 커스텀 이미지 레포토리 빌드 등의 Task를 이용할 수 있다.

3.3.3 추가 기능

FLOW의 콘솔에서는 사용자의 파이프라인 관리를 위해 다양한 추가 기능을 제공한다.

3.3.3.1 WebHook Trigger

사용자는 WebHook Trigger를 이용해 GIT repository와 CI를 긴밀하게 연결할 수 있다. 메뉴에서 표시되는 API를 GIT의 Webhook에 추가해주면 쉽게 사용할 수 있다.

11

3.3.3.2 Scheduled Trigger

주로 PM 같은 정기적인 작업시 파이프라인 실행을 자동화하는 기능이다.

12

3.3.3.3 Variable

파이프라인 환경에서 변수로 사용할 Object를 정의한다.

13

3.3.3.4 Cache

파이프라인 배포시 속도를 가속화하기 위해 캐싱 기능을 이용한다.

14

4. 테스트 배경 및 요구사항

Alibaba Cloud DevOps FLOW 에 접속하면 Alibaba Cloud International 계정으로 Workspace를 만들 수 있다. 이를 이용해 쉽게 파이프라인 환경을 구성할 수 있다.

5번 항목에서부터, 아래의 특정 조건을 가진 고객이 있다고 가정하고 GitHub에 저장된 소스코드를 이용하여 ECS Single Instance 배포를 하는 파이프라인을 만드는 가이드를 확인할 수 있다.

4.1 배경

예시 환경에서는 아래와 같은 배경을 가지고 있다.

  • Code development in Java
  • Delivery in the JAR or WAR format
  • Execution on ECS or a self-managed host

4.2 요구사항

예시 환경 구현에 필요한 기술적 요구사항은 다음과 같다.

  • Perform some quality checks on the source code such as unit testing and code scanning.
  • Build source code into a deliverable such as a JAR or WAR file.
  • Publish a deliverable to an ECS virtual host

5. Main Steps

본 예시에서는 크게 4단계의 파이프라인을 구성할 것이다.

GitHub Repository연결 > Java Code Scan / Maven Unit Test > Java Build & Archive > ECS 배포 순으로 구성하는 방법을 확인할 수 있다.

15

예시 소스코드는 https://github.com/Jason-Jongjin-Lim/FLOWtest 에서 Fork할 수 있다.

5.1 FLOW 접속 및 Create Pipeline

FLOW Console에 접속하고 Workspace를 만들면 아래와 같은 화면을 확인할 수 있다. 여기서 우리는 파이프라인을 구성하기 위해 Create Pipeline을 선택한다.

16

5.2 Template 확인 및 선택

Create Template을 선택하면 기 정의되어있는 Template list를 확인할 수 있다. 우리는 여기서 첫번째 Template을 이용하여 설정할 것이다.

17

5.3 Add Pipeline Source

본 가이드에서는 Pipeline Source로 GitHub을 사용할 것이다. 먼저, FLOW에 GitHub 계정을 Associate한 후 아래 가이드를 따라 설정할 수 있다.

18

  • Namespace: GitHub에서 사용할 Namespace 선택
  • Repository: Namespace에서 배포할 소스코드가 있는 Repository 선택
  • Default Branch: 배포할 Branch 선택
  • Clone Submodule / Custom Clone Depth: False 선택

5.4 Source Trigger 추가

Enable Code Source Trigger 옵션을 켜면 Git 프로세스에서 제공하는 Webhook 기능을 이용하여 파이프라인을 자동으로 시작할 수 있다. 본 옵션 설정 이후에 개발자는 Commit/Push의 동작 만으로 파이프라인을 실행한다.

19

  • 기능을 Enable하고 Webhook API를 복사

20

  • 복사한 API를 GitHub Repository > Settings > Webhook > Payload URL에 입력

5.5 Java Code Scan 설정

샘플 자바코드의 잠재적 이슈를 확인하기 위한 스캐닝 정책을 설정한다.

21

본 예시에서는 기본 옵션을 사용한다. 특별히 사용하는 JDK, Maven 버전이 있으면 지정할 수 있다

5.6 Maven Unit Test 설정

Maven Unit Test를 위해 옵션을 지정한다. 본 시나리오에서 사용하는 예제로 surefire를 이용한 리포팅 기능을 사용할 수 있다.

22

본 예시에서는 기본 옵션을 사용한다.

5.7 Build, Archive task 설정

Java build를 위해 각 옵션들을 지정한다.

23

  • 나머지는 기본 옵션을 사용하며 Archive Paths에 deploy.sh를 추가해준다. 이 스크립트는 배포할 때 아카이브로 압축되어 ECS에 저장된다.

5.8 ECS Deployment 설정

ECS로 배포할 때 사용할 옵션을 지정한다.

24

  • 배포시 사용할 ECS의 그룹이 필요하다. 이를 위해 Create Deployment Group을 클릭한다.

25

  • 팝업창에서 Service Authorization을 생성하고 배포할 Region을 선택한다.
  • 배포 서버로 사용될 Instance를 선택한다. 다수의 인스턴스도 선택이 가능하다.

26

  • 다음 Step에서는 선택한 Server Group이 사용될 Group Environment와 Tag를 지정한다. 본 환경에서는 Daily Environment를 사용할 것이다

27

  • Deployment Script에 Archive로 저장한 package의 압축을 해제하고 Deploy.sh를 실행하는 스크립트를 심어준다.
mkdir -p /home/admin/application/
tar zxvf /home/admin/app/package.tgz -C /home/admin/application/
sh /home/admin/application/deploy.sh restart

5.9 Save and Run

파이프라인 작성이 완료되면 FLOW Console 우측 상단의 Save and Run을 수행한다.

28

5.10 진행 확인

파이프라인을 실행한 후 FLOW Console의 Dashboard에서 파이프라인 진행 상황에 대해 여러가지 정보를 확인할 수 있다.

29

  • 좌측 패널에서 파이프라인을 실행한 User, 실행 시간, Source, 변수 등에 대한 기본 정보 확인 가능
  • Pipeline 패널에서 각 Step에 대한 로그, 리포트 등 세부 정보 확인 가능

30

  • 각 Step을 클릭하면 세부 정보와 프로세스, Status를 확인 가능

31

  • Java Build Step에서 Log를 클릭하면 각 Build step의 Log 정보 확인 가능

32

  • 파이프라인이 종료되게 되면 상태창에 모두 Complete으로 표시

6. 트러블 슈팅

파이프라인을 진행하다 보면 다양한 Step에서 문제가 발생한다. 그 문제가 발생한 Step의 Detail page를 확인하면 상세 정보, Log, Retry, Skip 등의 트러블 슈팅을 할 수 있다.

33

또한 Running History에서 이전에 실행했던 파이프라인의 상태를 확인할 수 있다.

34

7. 결론

지금까지 Alibaba Cloud DevOps FLOW에 대해 알아보았다.

물론 현재 많이 쓰이고 있는 Pipeline 툴인 Jenkins, Bamboo 등에 비해서 Plug-in 등이 많이 지원되지 않아 복잡한 DevOps 환경을 사용하는 기업 사용자에게는 조금 가벼워 보일 수 있다.

하지만 Alibaba Cloud를 사용하는 고객 중 Java나 Node.js 기반의 심플한 서비스를 운영하는 고객이라면 소스코드 개발 후 Commit/Push만으로 빌드, 테스트, 승인, 인스턴스와 컨테이너로 배포 등을 자동화하여 할 수 있으므로 무거운 Pipeline 툴보다 더 적합한 솔루션이라고 할 수 있다.

0 1 0
Share on

JJ Lim

21 posts | 4 followers

You may also like

Comments