본문 바로가기

Cloud/Oracle Cloud Infrastructure

OCI를 이용한 쿠버네티스, Wercker 쉬운 샘플 - 6. Wercker를 이용한 어플리케이션 빌드

도커를 사용한 어플리케이션 개발은 크게 구현 단위테스트 어플리케이션 빌드 도커이미지 빌드 도커 레지스트리 등록에 이르는 과정을 반복하는 형태가 된다. 이러한 반복 과정을 수작업으로 진행하게 되면 실수가 발생하기 쉽고, 시간도 오래 걸릴 있기 때문에 CI/CD 서비스를 통해 과정들을 자동화를 하고 시간을 절약한다.

CI/CD(Continuous Integration/Continuous Delivery)에서 CI 소프트웨어 개발을 테스트 단계에서만 테스트를 하는 것이 아니라 일상적으로 빌드와 테스트를 수행하여 실제 동작을 확인하는 사이클을 수행하면서 소프트웨어의 품질을 관리하는 것을 말하며 지속적 통합이라고 한다. 일반적으로 CI 위한 전용 소프트웨어나 SaaS 이용하여 자동화한다.

CD CI 범위를 확장하여 통합 테스트를 위한 스테이징 환경에 배포, 그리고 정식 서비스 배포까지 자동화 도구를 사용하여 수행하는 것을 말하며 지속적 배포라고 한다. Blue/Green 배포, Canary 배포 등의 방법이 사용된다.

 

CI/CD 파이프라인(pipeline) 버전의 소프트웨어를 제공하기 위해 수행해야 일련의 단계로서 DevOps 또는 SRE (Site Reliability Engineering) 방식을 통해 효과적으로 소프트웨어를 제공하는 초점을 맞춘 방법이다. CI/CD 파이프라인은 모니터링 자동화를 통해서 특히 통합 테스트 단계뿐만 아니라 전달 배포에 있어서 어플리케이션 개발 프로세스를 개선한다. CI/CD 파이프라인의 단계를 수동으로 실행할 있지만, CI/CD 파이프라인의 진정한 가치는 자동화를 통해 드러난다. (참조. Red Hat Devops, What is CI/CD?)

CI/CD 파이프라인은 파이프라인 스테이지(pipeline stage)라고 하는 개별 타스크 묶음으로 이루어져있다. 아래는 일반적인 파이프라인으로 요건에 따라 고유 파이프라인을 구성할 수도 있다.

- 빌드(Build) - 어플리케이션을 컴파일하는 단계

- 테스트(Test) - 코드를 테스트하는 단계. 단계를 자동화하여 시간과 노력를 줄일 있다.

- 릴리스(Release) - 어플리케이션을 리포지토리에 제공하는 단계

- 배포(Deploy) - 코드를 운영환경에 배포하는 단계

- 검증 컴플라이언스(Validation & compliance) - 빌드 검증 단계는 해당 조직의 필요에 따라 결정

 

이번 테스트에서는 GitHub 샘플 어플리케이션 소스를 가지고 Oracle CI/CD 솔루션인 Wercker(Oracle 2017 인수) 어플리케이션을 만들고, 이를 도커 이미지로 OCI 레지스트리에 업로드한 다음, OKE 클러스터에 컨테이너로 이미지를 배포해 본다.

 

Wercker 대해 간략히 살펴보면 스텝(Step), 파이프라인(Pipeline), 워크플로우(Workflow) 구조로 어플리케이션을 빌드하고 배포한다. 리포지토리에서 가져온 소스를 Wercker 어플리케이션으로 만들고, 워크플로우로 실행한다. 워크플로우 안에는 빌드, 배포 등의 파이프라인으로 구성되면, 파이프라인에는 스텝으로 상세화되어 있어서 실행 상태를 확인할 있다.

참고 사이트: CI-CD simplified with Wercker + Kubernetes on Oracle Cloud Infrastructure

 

컴포넌트명 역할
Step 어플리케이션의 wercker.yml 파일에 정의된 특정 자동화 작업을 수행하기위한 Bash 스크립트 또는 컴파일된 바이너리. 수동으로 작성하거나 Steps Registry 통해 가져올 있음
Pipeline Wercker 핵심 기능. 스텝과 작업에 대한 환경을 정의. 테스트, 빌드 배포를 정의. 스텝의 집합이며 스텝 작업 결과에 따라 pass 또는 fail. 여러개 파이프라인을 동시에 실행하도록 설정할 있어서 테스트를 병렬화하여 개발 시간을 단축시킬 있다.
Workflow 파이프라인을 관리하기 위한 메커니즘. 워크플로우에서 소속 파이프라인을 직렬 또는 병렬로 연결하여 어플리케이션의 소스로부터 운영 배포까지 이르는 정교한 CI/CD 흐름을 만들 있다.

 

Wercker 외에도 현재 많이 사용되는 Jenkins 이용한 배포는 아래 샘플을 참조한다.

Build a Continuous Integration pipeline using GitHub, Docker and Jenkins on Oracle Cloud Infrastructure

Wercker GitHub 통합되어 있기 때문에 GitHub에서 새로운 코드를 작성이나 브랜치, 마스터에 대한 변경이 발생하여 커밋을 했을 , Wercker 이를 반영하여 컨테이너 이미지를 자동으로 빌드 있다.

마스터 커밋의 경우 Wercker 파이프 라인을 실행하고 이미지를 빌드하고 이미지를 OCIR 푸시 다음 컨테이너를 OKE 인스턴스에 배포하고 실행중인 컨테이너, 파드를 교체하여 어플리케이션을 업데이트한다.

 

테스트 수행 확인할 사항이 있다. Wercker에서 OCI 레지스트리에 이미지를 Push 지원되는 Region 현재 Frankfurt(FRA),  IAD(Ashburn), LHR(London), PHX(Phoenix)이다. 아래 내용 참조.

