SlideShare a Scribd company logo
1 of 29
Download to read offline
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
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
3
Dockerfile 추가 ..................................................................................................20
.gitlab-ci.yml 소스 추가.......................................................................................22
SPRING BOOT APPLICATION CI/CD 테스트 결과 .............................................................25
CI/CD pipeline 확인............................................................................................25
컨테이너 레지스트리 확인.....................................................................................26
빌드 결과 확인 ....................................................................................................27
배포 결과 확인 ....................................................................................................28
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 사용 가능)
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
6
CI(Continuous Integration) / CD(Continuous Delivery)
CI(Continuous Integration)
개발자가 각각 개발한 소스코드를 모아서 한꺼번에 빌드하는 통합 빌드의 과정을 특정 시점이 아니라
주기적으로 수행함으로써 통합에서 발생하는 오류를 사전에 해결하고 이러한 과정들에 소요되는 시간을
줄이기 위한 기법을 말한다.
 개발자 생산성 향상
 버그를 더 빠르게 발견 및 해결
 업데이트를 더 빠르게 제공
CD(Continuous Delivery)
소프트웨어를 더 빠르게, 더 주기적으로 빌드하고 테스트하고 출시하는 것을 목표로 변경사항의 배포에
대한 비용, 시간, 위험을 줄일 수 있게 한다.
 소프트웨어 릴리스 프로세스 자동화
 개발자 생산성 향상
 버그를 더 빠르게 발견 및 해결
 업데이트를 더 빠르게 제공
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
8
Gitlab 및 Gitlab runner
Gitlab 은 소스 저장소 역할 뿐만 아니라 이슈 트래킹 등 다양한 기능을 제공하며, Gitlab runner 를
이용하여 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
10
그룹 생성
- 상단 Groups 클릭
11
- 우측 New group 클릭
- Group path 에 원하는 그룹 명(dev) 입력 후 Create group 클릭
12
프로젝트 생성
- New project 클릭
13
- Project name 에 원하는 프로젝트 명(sample) 입력 후 Create project 클릭
14
Gitlab runner token 확인
- 좌측 Settings – CI/CD 클릭
- Runners settings 의 Expand 클릭
15
- Specific Runners 의 3 번 항목이 Sample Project 의 token
- token 마우스 드래그 후 복사(Gitlab runner 설치 및 설정 시 사용)
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
17
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 "admin@example.com"
git remote add origin http://root:root_git@10.0.0.101/dev/sample.git
git add .
git commit -m "Initial commit"
git push -u origin master
19
자바 소스 추가
- + 클릭 후 New file 선택
- master 항목에 src/main/java/com/example/demo/HomeController.java 입력
- 아래의 소스 입력 후 Commit changes 클릭
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";
}
}
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"]
22
.gitlab-ci.yml 소스 추가
- + 클릭 후 New file 선택
- master 항목에 .gitlab-ci.yml 입력
- 아래의 소스 입력 후 Commit changes 클릭
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
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
25
Spring boot application CI/CD 테스트 결과
CI/CD pipeline 확인
- CI / CD 항목에 Pipelines 클릭 후 running 클릭
- gradle-build 항목 클릭
26
컨테이너 레지스트리 확인
- Registry 클릭
27
빌드 결과 확인
- CI / CD 항목에 Job 클릭 후 항목 별 passed 클릭
28
배포 결과 확인
- CI / CD 항목에 Environments 클릭 후 클릭
29
간략하게 관련된 내용을 살펴보았으며, 본 개념을 활용하여 다양한 ALM(Application Cycle
Management) 형태의 환경으로 확장이 가능할 것이다.

More Related Content

What's hot

