본문으로 건너뛰기

DevOps Pipeline을 활용한 CI/CD 환경 구축

카카오클라우드 콘솔을 통해 GUI 기반으로 쉽게 DevOps Pipeline을 생성하고, CI/CD 환경을 구축 및 관리하는 예제를 다룹니다.

안내

사전 준비

Container Registry 만들기

컨테이너 이미지 저장소 생성

카카오클라우드 콘솔에 접속한 후, Container Registry > Repository 탭에서 [리포지토리 생성] 버튼을 클릭한 후, 아래 표를 참고해 리포지토리 정보를 입력하고 리포지토리를 생성합니다.

공개 여부리포지토리 이름태그 덮어쓰기이미지 스캔
공개    test-cr      가능     수동

Container Registry 접근 URI 확인하기

리포지토리 목록에서 생성한 리포지토리를 클릭해 상세 화면으로 이동한 후 [커맨드 보기] 버튼을 클릭합니다. 커맨드 보기 팝업창에서 도커 커맨드와 해당 Container Registry 접근 URI를 확인할 수 있습니다.

도커 커맨드, Container Registry 접근 URI 확인

Kubernetes Engine을 이용하여 쿠버네티스 클러스터 생성하기

Kubernetes Engine을 이용한 쿠버네티스 환경 구축에 대한 상세 가이드는 Kubernetes Engine으로 쿠버네티스 클러스터 구축 문서를 참고하시기 바랍니다.

  1. Step 1. 쿠버네티스 클러스터 생성하기에 따라 Kubernetes Engine을 이용하여 클러스터를 생성합니다.
  2. Step 2. kubectl로 쿠버네티스 API 호출하기를 진행합니다.

Helm 설치하기

brew install helm 명령어를 터미널에 입력하여 Helm 패키지를 설치합니다. Helm은 쿠버네티스 패키지 매니저로, 쿠버네티스용 소프트웨어를 검색하거나 공유하고 사용할 수 있습니다.

Helm 설치
brew install helm

예제 리포지토리 설정하기

  1. 아래 명령어를 통해 작업 디렉터리를 생성하고 예제로 제공하는 리포지토리를 Clone 합니다. 예제 리포지토리에는 도커 빌드를 위한 Dockerfile과 helm 배포를 위한 설정들이 포함되어 있습니다.

    mkdir ~/handson-pipeline
    cd ~/handson-pipeline

    git clone https://github.com/kakaoenterprise/kic-library-monolithic.git
  2. values.yaml 파일은 helm 차트에서 사용하는 기본 설정값을 정의합니다. Container Registry에 업로드한 이미지를 LoadBalancer 타입으로 배포하도록 설정합니다. 아래 명령어를 입력하고 ${CONTAINER_REGISTRY_URI} 값을 변경해 values.yaml 파일을 설정합니다.

        cat <<EOF | sudo tee ~/handson-pipeline/kic-library-monolithic/chart/values.yaml
    app:
    name: library-k8s
    profile:
    replicaCount: 1
    hostAliases: []
    image: ${CONTAINER_REGISTRY_URI}/test-img:latest
    # 예시) test-project.kr-central-1.kcr.dev/hands-on/test-img:latest
    resources: {}
    service:
    type: LoadBalancer
    EOF
    변수설명
    ${CONTAINER_REGISTRY_URI}생성한 Container Registry 접근 URI를 기입
  3. GitHub에 로그인해 library-monolithic 이름으로 public 리포지토리를 생성합니다.

    깃헙 리포지토리 생성

  4. git 명령어를 통해 kic-library-monolithic 폴더 내 파일들을 library-monolithic 깃헙 리포지토리에 업로드합니다.

    cd ~/handson-pipeline/kic-library-monolithic

    git init
    git add .
    git commit -m "Upload Files"
    git branch -M main
    git remote add origin https://github.com/${GITHUB_USER_NAME}/library-monolithic.git
    git push -u origin main
    변수설명
    ${GITHUB_USER_NAME}library-monolithic 리포지토리를 생성한 계정의 깃헙 아이디

Step 1. DevOps Pipeline 환경 설정

외부 서비스(소스) 만들기

외부 서비스는 외부의 서비스에 대해 접근할 수 있는 정보를 저장합니다. 엔드포인트 URL을 입력하며, 주로 소스 저장소에 대한 접근 설정을 할 수 있습니다. DevOps Pipeline > Configuration > 외부 서비스 탭에서 [외부 서비스 만들기] 버튼을 클릭한 후, 외부 서비스 만들기 화면에서 아래 표와 같이 설정 정보를 입력합니다.

외부 서비스 이름서비스 타입엔드 포인트 URL
library-git      Githubhttps://github.com/${GITHUB_USER_NAME}/library-monolithic

${GITHUB_USER_NAME}에는 library-monolithic 리포지토리를 생성한 계정의 깃헙 아이디를 입력합니다.

Container Registry 접근용 크리덴셜 만들기

DevOps Pipeline > Configuration > 크리덴셜 탭에서 [크리덴셜 만들기] 버튼을 클릭한 후, Container Registry에 접근하기 위해 아래 표와 같이 크리덴셜(인증 정보)을 등록합니다.

