
※ 위 책을 읽고 개념 위주로 정리한 내용임을 알립니다.
Container Infrastructure 환경에서의 CI/CD
- 개발자가 소스를 커밋하고 푸시하면 CI 단계 진입
- 애플리케이션 자동 빌드 및 테스트를 통해 배포할 수 있는 애플리케이션인지 확인
- 확인 과정을 통과하면 CD 단계 진입
- 애플리케이션을 Container Image로 만들어서 Pod, Deployment, StatefulSet 등
다양한 오브젝트 조건에 맞춰서 미리 설정한 파일을 통해 배포
Jenkins와 Kubernetes 운영 환경
- 애플리케이션 배포 영역에 쿠버네티스를 사용하면 개발자는 애플리케이션 개발에만 집중할 수 있게 됨
- 모든 배포 환경을 컨테이너 인프라로 일원화하고, CI/CD 도구를 사용하면
애플리케이션에 맞는 환경을 적용해서 자동으로 배포할 수 있음 - 통합 과정에서 만들어진 컨테이너 이미지를 기반으로
쿠버네티스가 존재하는 어떤 환경에서도 일관성 있는 애플리케이션 배포 가능
개발 및 배포 과정
- 개발자가 소스 코드를 저장소에 푸시
- 쿠버네티스 내부에 설치된 젠킨스는 코드를 빌드하고 레지스트리에 푸시
- 쿠버네티스에서 사용 가능한 형태로 배포
젠킨스의 역할
- 작업 내용을 Item 단위로 정의하고 조건에 따라 자동으로 작업을 수행해서 효율을 높이고 실수를 줄임
- 주 목적 : 애플리케이션을 컨테이너로 만들고 배포하는 과정을 자동화하는 것
젠킨스 활용 방법
- 컨트롤러와 에이전트 형태로 구성한 다음 배포해야 하며 여기에 필요한 설정을 모두 넣어야 함
- 애플리케이션 배포를 위한 환경을 하나하나 구성하는 것은 복잡하고 번거로우며,
고정된 값이 아니라서 매니페스트를 작성해서 그대로 사용할 수도 없음 - 그러므로 동적인 변경 사항을 간편하고 빠르게 적용하기 위해 kustomize나 Helm을 주로 사용함
Jenkins menu 살펴보기

- Item : 젠킨스를 통해서 빌드할 작업을 뜻함
- 사람 : 사용자를 관리하는 메뉴
젠킨스를 구동한 서버에서 직접 사용자를 관리하거나 젠킨스가 별도의 DB를 가지고 관리할 수 있음 - 빌드 기록 : 젠킨스 작업에 대한 성공, 실패, 진행 내역을 볼 수 있음
- Jenkins 관리 : 젠킨스의 시스템, 보안, 도구, 플러그인 등 각종 설정을 하는 곳
- My Views : 젠킨스에서 각종 작업을 분류해 모아서 볼 수 있는 대시보드
- Lockable Resources : 한 번에 여러 작업이 실행되어 동시성 이슈가 발생할 수 있으므로
작업이 끝날 때까지 같은 작업을 못하도록 잠금 장치를 설정하는 곳 - New View : 대시보드인 View를 생성하는 작업
Jenkins Controller 설정
⭐ 젠킨스를 사용하기 위해서는 컨트롤러와 에이전트 관련 여러 설정이 필요함
- Helm을 통해 미리 입력하여 설정할 수 있음

젠킨스 관리 > 시스템 설정
- 시스템 메시지
- 젠킨스 메인 웹 페이지 접속 시 나타나는 메시지 입력
- 사용자에게 젠킨스에 대한 소개나 간단한 안내를 표시해주는 메시지
- # of executors
- 동시에 빌드를 수행할 수 있는 실행기의 개수를 설정하는 옵션
- 컨트롤러 노드에서 몇 개까지의 빌드를 실행할 수 있을지 설정 가능
- Label
- 노드를 구분할 수 있는 레이블 지정
- 설정한 레이블을 통해 Usage 옵션을 사용하면 특정 작업을 어떤 노드에서 진행할지 결정 가능
- Usage
- 젠킨스의 빌드 작업에 대해 젠킨스 노드가 어떻게 처리할지 설정
- Quiet period
- 빌드 작업이 시작할 때까지 대기하는 시간을 초 단위로 설정
- 짧은 시간 내 변경된 코드에 대해 중복 작업을 하지 않고 최신 변경 코드를 빌드하기 위해 설정하는 값
- SCM checkout retry count
- 소스 코드 저장소로부터 파일을 가져오지 못한 경우 몇 번 재시도할지 설정
- Restrict project naming
- 젠킨스를 통해 만들어지는 작업의 이름 규칙
- 정규식 패턴을 활용해서 제약 조건을 작성할 수도 있음
- Jenkins URL
- 설치된 젠킨스 컨트롤러의 접속 주소
- Resource Root URL
- 빌드 결과물과 같은 내용을 외부에 공개하기 위해 사용되는 주소
Jenkins Agent 설정