[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법Open Source Consulting
 
[오픈소스컨설팅]오픈스택에 대하여
[오픈소스컨설팅]오픈스택에 대하여[오픈소스컨설팅]오픈스택에 대하여
[오픈소스컨설팅]오픈스택에 대하여Ji-Woong Choi
 
Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성 Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성 rockplace
 
Kubernetes Networking
Kubernetes NetworkingKubernetes Networking
Kubernetes NetworkingCJ Cullen
 
[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기
[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기
[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기Ji-Woong Choi
 
웹서버 부하테스트 실전 노하우
웹서버 부하테스트 실전 노하우웹서버 부하테스트 실전 노하우
웹서버 부하테스트 실전 노하우IMQA
 
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-RegionJi-Woong Choi
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축Ji-Woong Choi
 
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개if kakao
 
[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)
[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)
[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)Ji-Woong Choi
 
svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드Insub Lee
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentationSuresh Kumar
 
Nick Fisk - low latency Ceph
Nick Fisk - low latency CephNick Fisk - low latency Ceph
Nick Fisk - low latency CephShapeBlue
 
Overview of Distributed Virtual Router (DVR) in Openstack/Neutron
Overview of Distributed Virtual Router (DVR) in Openstack/NeutronOverview of Distributed Virtual Router (DVR) in Openstack/Neutron
Overview of Distributed Virtual Router (DVR) in Openstack/Neutronvivekkonnect
 
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례NAVER LABS
 
Prometheus - basics
Prometheus - basicsPrometheus - basics
Prometheus - basicsJuraj Hantak
 
Docker Networking Overview
Docker Networking OverviewDocker Networking Overview
Docker Networking OverviewSreenivas Makam
 
Multibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだことMultibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだことRecruit Lifestyle Co., Ltd.
 
Red Hat OpenStack 17 저자직강+스터디그룹_2주차
Red Hat OpenStack 17 저자직강+스터디그룹_2주차Red Hat OpenStack 17 저자직강+스터디그룹_2주차
Red Hat OpenStack 17 저자직강+스터디그룹_2주차Nalee Jang
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例kazuhcurry
 

What's hot (20)

[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법
 
[오픈소스컨설팅]오픈스택에 대하여
[오픈소스컨설팅]오픈스택에 대하여[오픈소스컨설팅]오픈스택에 대하여
[오픈소스컨설팅]오픈스택에 대하여
 
Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성 Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성
 
Kubernetes Networking
Kubernetes NetworkingKubernetes Networking
Kubernetes Networking
 
[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기
[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기
[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기
 
웹서버 부하테스트 실전 노하우
웹서버 부하테스트 실전 노하우웹서버 부하테스트 실전 노하우
웹서버 부하테스트 실전 노하우
 
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
 
[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)
[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)
[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)
 
svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
 
Nick Fisk - low latency Ceph
Nick Fisk - low latency CephNick Fisk - low latency Ceph
Nick Fisk - low latency Ceph
 
Overview of Distributed Virtual Router (DVR) in Openstack/Neutron
Overview of Distributed Virtual Router (DVR) in Openstack/NeutronOverview of Distributed Virtual Router (DVR) in Openstack/Neutron
Overview of Distributed Virtual Router (DVR) in Openstack/Neutron
 
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
 
Prometheus - basics
Prometheus - basicsPrometheus - basics
Prometheus - basics
 
Docker Networking Overview
Docker Networking OverviewDocker Networking Overview
Docker Networking Overview
 
Multibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだことMultibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだこと
 
Red Hat OpenStack 17 저자직강+스터디그룹_2주차
Red Hat OpenStack 17 저자직강+스터디그룹_2주차Red Hat OpenStack 17 저자직강+스터디그룹_2주차
Red Hat OpenStack 17 저자직강+스터디그룹_2주차
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例
 

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

postgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdfpostgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdfLee Dong Wook
 
Hyperledger Explorer.pptx
Hyperledger Explorer.pptxHyperledger Explorer.pptx
Hyperledger Explorer.pptxwonyong hwang
 
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기SeungYong Baek
 
Linux in Visual Studio
Linux in Visual StudioLinux in Visual Studio
Linux in Visual StudioHeecheol Yang
 
[오픈소스컨설팅]Nginx 1.2.7 설치가이드__v1
[오픈소스컨설팅]Nginx 1.2.7 설치가이드__v1[오픈소스컨설팅]Nginx 1.2.7 설치가이드__v1
[오픈소스컨설팅]Nginx 1.2.7 설치가이드__v1Ji-Woong Choi
 
[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래NAVER D2
 
Kubernetes on GCP
Kubernetes on GCPKubernetes on GCP
Kubernetes on GCPDaegeun Kim
 
Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)Junyoung Lee
 
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템Park JoongSoo
 
[T아카데미] 비개발자를 위한 Git과 Github Page 블로그 만들기
[T아카데미] 비개발자를 위한 Git과 Github Page 블로그 만들기[T아카데미] 비개발자를 위한 Git과 Github Page 블로그 만들기
[T아카데미] 비개발자를 위한 Git과 Github Page 블로그 만들기Subin An
 
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea Clouddocker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea CloudJude Kim
 
빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for Android빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for AndroidSangkyoon Nam
 
Deploying Hyperledger Fabric on Kubernetes.pptx
Deploying Hyperledger Fabric on Kubernetes.pptxDeploying Hyperledger Fabric on Kubernetes.pptx
Deploying Hyperledger Fabric on Kubernetes.pptxwonyong hwang
 
[Ansible] Solution Guide V0.4_20181204.pdf
[Ansible] Solution Guide V0.4_20181204.pdf[Ansible] Solution Guide V0.4_20181204.pdf
[Ansible] Solution Guide V0.4_20181204.pdfHeeJung Chae
 
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+githubGit 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+githubJunyoung Lee
 
Actual PoC guide for Virtual Desktop Infrastructure (Korean)
Actual PoC guide for Virtual Desktop Infrastructure (Korean)Actual PoC guide for Virtual Desktop Infrastructure (Korean)
Actual PoC guide for Virtual Desktop Infrastructure (Korean)Changhyun Lim
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3Ji-Woong Choi
 
Git Tutorial
Git TutorialGit Tutorial
Git TutorialMDLicht
 

Similar to [오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트 (20)

postgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdfpostgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdf
 
Hyperledger Explorer.pptx
Hyperledger Explorer.pptxHyperledger Explorer.pptx
Hyperledger Explorer.pptx
 
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기
 
Linux in Visual Studio
Linux in Visual StudioLinux in Visual Studio
Linux in Visual Studio
 
[오픈소스컨설팅]Nginx 1.2.7 설치가이드__v1
[오픈소스컨설팅]Nginx 1.2.7 설치가이드__v1[오픈소스컨설팅]Nginx 1.2.7 설치가이드__v1
[오픈소스컨설팅]Nginx 1.2.7 설치가이드__v1
 
[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래
 
Kubernetes on GCP
Kubernetes on GCPKubernetes on GCP
Kubernetes on GCP
 
Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)
 
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
 
[T아카데미] 비개발자를 위한 Git과 Github Page 블로그 만들기
[T아카데미] 비개발자를 위한 Git과 Github Page 블로그 만들기[T아카데미] 비개발자를 위한 Git과 Github Page 블로그 만들기
[T아카데미] 비개발자를 위한 Git과 Github Page 블로그 만들기
 
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea Clouddocker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
 
빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for Android빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for Android
 
Deploying Hyperledger Fabric on Kubernetes.pptx
Deploying Hyperledger Fabric on Kubernetes.pptxDeploying Hyperledger Fabric on Kubernetes.pptx
Deploying Hyperledger Fabric on Kubernetes.pptx
 
K8s in action02
K8s in action02K8s in action02
K8s in action02
 
[Ansible] Solution Guide V0.4_20181204.pdf
[Ansible] Solution Guide V0.4_20181204.pdf[Ansible] Solution Guide V0.4_20181204.pdf
[Ansible] Solution Guide V0.4_20181204.pdf
 
11. git basic
11. git basic11. git basic
11. git basic
 
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+githubGit 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
 
Actual PoC guide for Virtual Desktop Infrastructure (Korean)
Actual PoC guide for Virtual Desktop Infrastructure (Korean)Actual PoC guide for Virtual Desktop Infrastructure (Korean)
Actual PoC guide for Virtual Desktop Infrastructure (Korean)
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
 
Git Tutorial
Git TutorialGit Tutorial
Git Tutorial
 

More from Ji-Woong Choi

[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기
[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기
[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기Ji-Woong Choi
 
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육Ji-Woong Choi
 
[오픈소스컨설팅] 2019년 클라우드 생존전략
[오픈소스컨설팅] 2019년 클라우드 생존전략[오픈소스컨설팅] 2019년 클라우드 생존전략
[오픈소스컨설팅] 2019년 클라우드 생존전략Ji-Woong Choi
 
[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기
[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기
[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기Ji-Woong Choi
 
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3Ji-Woong Choi
 
[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12
[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12
[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12Ji-Woong Choi
 
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항Ji-Woong Choi
 
OpenStack Summit 2017 참석후기
OpenStack Summit 2017 참석후기OpenStack Summit 2017 참석후기
OpenStack Summit 2017 참석후기Ji-Woong Choi
 
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick GuideJi-Woong Choi
 
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1Ji-Woong Choi
 
Docker Setting for Static IP allocation
Docker Setting for Static IP allocationDocker Setting for Static IP allocation
Docker Setting for Static IP allocationJi-Woong Choi
 
Scouter와 influx db – grafana 연동 가이드
Scouter와 influx db – grafana 연동 가이드Scouter와 influx db – grafana 연동 가이드
Scouter와 influx db – grafana 연동 가이드Ji-Woong Choi
 
[오픈소스컨설팅]Atlassian JIRA Quick Guide
[오픈소스컨설팅]Atlassian JIRA Quick Guide[오픈소스컨설팅]Atlassian JIRA Quick Guide
[오픈소스컨설팅]Atlassian JIRA Quick GuideJi-Woong Choi
 
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편Ji-Woong Choi
 
[오픈소스컨설팅]systemd on RHEL7
[오픈소스컨설팅]systemd on RHEL7[오픈소스컨설팅]systemd on RHEL7
[오픈소스컨설팅]systemd on RHEL7Ji-Woong Choi
 
클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning
클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning 클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning
클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning Ji-Woong Choi
 
[오픈소스컨설팅 뉴스레터] 2016년 1분기
[오픈소스컨설팅 뉴스레터] 2016년 1분기[오픈소스컨설팅 뉴스레터] 2016년 1분기
[오픈소스컨설팅 뉴스레터] 2016년 1분기Ji-Woong Choi
 
[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기Ji-Woong Choi
 
OpenStack 인스턴스 간략 사용자_매뉴얼(liberty)_v1
OpenStack 인스턴스 간략 사용자_매뉴얼(liberty)_v1OpenStack 인스턴스 간략 사용자_매뉴얼(liberty)_v1
OpenStack 인스턴스 간략 사용자_매뉴얼(liberty)_v1Ji-Woong Choi
 
[오픈소스컨설팅]Atlassian JIRA Deep Dive
[오픈소스컨설팅]Atlassian JIRA Deep Dive[오픈소스컨설팅]Atlassian JIRA Deep Dive
[오픈소스컨설팅]Atlassian JIRA Deep DiveJi-Woong Choi
 

More from Ji-Woong Choi (20)

[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기
[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기
[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기
 
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육
 
[오픈소스컨설팅] 2019년 클라우드 생존전략
[오픈소스컨설팅] 2019년 클라우드 생존전략[오픈소스컨설팅] 2019년 클라우드 생존전략
[오픈소스컨설팅] 2019년 클라우드 생존전략
 
[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기
[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기
[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기
 
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
 
[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12
[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12
[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12
 
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
 
OpenStack Summit 2017 참석후기
OpenStack Summit 2017 참석후기OpenStack Summit 2017 참석후기
OpenStack Summit 2017 참석후기
 
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
 
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1
 
Docker Setting for Static IP allocation
Docker Setting for Static IP allocationDocker Setting for Static IP allocation
Docker Setting for Static IP allocation
 
Scouter와 influx db – grafana 연동 가이드
Scouter와 influx db – grafana 연동 가이드Scouter와 influx db – grafana 연동 가이드
Scouter와 influx db – grafana 연동 가이드
 
[오픈소스컨설팅]Atlassian JIRA Quick Guide
[오픈소스컨설팅]Atlassian JIRA Quick Guide[오픈소스컨설팅]Atlassian JIRA Quick Guide
[오픈소스컨설팅]Atlassian JIRA Quick Guide
 
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
 
[오픈소스컨설팅]systemd on RHEL7
[오픈소스컨설팅]systemd on RHEL7[오픈소스컨설팅]systemd on RHEL7
[오픈소스컨설팅]systemd on RHEL7
 
클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning
클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning 클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning
클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning
 
[오픈소스컨설팅 뉴스레터] 2016년 1분기
[오픈소스컨설팅 뉴스레터] 2016년 1분기[오픈소스컨설팅 뉴스레터] 2016년 1분기
[오픈소스컨설팅 뉴스레터] 2016년 1분기
 
[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기
 
OpenStack 인스턴스 간략 사용자_매뉴얼(liberty)_v1
OpenStack 인스턴스 간략 사용자_매뉴얼(liberty)_v1OpenStack 인스턴스 간략 사용자_매뉴얼(liberty)_v1
OpenStack 인스턴스 간략 사용자_매뉴얼(liberty)_v1
 
[오픈소스컨설팅]Atlassian JIRA Deep Dive
[오픈소스컨설팅]Atlassian JIRA Deep Dive[오픈소스컨설팅]Atlassian JIRA Deep Dive
[오픈소스컨설팅]Atlassian JIRA Deep Dive
 

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

  • 1. 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
  • 2. 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
  • 3. 3 Dockerfile 추가 ..................................................................................................20 .gitlab-ci.yml 소스 추가.......................................................................................22 SPRING BOOT APPLICATION CI/CD 테스트 결과 .............................................................25 CI/CD pipeline 확인............................................................................................25 컨테이너 레지스트리 확인.....................................................................................26 빌드 결과 확인 ....................................................................................................27 배포 결과 확인 ....................................................................................................28
  • 4. 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 사용 가능)
  • 5. 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
  • 6. 6 CI(Continuous Integration) / CD(Continuous Delivery) CI(Continuous Integration) 개발자가 각각 개발한 소스코드를 모아서 한꺼번에 빌드하는 통합 빌드의 과정을 특정 시점이 아니라 주기적으로 수행함으로써 통합에서 발생하는 오류를 사전에 해결하고 이러한 과정들에 소요되는 시간을 줄이기 위한 기법을 말한다.  개발자 생산성 향상  버그를 더 빠르게 발견 및 해결  업데이트를 더 빠르게 제공 CD(Continuous Delivery) 소프트웨어를 더 빠르게, 더 주기적으로 빌드하고 테스트하고 출시하는 것을 목표로 변경사항의 배포에 대한 비용, 시간, 위험을 줄일 수 있게 한다.  소프트웨어 릴리스 프로세스 자동화  개발자 생산성 향상  버그를 더 빠르게 발견 및 해결  업데이트를 더 빠르게 제공
  • 7. 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
  • 8. 8 Gitlab 및 Gitlab runner Gitlab 은 소스 저장소 역할 뿐만 아니라 이슈 트래킹 등 다양한 기능을 제공하며, Gitlab runner 를 이용하여 CI / CD 파이프 라인을 통합하여 코드를 작성, 테스트, 배포 및 모니터링할 수 있는 기능을 제공한다.
  • 9. 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
  • 10. 10 그룹 생성 - 상단 Groups 클릭
  • 11. 11 - 우측 New group 클릭 - Group path 에 원하는 그룹 명(dev) 입력 후 Create group 클릭
  • 13. 13 - Project name 에 원하는 프로젝트 명(sample) 입력 후 Create project 클릭
  • 14. 14 Gitlab runner token 확인 - 좌측 Settings – CI/CD 클릭 - Runners settings 의 Expand 클릭
  • 15. 15 - Specific Runners 의 3 번 항목이 Sample Project 의 token - token 마우스 드래그 후 복사(Gitlab runner 설치 및 설정 시 사용)
  • 16. 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
  • 17. 17
  • 18. 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 "admin@example.com" git remote add origin http://root:root_git@10.0.0.101/dev/sample.git git add . git commit -m "Initial commit" git push -u origin master
  • 19. 19 자바 소스 추가 - + 클릭 후 New file 선택 - master 항목에 src/main/java/com/example/demo/HomeController.java 입력 - 아래의 소스 입력 후 Commit changes 클릭
  • 20. 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"; } }
  • 21. 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"]
  • 22. 22 .gitlab-ci.yml 소스 추가 - + 클릭 후 New file 선택 - master 항목에 .gitlab-ci.yml 입력 - 아래의 소스 입력 후 Commit changes 클릭
  • 23. 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
  • 24. 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
  • 25. 25 Spring boot application CI/CD 테스트 결과 CI/CD pipeline 확인 - CI / CD 항목에 Pipelines 클릭 후 running 클릭 - gradle-build 항목 클릭
  • 27. 27 빌드 결과 확인 - CI / CD 항목에 Job 클릭 후 항목 별 passed 클릭
  • 28. 28 배포 결과 확인 - CI / CD 항목에 Environments 클릭 후 클릭
  • 29. 29 간략하게 관련된 내용을 살펴보았으며, 본 개념을 활용하여 다양한 ALM(Application Cycle Management) 형태의 환경으로 확장이 가능할 것이다.