[오픈소스컨설팅] docker를 활용한 gitlab ci/cd 구성 테스트

29
Docker 를 활용한 Gitlab CI-CD 구성 테스트 Prepared By: Document Owner(s) Project/Organization Role Deuk Ryong Lee Project Status Report Version Control Version Date Author Change Description 0.1 2017/12/25 Deuk Ryong Lee Document created

Upload: ji-woong-choi

Post on 22-Jan-2018

853 views

Category:

Software


5 download

TRANSCRIPT

Page 1: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

Docker를 활용한 Gitlab CI-CD 구성 테스트

Prepared By:

Document Owner(s) Project/Organization Role

Deuk Ryong Lee

Project Status Report Version Control

Version Date Author Change Description

0.1 2017/12/25 Deuk Ryong Lee Document created

Page 2: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

2

TABLE OFCONTENTS

본 문서의 목적 ................................................................................................................. 4

작업의 범위 .......................................................................................................... 4

Pre-Request ......................................................................................................... 4

테스트 환경 .......................................................................................................... 4

버전 정보 ............................................................................................................. 5

CI(CONTINUOUS INTEGRATION) / CD(CONTINUOUS DELIVERY) .................................... 6

CI(Continuous Integration) .................................................................................. 6

CD(Continuous Delivery) ..................................................................................... 6

DOCKER 설치 및 설정 ...................................................................................................... 7

Docker 설치 스크립트............................................................................................. 7

GITLAB 및 GITLAB RUNNER ............................................................................................ 8

Gitlab 설치 스크립트 ............................................................................................. 9

Gitlab Web 접속 .................................................................................................. 9

그룹 생성 ........................................................................................................... 10

프로젝트 생성 ..................................................................................................... 12

Gitlab runner token 확인 ................................................................................... 14

Gitlab runner 설치 스크립트 ................................................................................ 16

runner 등록 확인 ................................................................................................ 16

SPRING BOOT APPLICATION CI/CD 테스트 설정 ............................................................. 18

Sample Spring boot application 생성 스크립트 .................................................... 18

자바 소스 추가 .................................................................................................... 19

Page 3: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

3

Dockerfile 추가 .................................................................................................. 20

.gitlab-ci.yml 소스 추가 ....................................................................................... 22

SPRING BOOT APPLICATION CI/CD 테스트 결과 ............................................................. 25

CI/CD pipeline 확인 ............................................................................................ 25

컨테이너 레지스트리 확인..................................................................................... 26

빌드 결과 확인 .................................................................................................... 27

배포 결과 확인 .................................................................................................... 28

Page 4: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

4

본 문서의 목적

본 문서의 목적은 Docker를 활용하여 Gitlab CI/CD 설치 구성 및 샘플 테스트를 위한 가이드

문서이다.

본 문서에서는 Docker 및 Gitlab에 대한 개요 및 사용법에 대해서는 다루지 않는다.

Docker image를 이용 Gitlab 및 Gitlab CI/CD 설치 및 구성 후 Sample Spring boot web

application을 이용하여 소스 변경에 따른 commit이 발생 했을 때 Gitlab CI/CD 기능을 통해

application 테스트, 빌드, 배포까지의 일련의 과정이 자동으로 진행되는지를 테스트 하였다.

작업의 범위

작업에 대한 결과 리포트는 아래와 같은 내용을 포함하고 있다.

Docker 설치 및 설정

Gitlab / Gitlab runner 설치 및 설정

Spring boot application CI/CD 테스트

Pre-Request

- 인터넷 연결이 가능한 CentOS 버전 7 이상 설치 된 VM or 서버 1대(메모리 4GB이상)

테스트 환경

구분 내용

IP 10.0.0.101 (사용자 환경에 맞는 IP 사용 가능)

Page 5: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

5

버전 정보

구분 내용

Server CentOS Linux release 7.4.1708

Docker Engine 17.09.1-ce

Gitlab Gitlab Community Edition 10.2.5

Gitlab runner 10.2.0

Page 6: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

6

CI(Continuous Integration) / CD(Continuous Delivery)

CI(Continuous Integration)

개발자가 각각 개발한 소스코드를 모아서 한꺼번에 빌드하는 통합 빌드의 과정을 특정 시점이 아니라

주기적으로 수행함으로써 통합에서 발생하는 오류를 사전에 해결하고 이러한 과정들에 소요되는 시간을

줄이기 위한 기법을 말한다.

개발자 생산성 향상

버그를 더 빠르게 발견 및 해결