크리덴셜 이름인증 유형사용자 이름비밀번호
cr-secret   사용자 이름 / 비밀번호액세스 키 ID보안 액세스 키
안내

액세스 키 발급 및 관리를 위한 자세한 설명은 액세스 키 발급을 참고하시기 바랍니다.

외부 서비스(빌드) 만들기

도커 이미지 빌드를 위해 외부 서비스 만들기 화면에서 아래 표와 같이 정보를 입력합니다.

외부 서비스 이름서비스 타입엔드 포인트 URL크리덴셜
docker-image   Docker      https://${CONTAINER_REGISTRY_URI}cr-secret

${CONTAINER_REGISTRY_URI}에는 사전 준비에서 생성한 Container Registry 접근 URI를 기입합니다.

Kubernetes cluster 접근용 크리덴셜 만들기

Kubernetes cluster 접근을 위해 크리덴셜 만들기 화면에서 아래 표와 같이 정보를 입력합니다.

크리덴셜 이름인증 유형Kubeconfig 파일
k8se-cluster-secretKubeconfigkubeconfig 파일 불러오기

Kubeconfig 파일은 Kubernetes Engine을 이용하여 쿠버네티스 클러스터 생성하기에서 설정한 kubeconfig 파일(.yaml)을 불러옵니다.

안내

Kubeconfig 파일을 불러오면 해당 Kubeconfig 파일을 읽어 자동으로 변환되어 입력됩니다. 이미 입력한 내용이 있는 상태에서 불러오기를 할 경우 덮어쓰게 됩니다.

결재선 템플릿 만들기

결재 태스크는 파이프라인 실행 시 지정된 결재자에게 결재를 요청하며, 결재자/합의자는 같은 프로젝트 내 멤버만 지정할 수 있습니다. 서비스를 배포하기 전에 결재자를 지정하여 배포 여부에 대한 결재를 진행하도록 설정합니다.
DevOps Pipeline > Configuration > 결재선 템플릿 탭에서 [결재선 템플릿 만들기] 버튼을 클릭한 후, 아래 표와 같이 결재선 정보를 등록합니다. 1단계 결재자는 필수로 입력해야 하며, 결재 단계를 추가할 수 있습니다.

결재선 템플릿 이름1 단계
approval-template결재자 선택 > 결재자 이메일 입력

Step2. 클릭만으로 CI/CD 파이프라인 구축

DevOps Pipeline을 이용하면 버튼 클릭 몇 번 만으로 손쉽게 CI/CD 파이프라인을 구축할 수 있습니다.

파이프라인 만들기

깃헙 리포지토리 생성

  1. DevOps Pipeline > [파이프라인 만들기] 버튼을 클릭합니다.

  2. 새 파이프라인 팝업창에서 처음부터 만들기로 선택한 후 [만들기] 버튼을 클릭합니다.

  3. 새 파이프라인 만들기 화면 > 좌측 태스크 추가 탭에서 다음을 참고해 태스크를 추가한 후, 소스 → 빌드 → 결재 → 배포순으로 태스크를 연결합니다.

    태스크소스빌드결재배포
    종류GithubDockerApprovalHelm
  4. 우측 태스크 설정 탭에서 태스크별로 설정값을 입력합니다.

    외부 서비스도커 파일 경로도커 이미지 이름태그
    docker-image./Dockerfiletest-imglatest
  5. [파이프라인 저장] 버튼을 클릭해 저장합니다.

파이프라인 실행 및 확인하기

  1. 카카오클라우드 콘솔에서 DevOps Pipeline 메뉴를 선택한 후, 파이프라인 탭을 선택합니다.

  2. 파이프라인 목록에서 상세 정보를 확인할 파이프라인을 선택합니다.

  3. 파이프라인의 상세 정보 페이지에서 [실행] 버튼을 눌러 파이프라인을 실행하고 실행 이력을 확인합니다.

  4. 파이프라인 목록에서 파이프라인의 실행 결과를 확인할 수 있습니다. 실행 결과가 결재 대기 상태이면 [결재] 버튼을 눌러 결재를 승인합니다.

    결재하기

콘솔에서 로드밸런서 설정하기

파이프라인의 실행 결과가 성공이면 서비스 배포가 완료된 상태입니다. LoadBalancer 타입으로 배포했으므로 카카오클라우드 콘솔 > Load Balancer 서비스의 로드밸런서 목록에 배포한 로드밸런서가 추가된 것을 확인할 수 있습니다.

새로 생성된 로드밸런서에 공인 IP를 연결해 외부에서 library-monolithic 서비스에 접근할 수 있게 합니다.

로드밸런서 공인 IP 연결

Step 3. 서비스 접속 확인

파이프라인과 쿠버네티스 클러스터를 통한 서비스 배포가 완료되었습니다. 로드밸런서에 부여한 공인 IP로 접속하여 서비스가 잘 배포되었는지 확인하시기 바랍니다. 서비스 접속에 시간이 걸릴 수 있습니다.

서비스 접근 확인