The registry field must be set to https://<region-code>.ocir.io/v2/, where <region-code> is one of fra, iad, lhr, or phx.

Wercker Documentation > Administration > Containers > Pushing Images

따라서 네개 Region 하나의 OCI 레지스트리를 사용할 있어야 한다. OCI 콘솔의 Administration > Region Management에서 미리 해당 Region Subscribe해야 한다. (참고로 Region 사용 개수의 제약 때문에 Region Subscribe 불가한 경우, subscribed-region-count 대한 Service Limit 증가를 service limit increase 통해 요청해야 한다)

 

먼저 GitHub 로그인한 다음, 아래 샘플 어플리케이션 소스를 열고 오른쪽 상단의 Fork클릭한다.

샘플 어플리케이션은 Python 어플리케이션으로 HTTP GET 요청을 보낸 클라인언트의 IP 주소를 JSON 포맷으로 보여준다.

wercker-oke-demo

 

Wercker YML 포맷의 매니페스트 파일에 정의된 내용으로 도커 이미지를 빌드하고 배포하게된다.

자신의 GitHub 리포지토리로 Fork  어플리케이션에서 매니페스트 파일 wercker.yml 파일을 열어 본다.

 

Wercker 어플리케이션은 wercker.xml 파일에 기술된 내용으로 도커 이미지를 생성하게 되는데, 이때 Wercker 아래 환경 변수를 전달해야한다. wercker.xml 파일에는 변수만 설정하고, 실제 값은 이후 Wercker UI에서 지정할 것이다.

- DOCKER_USERNAME

- DOCKER_PASSWORD

- DOCKER_REPO

Wercker에서 도커 이미지를 빌드   마다 Git 커밋 값으로 이미지에 태그를 붙이게 된다. 이를 통해 어플리케이션의 변경 이력을 확인   있다.

 

 

이제 Wercker  콘솔에서 Wercker 어플리케이션을 만들 차례이다. 아래 Wercker  콘솔로 접속한다.

https://app.wercker.com/

Wercker  콘솔 접속 , 로그인을 하면 나타나는 화면에서 “Create your first application” 클릭한다.

 

Wercker 어플리케이션을 만드는 첫번째 단계로 SCM (Source Code Management) 선택하는 것이다. 유저에는 로그인한 Wercker 유저를, SCM GitHub 선택하고 하단의 “Next” 클릭한다. SCM 선택에서 GitHub 선택 , GitHub 최초 연결인 경우,

 

두번째 단계로 앞서 GitHub에서 Fork했던 어플리케이션 소스 “wercker-oke-demo” 선택 , 하단의 “Next” 클릭한다.

 

권고 사항인 디폴트 코드 체크아웃 옵션을 선택하고, 하단의 “Next” 클릭한다.

 

앞서 선택한 내용들을 확인하고, 하단의 “Create” 클릭한다.

 

Wercker 어플리케이션이 생성되었다.

 

이제 앞서 언급한 대로 wercker.xml 파일에 정의된 변수에 대한 환경 변수 값을 설정하여 Wercker 전달할 것이다. 그리고 빌드를 통해 GitHub 소스를 가져와서 이를 도커 이미지로 만들어 OCI 레지스트리에 Push  것이다.

먼저 Environment 탭을 클릭한다.

 

어플리케이션 환경 변수Key Vaule 입력하고, 오른편의 “Add” 클릭하여 다음 값을 입력하는 방식으로 wercker.yml 파일에서 정의한 아래 세개의 환경 변수를 생성한다. DOCKER_PASSWORD 경우 Value 입력 , “Protected” 클릭하여 값을 마스킹 처리한다.

DOCKER_USERNAME  <tenancy name>/<username> 입력한다.

DOCKER_REPO <region-code>.ocir.io/<tenancy name>/<registry name> 입력한다. registry name OCI 레지스트리에 업로드될 레포지토리명이다. 여기서는 “werckerdemo”라고 입력했다.

- DOCKER_USERNAME: apackrsct01/oracleidentitycloudservice/young.kyun.jung@sampletest.com

- DOCKER_PASSWORD: 앞서 생성한 해당 유저의 인증 토큰

- DOCKER_REPO: iad.ocir.io/apackrsct01/werckerdemo

환경 변수를 모두 입력한  Runs 탭으로 이동한다.

 

Runs  화면  아래에 있는 “trigger a build now” 클릭하여 어플리케이션 빌드와 OCIR로의 이미지 Push 시작한다.

 

빌드와 OCIR Push 완료되면 아래와 같은 화면을   있다.

 

 단계별 실행 내용을 화면을 펼쳐서 확인할  있다. 아래는 OCIR 이미지 Push 단계의 실행 내용이다.

 

실제 OCI 레지스트리로 이미지가 Push되어 있는지 확인한다. OCI 레지스트리 화면으로 이동해 보면 앞서 지정한 “werckerdemo”라는 이름으로 레포지토리가 생성되어 있음을   있다.

 

글 순서

1. Introduction

2.쿠버네티스  OCI 쿠버네티스(OKE) 개요

3. OCI 쿠버네티스 배포, 사용 환경 설정

4. OKE 클러스터에 샘플 웹서버 배포

5. OCI 레지스트리에 이미지 업로드 & 다운로드 설정

6. Wercker 이용한 어플리케이션 빌드

7. Wercker 이용한 어플리케이션 배포

8. OKE 모니터링

여기에 정리한 내용은 오라클 제품을 다루고 있지만, 이는 개인적인 정리 및 테스트 결과일 뿐입니다. 오라클의 공식 문서는 오라클이 제공하는 매뉴얼과 기타 기술문서를 참조하셔야 합니다.