업데이트를 더 빠르게 제공

CD(Continuous Delivery)

소프트웨어를 더 빠르게, 더 주기적으로 빌드하고 테스트하고 출시하는 것을 목표로 변경사항의 배포에

대한 비용, 시간, 위험을 줄일 수 있게 한다.

소프트웨어 릴리스 프로세스 자동화

개발자 생산성 향상

버그를 더 빠르게 발견 및 해결

업데이트를 더 빠르게 제공

Page 7: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

7

Docker 설치 및 설정

Docker 설치 스크립트

# 필수 패키지 설치

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# Docker CE repo 구성

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-

ce.repo

# Docker CE 설치

sudo yum -y install docker-ce

#Docker CE 서비스 등록 및 시작

sudo systemctl enable docker && sudo systemctl start docker

Page 8: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

8

Gitlab 및 Gitlab runner

Gitlab은 소스 저장소 역할 뿐만 아니라 이슈 트래킹 등 다양한 기능을 제공하며, Gitlab runner를

이용하여 CI / CD 파이프 라인을 통합하여 코드를 작성, 테스트, 배포 및 모니터링할 수 있는 기능을

제공한다.

Page 9: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

9

Gitlab 설치 스크립트

Gitlab Web 접속

- 접속 URL : http://10.0.0.101 -> 사용자 환경에 맞는 IP http://xxx.xxx.xxx.xxx

- ID / PW : root / root_git

# 사용자 환경에 맞는 IP로 대체 10.0.0.101 -> xxx.xxx.xxx.xxx

# Gitlab container registry에 https가 아닌 http로 접속 하기 위한 설정

sudo cat << EOF > /etc/docker/daemon.json

{

"insecure-registries": ["10.0.0.101:5005"]

}

EOF

# Docker CE 서비스 재시작

sudo systemctl restart docker

# Gitlab Docker image 다운로드 및 서비스 시작

# Gitlab service 포트 80

# Gitlab Container Registry 포트 5005

# Gitlab root 관리자 비밀번호 root_git

# 사용자 환경에 맞는 IP로 대체 10.0.0.101 -> xxx.xxx.xxx.xxx

sudo docker run --detach \

--publish 80:80 \

--publish 5005:5005 \

--name gitlab \

--restart always \

--env GITLAB_OMNIBUS_CONFIG="external_url 'http://10.0.0.101'; registry_external_url

'http://10.0.0.101:5005'" \

--env GITLAB_ROOT_PASSWORD="root_git" \

--env GITLAB_TIMEZONE="Asia/Seoul" \

--volume /data/gitlab/config:/etc/gitlab:Z \

--volume /data/gitlab/logs:/var/log/gitlab:Z \

--volume /data/gitlab/data:/var/opt/gitlab:Z \

gitlab/gitlab-ce:latest

Page 10: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

10

그룹 생성

- 상단 Groups클릭

Page 11: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

11

- 우측 New group 클릭

- Group path에 원하는 그룹 명(dev) 입력 후 Create group 클릭

Page 12: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

12

프로젝트 생성

- New project 클릭

Page 13: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

13

- Project name에 원하는 프로젝트 명(sample) 입력 후 Create project 클릭

Page 14: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

14

Gitlab runner token 확인

- 좌측 Settings – CI/CD 클릭

- Runners settings의 Expand 클릭

Page 15: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

15

- Specific Runners의 3번 항목이 Sample Project의 token

- token 마우스 드래그 후 복사(Gitlab runner 설치 및 설정 시 사용)

Page 16: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

16

Gitlab runner 설치 스크립트

- 4.1.4에서 확인한 token을 –registration-token에 대입

runner 등록 확인

# Gitlab runner 실행

sudo docker run --detach \

--name runner1 \

--restart always \

--volume /data/gitlab-runner/config:/etc/gitlab-runner:Z \

--volume /var/run/docker.sock:/var/run/docker.sock \

gitlab/gitlab-runner:alpine

# 사용자 환경에 맞는 IP로 대체 10.0.0.101 -> xxx.xxx.xxx.xxx

# Gitlab runner 설정

sudo docker exec -it runner1 gitlab-runner register -n \

--url http://10.0.0.101 \

--registration-token rg5zBqCswo8xd29yKwuG \

--description runner1 \

--executor docker \

--docker-image docker:latest \

--docker-volumes /var/run/docker.sock:/var/run/docker.sock \

--docker-privileged

Page 17: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

17

Page 18: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

18

