Jenkins를 활용한 OpenShift CI/CD 구성
| 소속/성명 : 락플레이스 플랫폼서비스 본부
OpenShift 소개
⁻ Container
⁻ Docker / CRIO
⁻ Kubernetes
⁻ OpenShift
Opeshift CI/CD 구성
⁻ CI/CD
⁻ Openshift CI/CD
⁻ Sample Pipeline
Opeshift CI/CD 데모
⁻ Openshift CI/CD 구성도
⁻ 시나리오
⁻ 수행화면
⁻ 롤백
목차
01 02 03
01
OpenShift 소개
Container
단일 컨트롤 호스트 상에서 여러 개의 고립된 리눅스 시스템 들을 실행하기 위한 “OS 레벨 가상화” 방법이다. 응용프로 그램의 종속성과 함께 응용프
로그램 자체를 캡슐화한 형태로 일반적인 VM과 같이 OS의 격리된 인스턴스 형태로 제공
01 OpenShift 소개
APP Process
Isolated Env.
Docker
Docker
Docker는 리눅스 컨테이너 기술을 기반으로 하는 오픈 소스 가상화 플랫폼으로 오픈소스 커뮤니티 프로젝트로 기술 개발을 지원
01 OpenShift 소개
App 1
Bins/Libs
Docker Engine
Host OS
Infra Structure
Containerized Applications
App 2
Bins/Libs
App 3
Bins/Libs
App 4
Bins/Libs
Host OS
Infra Structure
Virtual Machine
App 1
Guest OS
Hypervisor
App 2
Guest OS
App 3
Guest OS
CRI-O
CRI-O
- Container engine implementing Kubernetes Container Runtime Interface
CRI-O
- Supports all OCI compatible container images
- Supports any container registry
- Supports all OCI container runtimes
01 OpenShift 소개
Kubernetes
What is Kubernetes ?
01 OpenShift 소개
▪ Service discovery and load balancing
▪ Storage orchestration
▪ Automated rollouts and rollbacks
▪ Automatic bin packing
▪ Self-healing
▪ Secret and configuration management
[참고] kubernetes.io
Worker Node3
Worker Node2
Kubernetes
Kubernetes Architecture
01 OpenShift 소개
kubectl
Kubernetes Master
Worker Node1
kubelet
Container Runtime
Kube-proxy
Pod
container
Controller
manager
scheduler
API
Server
etcd
Persistent
storage
Container
registry
Openshift
01 OpenShift 소개
“글로벌 Best 컨테이너 기술” “업계 최고의 컨테이너 관리 기술”
▪ 세계 컨테이너 기술의 표준 (OCI 선정)
▪ Docker와 완벽한 호환성
▪ 격리 기술을 통한 가장 높은 보안성 제공
▪ 구글에서 개발되고 사용하고 있는 Orchestration 기술
▪ 구글과 협력하여 지속적인 프로젝트 발전에 기여
▪ 실제 환경에서 가장 많은 Container를 Handling하며 기 안정화됨
Openshift
01 OpenShift 소개
컨테이너 이미지
DevOps
App 배포
서비스 확장
모니터링
Openshift
Architecture
01 OpenShift 소개
Red Hat OpenShift Container Platform은 기존 및 컨테이너 기반의 애플리케이션을 물리적 인프라, 가상 인프라, 퍼블릭 클라우드 인프라에 긴밀하게
개발, 배포 및 관리하도록 돕는 Docker 표준을 기반으로 한 애플리케이션 플랫폼입니다.
Openshift
Architecture
01 OpenShift 소개
api-server • controller-manager • etcd HaProxy
application pods
Mster 1 Master 2 Master 3 Router 1 Router 2
NAS
Master Router
Worker
Bootstrap
registry • router
• Monitoring •
EFK
Bastion VM
• Yum Rep
• Docker-Distribution
• PXE (HTTPD)
• TFTP
• DNS
• DHCP
• GitLab
Private network
External Network
Monitoring • EFK
Infra 1 Infra 2 Infra 3
Infra
Master API ( 6443, 22623)
Application ( 80 , 443 )
Worker N
Worker 2
Worker 1 Worker 3
registry 1 registry 2
Image registry
registry
Openshift
Build & Deploy Container Images
02 Openshift CI/CD 구성
DEPLOY YOUR
SOURCE CODE
DEPLOY YOUR
APP BINARY
DEPLOY YOUR
CONTAINER IMAGE
Openshift
Build & Deploy Container Images
S2I 빌드 배포 ( SOURCE CODE )
02 Openshift CI/CD 구성
BUILD APP
BUILD IMAGE
DEPLOY
push
Git repository
Source-to-image
(S2I)
Builder Image Image registry
Application
Container
Openshift
Build & Deploy Container Images
S2I 빌드 배포 ( APPLICATION BINARY )
02 Openshift CI/CD 구성
BUILD APP
BUILD IMAGE
DEPLOY
Build
Application Binary
Source-to-image
(S2I)
Builder Image Image registry
Application
Container
Existing Build
Process
Openshift
Build & Deploy Container Images
Docker Image 배포
02 Openshift CI/CD 구성
BUILD APP
PUSH
DEPLOY
Build
Application Image
Application
Container
Existing Build
Process
Image registry
02
Openshift
CI/CD 구성
CI/CD (Continuous Integration / Continuous Delivery )
CONTINUOUS DELIVERY WITH CONTAINERS
02 Openshift CI/CD 구성
source
repository
dev Application
Container
CI/CD
physical
virtual
public cloud
priveate cloud
CI/CD (Continuous Integration / Continuous Delivery )
BUILDS
- Webhook triggers
- Image trigger
- Build hooks
DEPLOYMENTS
- Deployment triggers
02 Openshift CI/CD 구성
push
Git repository
Source-to-image
(S2I)
Builder Image Image registry
Application
Container
Deployment
triggers
Image
trigger
Webhook
triggers
Build
hooks
Openshift CI/CD
Multiple Deployment Methods for OpenShift
Option 1: Use provided JBoss EAP 7 S2I template
02 Openshift CI/CD 구성
[참고] openshift.com
Openshift CI/CD
Multiple Deployment Methods for OpenShift
Option 2: Bring your own S2I template
02 Openshift CI/CD 구성
[참고] openshift.com
Openshift CI/CD
Multiple Deployment Methods for OpenShift
Option 3: Custom S2I for binary deployment
02 Openshift CI/CD 구성
[참고] openshift.com
Openshift CI/CD
Multiple Deployment Methods for OpenShift
Option 4: Build pipeline managed out of Source code
02 Openshift CI/CD 구성
[참고] openshift.com
Openshift CI/CD
Multiple Deployment Methods for OpenShift
Option 5: Build pipeline managed within Source code
02 Openshift CI/CD 구성
[참고] openshift.com
Openshift CI/CD
Jenkins & Openshift Pipeline
JENKINS-AS-A SERVICE HYBRID JENKINS INFRA
02 Openshift CI/CD 구성
Jenkins
(S2I)
Plugins
Jobs
Configuration
Custom
Image
Jenkins
(S2I)
Plugins
Jobs
Configuration
Custom
Image
Openshift CI/CD
Jenkins & Openshift Pipeline
EXISTING CI/CD DEPLOY TO OPENSHIFT
02 Openshift CI/CD 구성
Source to Image
( S2I )
Git repository
Custon
Image
Source Build
Source pull
Openshift CI/CD
Jenkins & Openshift Pipeline
02 Openshift CI/CD 구성
Sample Pipeline
Jenkins & Pipeline
02 Openshift CI/CD 구성
developer
CD
CI
DEV
commit
webhook
Build / QA / test
Push / deploy
Sample Pipeline
Jenkins & Openshift Pipeline
02 Openshift CI/CD 구성
developer
CD
CI
DEV
Source
2 image
Application
Worker Node
commit webhook
Build QA / test
deploy
03
Openshift
CI/CD 데모
Openshift CI/CD 구성도
Openshift4 CI/CD 구성 솔루션
03 Openshift CI/CD 데모
Persistent
Volume(NFS)
GitLab
내부 시스템
Openshift Cluster System 설명
⚫ GitLab서버는 내부시스템에
docker로 기동
⚫ 데이터 저장용 NFS 구성하여
Persistent Volume 생성
⚫ CI/CD를 구성하는 솔루션들은
Openshift내에 구성하여
컨테이너로 서비스
⚫ WAS용도의 JBossEAP7 구성하여
git 소스 반영하여 배포
CoreOS
Worker 노드
Openshift CI/CD 구성도
Openshift내의 Topology
03 Openshift CI/CD 데모
시나리오
Jenkins를 통한 Pipeline 구성
03 Openshift CI/CD 데모
RedHat
OpenShift
Image
Registry
GitLab
Server
Clone
Source
Maven
Build
Source
Analyis
Build
Image
Nexus
(dependency)
SonarQube
Build
Config
Jenkins
Deploy
수행
OpenShift
DEV 배포
developer
Jenkinsfile
Jenkins
Pipeline
시나리오
Jenkinsfile에 Pipeline을 단계별로 수행하는 스크립트 작성
03 Openshift CI/CD 데모
node('maven') {
stage('Clone sources’) {
sh " oc whoami"
sh " pwd ; id;"
git url: "http://gitlab.wsjeong.ocp4.local/ocp4/mlbparks_test"
}
stage('Maven Build') {
sh "cp settings.xml ~/.m2/"
sh "mvn package"
}
stage('Source Analysis ') {
sh "mvn sonar:sonar 
-Dsonar.projectKey=jenkins-sonarqube -Dsonar.host.url=http://sonarqube-rockplace.apps.wsjeong.ocp4.local 
-Dsonar.login=f56c996e9df7bb3fb8294baf630b7fcc93d43fd1"
}
stage('Build Image(OCP Deploy)') {
sh "oc start-build mlbparks-app --from-file=target/mlbparks-1.0.war --follow"
}
}
프로젝트 내
솔루션 위주
시나리오
JenkinsPipeline 생성(OpenShift 콘솔 -> Builds -> Create Build Config -> BuildConfig 생성)
03 Openshift CI/CD 데모
시나리오 수행 #1
OpenShift 콘솔 -> Builds -> BuildConfig 선택 -> Actions(Start Build)
03 Openshift CI/CD 데모
시나리오 수행 #2
OpenShift 콘솔에서 JenkinsPipeline 수행확인
03 Openshift CI/CD 데모
시나리오 수행 #3
OpenShift 콘솔에서 builds 내역확인
03 Openshift CI/CD 데모
시나리오 수행 #4
Jenkins 대쉬보드에서 Console Output 확인
03 Openshift CI/CD 데모
시나리오 수행 #5
Jenkins 대쉬보드에서 build history 확인
03 Openshift CI/CD 데모
시나리오 수행 #6
Jenkins 대쉬보드 -> Item선택 -> Job선택 -> Build Now
03 Openshift CI/CD 데모
시나리오 수행 #7
Sonarqube 대쉬보드에서 소스분석 내역확인
03 Openshift CI/CD 데모
시나리오 수행 #8
서비스 페이지 호출
03 Openshift CI/CD 데모
시나리오 수행 #9
index.html 파일 변경(제목, 위도, 경도변경)후 push
03 Openshift CI/CD 데모
[참고 github : https://github.com/gshipley/mlbparks ]
시나리오 수행 #10
변경된 소스로 서비스확인(브라우져 호출)
03 Openshift CI/CD 데모
기존 변경
롤백
Openshift에서 제공하는 rollback 기능으로 기존이미지로 변경
03 Openshift CI/CD 데모
변경 기존
# oc rollout latest dc/mlbparks-app
deploymentconfig.apps.openshift.io/mlbparks-app rolled out
• 특정 deploy 버전으로 가기위해 버전명 명시하여 실행
• oc rollout undo dc/mlbparks-app --to-revision=8
데모영상
03 Openshift CI/CD 데모
Thank you

Jenkins를 활용한 Openshift CI/CD 구성

  • 1.
    Jenkins를 활용한 OpenShiftCI/CD 구성 | 소속/성명 : 락플레이스 플랫폼서비스 본부
  • 2.
    OpenShift 소개 ⁻ Container ⁻Docker / CRIO ⁻ Kubernetes ⁻ OpenShift Opeshift CI/CD 구성 ⁻ CI/CD ⁻ Openshift CI/CD ⁻ Sample Pipeline Opeshift CI/CD 데모 ⁻ Openshift CI/CD 구성도 ⁻ 시나리오 ⁻ 수행화면 ⁻ 롤백 목차 01 02 03
  • 3.
  • 4.
    Container 단일 컨트롤 호스트상에서 여러 개의 고립된 리눅스 시스템 들을 실행하기 위한 “OS 레벨 가상화” 방법이다. 응용프로 그램의 종속성과 함께 응용프 로그램 자체를 캡슐화한 형태로 일반적인 VM과 같이 OS의 격리된 인스턴스 형태로 제공 01 OpenShift 소개 APP Process Isolated Env. Docker
  • 5.
    Docker Docker는 리눅스 컨테이너기술을 기반으로 하는 오픈 소스 가상화 플랫폼으로 오픈소스 커뮤니티 프로젝트로 기술 개발을 지원 01 OpenShift 소개 App 1 Bins/Libs Docker Engine Host OS Infra Structure Containerized Applications App 2 Bins/Libs App 3 Bins/Libs App 4 Bins/Libs Host OS Infra Structure Virtual Machine App 1 Guest OS Hypervisor App 2 Guest OS App 3 Guest OS
  • 6.
    CRI-O CRI-O - Container engineimplementing Kubernetes Container Runtime Interface CRI-O - Supports all OCI compatible container images - Supports any container registry - Supports all OCI container runtimes 01 OpenShift 소개
  • 7.
    Kubernetes What is Kubernetes? 01 OpenShift 소개 ▪ Service discovery and load balancing ▪ Storage orchestration ▪ Automated rollouts and rollbacks ▪ Automatic bin packing ▪ Self-healing ▪ Secret and configuration management [참고] kubernetes.io
  • 8.
    Worker Node3 Worker Node2 Kubernetes KubernetesArchitecture 01 OpenShift 소개 kubectl Kubernetes Master Worker Node1 kubelet Container Runtime Kube-proxy Pod container Controller manager scheduler API Server etcd Persistent storage Container registry
  • 9.
    Openshift 01 OpenShift 소개 “글로벌Best 컨테이너 기술” “업계 최고의 컨테이너 관리 기술” ▪ 세계 컨테이너 기술의 표준 (OCI 선정) ▪ Docker와 완벽한 호환성 ▪ 격리 기술을 통한 가장 높은 보안성 제공 ▪ 구글에서 개발되고 사용하고 있는 Orchestration 기술 ▪ 구글과 협력하여 지속적인 프로젝트 발전에 기여 ▪ 실제 환경에서 가장 많은 Container를 Handling하며 기 안정화됨
  • 10.
    Openshift 01 OpenShift 소개 컨테이너이미지 DevOps App 배포 서비스 확장 모니터링
  • 11.
    Openshift Architecture 01 OpenShift 소개 RedHat OpenShift Container Platform은 기존 및 컨테이너 기반의 애플리케이션을 물리적 인프라, 가상 인프라, 퍼블릭 클라우드 인프라에 긴밀하게 개발, 배포 및 관리하도록 돕는 Docker 표준을 기반으로 한 애플리케이션 플랫폼입니다.
  • 12.
    Openshift Architecture 01 OpenShift 소개 api-server• controller-manager • etcd HaProxy application pods Mster 1 Master 2 Master 3 Router 1 Router 2 NAS Master Router Worker Bootstrap registry • router • Monitoring • EFK Bastion VM • Yum Rep • Docker-Distribution • PXE (HTTPD) • TFTP • DNS • DHCP • GitLab Private network External Network Monitoring • EFK Infra 1 Infra 2 Infra 3 Infra Master API ( 6443, 22623) Application ( 80 , 443 ) Worker N Worker 2 Worker 1 Worker 3 registry 1 registry 2 Image registry registry
  • 13.
    Openshift Build & DeployContainer Images 02 Openshift CI/CD 구성 DEPLOY YOUR SOURCE CODE DEPLOY YOUR APP BINARY DEPLOY YOUR CONTAINER IMAGE
  • 14.
    Openshift Build & DeployContainer Images S2I 빌드 배포 ( SOURCE CODE ) 02 Openshift CI/CD 구성 BUILD APP BUILD IMAGE DEPLOY push Git repository Source-to-image (S2I) Builder Image Image registry Application Container
  • 15.
    Openshift Build & DeployContainer Images S2I 빌드 배포 ( APPLICATION BINARY ) 02 Openshift CI/CD 구성 BUILD APP BUILD IMAGE DEPLOY Build Application Binary Source-to-image (S2I) Builder Image Image registry Application Container Existing Build Process
  • 16.
    Openshift Build & DeployContainer Images Docker Image 배포 02 Openshift CI/CD 구성 BUILD APP PUSH DEPLOY Build Application Image Application Container Existing Build Process Image registry
  • 17.
  • 18.
    CI/CD (Continuous Integration/ Continuous Delivery ) CONTINUOUS DELIVERY WITH CONTAINERS 02 Openshift CI/CD 구성 source repository dev Application Container CI/CD physical virtual public cloud priveate cloud
  • 19.
    CI/CD (Continuous Integration/ Continuous Delivery ) BUILDS - Webhook triggers - Image trigger - Build hooks DEPLOYMENTS - Deployment triggers 02 Openshift CI/CD 구성 push Git repository Source-to-image (S2I) Builder Image Image registry Application Container Deployment triggers Image trigger Webhook triggers Build hooks
  • 20.
    Openshift CI/CD Multiple DeploymentMethods for OpenShift Option 1: Use provided JBoss EAP 7 S2I template 02 Openshift CI/CD 구성 [참고] openshift.com
  • 21.
    Openshift CI/CD Multiple DeploymentMethods for OpenShift Option 2: Bring your own S2I template 02 Openshift CI/CD 구성 [참고] openshift.com
  • 22.
    Openshift CI/CD Multiple DeploymentMethods for OpenShift Option 3: Custom S2I for binary deployment 02 Openshift CI/CD 구성 [참고] openshift.com
  • 23.
    Openshift CI/CD Multiple DeploymentMethods for OpenShift Option 4: Build pipeline managed out of Source code 02 Openshift CI/CD 구성 [참고] openshift.com
  • 24.
    Openshift CI/CD Multiple DeploymentMethods for OpenShift Option 5: Build pipeline managed within Source code 02 Openshift CI/CD 구성 [참고] openshift.com
  • 25.
    Openshift CI/CD Jenkins &Openshift Pipeline JENKINS-AS-A SERVICE HYBRID JENKINS INFRA 02 Openshift CI/CD 구성 Jenkins (S2I) Plugins Jobs Configuration Custom Image Jenkins (S2I) Plugins Jobs Configuration Custom Image
  • 26.
    Openshift CI/CD Jenkins &Openshift Pipeline EXISTING CI/CD DEPLOY TO OPENSHIFT 02 Openshift CI/CD 구성 Source to Image ( S2I ) Git repository Custon Image Source Build Source pull
  • 27.
    Openshift CI/CD Jenkins &Openshift Pipeline 02 Openshift CI/CD 구성
  • 28.
    Sample Pipeline Jenkins &Pipeline 02 Openshift CI/CD 구성 developer CD CI DEV commit webhook Build / QA / test Push / deploy
  • 29.
    Sample Pipeline Jenkins &Openshift Pipeline 02 Openshift CI/CD 구성 developer CD CI DEV Source 2 image Application Worker Node commit webhook Build QA / test deploy
  • 30.
  • 31.
    Openshift CI/CD 구성도 Openshift4CI/CD 구성 솔루션 03 Openshift CI/CD 데모 Persistent Volume(NFS) GitLab 내부 시스템 Openshift Cluster System 설명 ⚫ GitLab서버는 내부시스템에 docker로 기동 ⚫ 데이터 저장용 NFS 구성하여 Persistent Volume 생성 ⚫ CI/CD를 구성하는 솔루션들은 Openshift내에 구성하여 컨테이너로 서비스 ⚫ WAS용도의 JBossEAP7 구성하여 git 소스 반영하여 배포 CoreOS Worker 노드
  • 32.
    Openshift CI/CD 구성도 Openshift내의Topology 03 Openshift CI/CD 데모
  • 33.
    시나리오 Jenkins를 통한 Pipeline구성 03 Openshift CI/CD 데모 RedHat OpenShift Image Registry GitLab Server Clone Source Maven Build Source Analyis Build Image Nexus (dependency) SonarQube Build Config Jenkins Deploy 수행 OpenShift DEV 배포 developer Jenkinsfile Jenkins Pipeline
  • 34.
    시나리오 Jenkinsfile에 Pipeline을 단계별로수행하는 스크립트 작성 03 Openshift CI/CD 데모 node('maven') { stage('Clone sources’) { sh " oc whoami" sh " pwd ; id;" git url: "http://gitlab.wsjeong.ocp4.local/ocp4/mlbparks_test" } stage('Maven Build') { sh "cp settings.xml ~/.m2/" sh "mvn package" } stage('Source Analysis ') { sh "mvn sonar:sonar -Dsonar.projectKey=jenkins-sonarqube -Dsonar.host.url=http://sonarqube-rockplace.apps.wsjeong.ocp4.local -Dsonar.login=f56c996e9df7bb3fb8294baf630b7fcc93d43fd1" } stage('Build Image(OCP Deploy)') { sh "oc start-build mlbparks-app --from-file=target/mlbparks-1.0.war --follow" } } 프로젝트 내 솔루션 위주
  • 35.
    시나리오 JenkinsPipeline 생성(OpenShift 콘솔-> Builds -> Create Build Config -> BuildConfig 생성) 03 Openshift CI/CD 데모
  • 36.
    시나리오 수행 #1 OpenShift콘솔 -> Builds -> BuildConfig 선택 -> Actions(Start Build) 03 Openshift CI/CD 데모
  • 37.
    시나리오 수행 #2 OpenShift콘솔에서 JenkinsPipeline 수행확인 03 Openshift CI/CD 데모
  • 38.
    시나리오 수행 #3 OpenShift콘솔에서 builds 내역확인 03 Openshift CI/CD 데모
  • 39.
    시나리오 수행 #4 Jenkins대쉬보드에서 Console Output 확인 03 Openshift CI/CD 데모
  • 40.
    시나리오 수행 #5 Jenkins대쉬보드에서 build history 확인 03 Openshift CI/CD 데모
  • 41.
    시나리오 수행 #6 Jenkins대쉬보드 -> Item선택 -> Job선택 -> Build Now 03 Openshift CI/CD 데모
  • 42.
    시나리오 수행 #7 Sonarqube대쉬보드에서 소스분석 내역확인 03 Openshift CI/CD 데모
  • 43.
    시나리오 수행 #8 서비스페이지 호출 03 Openshift CI/CD 데모
  • 44.
    시나리오 수행 #9 index.html파일 변경(제목, 위도, 경도변경)후 push 03 Openshift CI/CD 데모 [참고 github : https://github.com/gshipley/mlbparks ]
  • 45.
    시나리오 수행 #10 변경된소스로 서비스확인(브라우져 호출) 03 Openshift CI/CD 데모 기존 변경
  • 46.
    롤백 Openshift에서 제공하는 rollback기능으로 기존이미지로 변경 03 Openshift CI/CD 데모 변경 기존 # oc rollout latest dc/mlbparks-app deploymentconfig.apps.openshift.io/mlbparks-app rolled out • 특정 deploy 버전으로 가기위해 버전명 명시하여 실행 • oc rollout undo dc/mlbparks-app --to-revision=8
  • 47.
  • 48.