By Jongjin Lim, Solution Architect at Alibaba Cloud
비즈니스가 다양한 형태로 확장되면서 우리의 IT 환경의 다양성도 증가하고 있다.
같은 기업, 같은 팀에서 조차 업무의 특성에 따라 서로 다른 플랫폼, 툴 심지어는 클라우드 환경마저 다른 환경을 사용하고 있다.
하지만 대부분의 기업은 Legacy한 개발 환경과 프로세스를 그대로 유지하고 있다. 이 두가지의 간극으로 기업들은 큰 투자로 도입한 혁신적인 플랫폼을 효율적으로 사용하지 못하고 있다.
이러한 문제를 해결할 수 있는 프로세스의 혁신이 바로 DevOps이다. DevOps의 핵심 3요소(People, Process, Technology) 중 Technology(기술)의 영역, 즉 CI/CD의 구현이 필수가 되었다.
오늘 이 글에서 우리는 Alibaba Cloud의 DevOps 플랫폼인 FLOW 에 대해서 알아보도록 하겠다.
Alibaba Cloud DevOps Flow (이하 Flow)는 Alibaba Cloud에서 제공하는 DevOps SaaS 플랫폼이다. 비슷한 서비스를 제공하는 오픈소스로는 Jenkins, Bamboo, ArgoCD 등이 있다.
기본적으로, 모든 CI/CD Step을 아래 캡쳐와 같이 GUI로 제공하고 있으며 특정한 스크립트 언어, 구체적인 사용법을 몰라도 쉽게 접근하고 사용할 수 있다.
전통적인 CI/CD툴들은 대부분 특정한 script 언어를 사용하며 구성이 어렵다.
Pipeline을 시작하기 위한 Source Code Repository를 정의한다. 기본 설정으로 GitHub과 General Git를 사용 가능하다
GitHub은 사용자의 계정을 연결하여 Repository에 대한 Credential을 처리할 수 있으나, General Git은 옵션에서 Key 등을 설정해야 한다
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를 분석하여 리포트를 제공한다.
파이프라인이 수행된 후 Code Scanning 보고서를 참조할 수 있다. 어떤 소스코드에서 이슈가 있는지 상세히 파악할 수 있다
3.3.2.2 Maven Unit Test
Maven을 이용한 Unit Test진행을 위해 옵션을 설정한다
3.3.2.3 Java Build
Java 소스코드에 대한 Build를 수행하는 Task이며, 기본 셋팅에서는 Maven build를 사용한다. Flow에서 제공하는 Java Build를 사용하면 개발 배포시 별도의 빌드 서버를 이용하지 않고 쉽게 빌드를 수행할 수 있다.
3.3.2.4 Java Image Build
주로 컨테이너 배포를 할 때 사용된다. 보통 로컬 환경에서 컨테이너 배포할 때, 개발자는 Base Image를 registry에서 pull한 후 자바 빌드를 수행한다. 그 이후 빌드한 라이브러리와 Base Image를 병합하여 실제 운영할 이미지를 만든다.
Java Image Build를 사용하게 되면 사용자는 별도의 빌드 서버나 Docker build를 수행하지 않아도 쉽게 소스코드를 컨테이너 이미지로 만들 수 있다.
Configuration에 포함되는 Java Build는 위의 내용과 같다
먼저 Docker build를 위한 Alibaba Cloud의 Container Registry 서비스인 ACR 빌드의 옵션을 정의한다.
3.3.2.5 ECS Deployment
배포할 때 사용할 ECS에 대해서 정의한다. 설정에 따라 다수의 ECS에 배포할 수 있다.
3.3.2.6 Kubectl Apply
배포에 Kubernetes를 이용할 경우에 Kubectl Apply task를 적용할 수 있다. 배포할 때 단일 컨테이너를 사용할 수도 있지만 요구사항에 따라 Blue/Green이나 Canary 배포를 이용할 수 있다.
3.3.2.7 Manual Approval
배포시 특정 작업에 대한 승인 절차가 필요할 때 사용한다. 기본적으로 FLOW에 등록된 Account에서 승인을 처리할 수 있다.
그 밖에 Blue-green deployment, Node.js build / test, Execute command, 커스텀 이미지 레포토리 빌드 등의 Task를 이용할 수 있다.
FLOW의 콘솔에서는 사용자의 파이프라인 관리를 위해 다양한 추가 기능을 제공한다.
3.3.3.1 WebHook Trigger
사용자는 WebHook Trigger를 이용해 GIT repository와 CI를 긴밀하게 연결할 수 있다. 메뉴에서 표시되는 API를 GIT의 Webhook에 추가해주면 쉽게 사용할 수 있다.
3.3.3.2 Scheduled Trigger
주로 PM 같은 정기적인 작업시 파이프라인 실행을 자동화하는 기능이다.
3.3.3.3 Variable
파이프라인 환경에서 변수로 사용할 Object를 정의한다.
3.3.3.4 Cache
파이프라인 배포시 속도를 가속화하기 위해 캐싱 기능을 이용한다.
Alibaba Cloud DevOps FLOW 에 접속하면 Alibaba Cloud International 계정으로 Workspace를 만들 수 있다. 이를 이용해 쉽게 파이프라인 환경을 구성할 수 있다.
5번 항목에서부터, 아래의 특정 조건을 가진 고객이 있다고 가정하고 GitHub에 저장된 소스코드를 이용하여 ECS Single Instance 배포를 하는 파이프라인을 만드는 가이드를 확인할 수 있다.
예시 환경에서는 아래와 같은 배경을 가지고 있다.
예시 환경 구현에 필요한 기술적 요구사항은 다음과 같다.
본 예시에서는 크게 4단계의 파이프라인을 구성할 것이다.
GitHub Repository연결 > Java Code Scan / Maven Unit Test > Java Build & Archive > ECS 배포 순으로 구성하는 방법을 확인할 수 있다.
예시 소스코드는 https://github.com/Jason-Jongjin-Lim/FLOWtest 에서 Fork할 수 있다.
FLOW Console에 접속하고 Workspace를 만들면 아래와 같은 화면을 확인할 수 있다. 여기서 우리는 파이프라인을 구성하기 위해 Create Pipeline을 선택한다.
Create Template을 선택하면 기 정의되어있는 Template list를 확인할 수 있다. 우리는 여기서 첫번째 Template을 이용하여 설정할 것이다.
본 가이드에서는 Pipeline Source로 GitHub을 사용할 것이다. 먼저, FLOW에 GitHub 계정을 Associate한 후 아래 가이드를 따라 설정할 수 있다.
Enable Code Source Trigger 옵션을 켜면 Git 프로세스에서 제공하는 Webhook 기능을 이용하여 파이프라인을 자동으로 시작할 수 있다. 본 옵션 설정 이후에 개발자는 Commit/Push의 동작 만으로 파이프라인을 실행한다.
샘플 자바코드의 잠재적 이슈를 확인하기 위한 스캐닝 정책을 설정한다.
본 예시에서는 기본 옵션을 사용한다. 특별히 사용하는 JDK, Maven 버전이 있으면 지정할 수 있다
Maven Unit Test를 위해 옵션을 지정한다. 본 시나리오에서 사용하는 예제로 surefire를 이용한 리포팅 기능을 사용할 수 있다.
본 예시에서는 기본 옵션을 사용한다.
Java build를 위해 각 옵션들을 지정한다.
ECS로 배포할 때 사용할 옵션을 지정한다.
mkdir -p /home/admin/application/
tar zxvf /home/admin/app/package.tgz -C /home/admin/application/
sh /home/admin/application/deploy.sh restart
파이프라인 작성이 완료되면 FLOW Console 우측 상단의 Save and Run을 수행한다.
파이프라인을 실행한 후 FLOW Console의 Dashboard에서 파이프라인 진행 상황에 대해 여러가지 정보를 확인할 수 있다.
파이프라인을 진행하다 보면 다양한 Step에서 문제가 발생한다. 그 문제가 발생한 Step의 Detail page를 확인하면 상세 정보, Log, Retry, Skip 등의 트러블 슈팅을 할 수 있다.
또한 Running History에서 이전에 실행했던 파이프라인의 상태를 확인할 수 있다.
지금까지 Alibaba Cloud DevOps FLOW에 대해 알아보았다.
물론 현재 많이 쓰이고 있는 Pipeline 툴인 Jenkins, Bamboo 등에 비해서 Plug-in 등이 많이 지원되지 않아 복잡한 DevOps 환경을 사용하는 기업 사용자에게는 조금 가벼워 보일 수 있다.
하지만 Alibaba Cloud를 사용하는 고객 중 Java나 Node.js 기반의 심플한 서비스를 운영하는 고객이라면 소스코드 개발 후 Commit/Push만으로 빌드, 테스트, 승인, 인스턴스와 컨테이너로 배포 등을 자동화하여 할 수 있으므로 무거운 Pipeline 툴보다 더 적합한 솔루션이라고 할 수 있다.
Implementing an Optimized DevOps (CI/CD) Environment Using Alibaba Cloud DevOps Flow
JJ Lim - December 3, 2021
JJ Lim - September 14, 2021
James Lee - October 11, 2023
JJ Lim - December 31, 2021
Haemi Kim - September 15, 2021
Regional Content Hub - April 15, 2024
An enterprise-level continuous delivery tool.
Learn MoreAccelerate software development and delivery by integrating DevOps with the cloud
Learn MoreData Integration is an all-in-one data synchronization platform. The platform supports online real-time and offline data exchange between all data sources, networks, and locations.
Learn MoreHighly reliable and secure deployment solutions for enterprises to fully experience the unique benefits of the hybrid cloud
Learn MoreMore Posts by JJ Lim