Spring boot application CI/CD 테스트 설정

Sample Spring boot application 생성 스크립트

- commit 결과 확인 http://10.0.0.101/dev/sample/tree/master

# Git client 설치 yum install -y git

# Sample Spring Boot Source 다운로드 curl https://start.spring.io/starter.tgz -d dependencies=web -d

type=gradle-project -d baseDir=sample | tar -xzvf -

cd sample

# Git 설정 및 commit

# Gitlab login ID / PW 사용 -> root / root_git

# 사용자 환경에 맞는 IP 로 대체 10.0.0.101 -> xxx.xxx.xxx.xxx git init

git config user.name "Administrator"

git config user.email "[email protected]"

git remote add origin http://root:[email protected]/dev/sample.git

git add .

git commit -m "Initial commit"

git push -u origin master

Page 19: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

19

자바 소스 추가

- + 클릭 후 New file 선택

- master 항목에 src/main/java/com/example/demo/HomeController.java 입력

- 아래의 소스 입력 후 Commit changes 클릭

Page 20: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

20

Dockerfile 추가

- + 클릭 후 New file 선택

package com.example.demo;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

@Controller

public class HomeController {

@RequestMapping("/")

public @ResponseBody String greeting() {

return "Hello World";

}

}

Page 21: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

21

- master 항목에 Dockerfile 입력

- 아래의 소스 입력 후 Commit changes 클릭

FROM openjdk:8-jre-alpine

VOLUME /tmp

ADD /build/libs/*.jar app.jar

ENTRYPOINT ["sh", "-c", "java -Djava.security.egd=file:/dev/./urandom

-Duser.country=KR -Duser.language=ko -Duser.timezone=Asia/Seoul -jar

/app.jar"]

Page 22: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

22

.gitlab-ci.yml 소스 추가

- + 클릭 후 New file 선택

- master 항목에 .gitlab-ci.yml 입력

- 아래의 소스 입력 후 Commit changes 클릭

Page 23: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

23

image: docker:latest

before_script:

- export

stages:

- build

- package

- deploy

gradle-build:

image: gradle:alpine

stage: build

variables:

GRADLE_OPTS: "-Dorg.gradle.daemon=false"

before_script:

- export GRADLE_USER_HOME=`pwd`/.gradle

script:

- gradle build

cache:

key: "$CI_COMMIT_REF_NAME"

paths:

- build

- .gradle

artifacts:

paths:

- build/libs/*.jar

docker-build:

stage: package

script:

- docker build -t $CI_REGISTRY_IMAGE:$CI_PIPELINE_ID .

- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY

- docker push $CI_REGISTRY_IMAGE:$CI_PIPELINE_ID

Page 24: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

24

- .gitlab-ci.yml 문법 정보 https://docs.gitlab.com/ce/ci/yaml/README.html

deploy-staging:

stage: deploy

script:

- ID=$(docker ps -a --filter="name=dev-$CI_PROJECT_NAME" -q) &&

[[ -n $ID ]] && docker stop $ID && docker rm $ID

- docker run --detach --name dev-$CI_PROJECT_NAME --restart always

--publish 8081:8080 $CI_REGISTRY_IMAGE:$CI_PIPELINE_ID

environment:

name: staging

url: http://10.0.0.101:8081

only:

- master

deploy-product:

stage: deploy

script:

- ID=$(docker ps -a --filter="name=prod-$CI_PROJECT_NAME" -q) &&

[[ -n $ID ]] && docker stop $ID && docker rm $ID

- docker run --detach --name prod-$CI_PROJECT_NAME --restart

always --publish 8080:8080 $CI_REGISTRY_IMAGE:$CI_PIPELINE_ID

environment:

name: production

url: http://10.0.0.101:8080

when: manual

only:

- master

Page 25: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

25

Spring boot application CI/CD 테스트 결과

CI/CD pipeline 확인

- CI / CD 항목에 Pipelines 클릭 후 running 클릭

- gradle-build 항목 클릭

Page 26: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

26

컨테이너 레지스트리 확인

- Registry 클릭

Page 27: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

27

빌드 결과 확인

- CI / CD 항목에 Job 클릭 후 항목 별 passed 클릭

Page 28: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

28

배포 결과 확인

- CI / CD 항목에 Environments 클릭 후 클릭

Page 29: [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트

29

간략하게 관련된 내용을 살펴보았으며, 본 개념을 활용하여 다양한 ALM(Application Cycle

Management) 형태의 환경으로 확장이 가능할 것이다.