젠킨스 관리 > 노드 관리
- 신규 노드
- 에이전트 노드 추가
- 고정된 여러 대의 서버에서 에이전트 노드를 추가해야 할 때 필요
- Configure Clouds
- 클라우드 환경 기반의 에이전트 설정 시 필요
- 쿠버네티스 위에 설치된 젠킨스의 에이전트에 관한 설정도 여기서 설정 가능
- Node Monitoring
- 에이전트 노드의 안정성을 위한 각종 모니터링 관련 사항 설정 가능
- 가운데 화면
- 현재 구성된 노드 목록을 보여줌
- 쿠버네티스상의 젠킨스는 작업 진행 시에만 파드 형태의 에이전트가 생성되었다가 사라지므로
작업 중이 아닌 경우 젠킨스 컨트롤러 노드만 표시됨
Jenkins의 Item
- 새롭게 정의할 작업을 뜻함
- CI/CD를 하려면 각각의 작업은 모두 정의가 필요함
- 설령 작업을 코드로 정했다 하더라도 작업 순서 정도는 정해야 할 것
- Project : 모든 작업의 정의와 순서를 모아둔 전체 작업
- 기본적으로, 프로젝트를 정의하고 생성하는 것을 아이템이라고 함
- 그 외에도, 실제 작업에 도움이 되는 내용들을 정의하는 것도 아이템을 생성하는 과정
Project 생성 방식들
Freestyle project
- 스타일의 자유도가 높은 방식
- 브라우저 상에서 사용자가 직접 설정값과 수행할 동작 입력 가능
- 화면상에 보이는 항목을 입력하면서 구성할 수 있기 때문에 젠킨스 초보자도 구성하기 쉬움
- 하지만 과정이 복잡한 작업을 구성하기 어려움
- 입력한 항목의 명세서를 저장하지 않으므로 작성한 내용을 공유하기 어려움
Pipeline
- 젠킨스에서 지원하는 고유 Pipeline 문법으로 코드를 작성해서 작업을 정의하는 프로젝트
- Freestyle에 비해서 사전 숙지가 필요하므로 진입 장벽이 있음
- 변수 정의, 반복문, 조건문 등의 프로그래밍 기법을 활용해서 복잡한 방식의 작업 정의 가능
- 작성해둔 코드를 베이스로 새 프로젝트를 생성할 수도 있고 일부만 수정해서 재사용하기도 수월함
- Github 저장소에 Pipeline 코드를 함께 올려 두면 애플리케이션 코드와 배포를 함께 관리할 수 있음
Multi-configuration project
- 하나의 소스 코드를 여러 조건의 조합으로 나온 경우의 수에 해당하는 환경에 동시 배포하는 프로젝트
Folder
- 젠킨스 작업이 늘어날수록 단순 관리가 어려워지므로, 분류 가능한 디렉토리를 생성하는 것
Multibranch Pipeline
- 하나의 소스 코드 저장소 내에 존재하는 각 브랜치에서 젠킨스 파이프라인 코드가
작성된 파일을 불러와서 한 번에 여러 브랜치에 대해 품질 검증, 테스트, 빌드 작업 수행
=> 주로 사용되는 것은 Freestyle과 Pipeline
간단한 작업이나 직접 사용하는 경우 Freestyle, 복잡도가 높거나 재사용이 필요한 경우 Pipeline
Jenkinsfile 이해하기
pipeline {
agent any
stages {
stage('git scm update') {
steps {
git url: 'https://github.com/IaC-Source/echo-ip.git', branch: 'main'
}
}
stage('docker build and push') {
steps {
sh '''
docker build -t 192.168.1.10:8443/echo-ip .
docker push 192.168.1.10:8443/echo-ip
'''
}
}
stage('deploy kubernetes') {
steps {
sh '''
kubectl create deployment pl-bulk-prod --image=192.168.1.10:8443/echo-ip
kubectl expose deployment pl-bulk-prod --type=LoadBalancer --port=8080 \
--target-port=80 --name=pl-bulk-prod-svc
'''
}
}
}
}
pipelin
- 선언적 문법이 시작하는 부분
- 선언적 문법은 { } 사이에 작업 내용을 작성해야 함
agent
- 작업을 수행할 에이전트 지정 및 필요한 설정 진행
- 지정된 에이전트 내부에서 젠킨스 빌드 작업이 실제로 수행됨
- 지정할 수 있는 방식들 : any, label, docker, kubernetes
stages
- stage들을 모아서 정의하고 이를 순서대로 진행
stage
- step들을 정의하는 영역
- 젠킨스에서 빌드가 진행될 때 이 stage 별로 진행 단계 확인 가능
steps
- stage 내부에서 실제 작업하게 되는 내용을 작성하는 영역
- 이 안에서 script, sh, git 등의 작업을 넣어놓고 실제로 동작하게 함
'Infrastructure' 카테고리의 다른 글
Kubernetes와 친해지기 (0) | 2022.04.28 |
---|---|
Prometheus & Grafana (0) | 2022.04.28 |
Docker (0) | 2022.04.26 |
Kubernetes (0) | 2022.04.25 |
컨테이너 인프라 환경 (0) | 2022.04.25 |