2024년 12월 4일
*여기서 내가 명심해야할 것
젠킨스 관련 글 : https://www.elancer.co.kr/blog/detail/741
젠킨스(Jenkins)
CI / CD 시나리오
CI(Continuous Integration; 지속적 통합) 단계
CD(Continuous Delivery / Deployment; 지속적 인도) 단계
지속적 통합 파이프라인(CI Pipeline)
쿠버네티스 클러스터에 구성한 젠킨스 CI
젠킨스의 특징
다양한 프로그래밍 언어 지원
플러그인을 통한 확장
이식성
대부분의 소스 관리 시스템 지원
분산 처리 지원
코드로 파이프라인 구성
젠킨스 아키텍처
마스터-슬레이브 구조
마스터
에이전트
수평적 확장
조직(개발팀, 테스트팀, 데브옵스팀)이 늘어날때마다 마스터 인스턴스의 수를 늘려 가는 방식
통합 자동화가 복잡해진다는 단점이 있으나, 아래와 같은 중요한 이점 있음
테스트 인스턴스와 프로덕션 인스턴스
Helm
helm 설치
helm을 통해 jenkins 설치 (여기서부턴 강의 따라함)
Helm 이용 가능 확인, repo 설정
Helm을 이용한 Jenkins 설치
jenkins 설치 확인
포트 포워드를 실행해 k8s 클러스터 내에서 8080번 포트로 제공하고 있는 jenkins 서비스에 로컬 컴퓨터의 포트 연결
localhost:8080 접속하면 아래와 같은 화면 확인
jenkins 관리자 비밀번호 알아내기
지금 설치된 jenkins의 관리자 계정 (admin) 설정은 k8s의 secret 오브젝트로 관리됨
알아낼 수 있는 방법 (초기 비밀번호 설정은 설치할때마다 항상 같지 않음)
비밀 번호가 어려우니깐 바꿔줘야함
jenkins 기초 설정
단순한 예제로 파이프라인 맛보기
클러스터 내 에이전트 동작 관찰 (할 일이 있을 때 시키는 것)
내용 요약
Jenkins는 “Item” 단위로 프로젝트를 관리
파이프라인에 빌드 절차를 기술할 수 있음
빌드는 어떤 이벤트에 의하여 시작
k8s 클러스터에 운용되는 jenkins는 동적으로 에이전트 프로비저닝
dash board > manage jenkins > clouds > kubernetes > default > pod template settings
여기서 포드가 만들어지는 것을 확인 할 수 있음
첫번째 실습
준비
깃허브 리포지토리 생성 + 파일들 업로드
Jenkins plugin docker pipline, kubernetes cli plugin 설치
젠킨스 재시작
new item 추가 → name : simple-echo-1 + freestyle project → 아이템 생성
general → source code management : git 체크 + repository url 입력
build steps : execute shell 클릭 → command 에 아래 내용 입력
docker build -t hongbiko/simple-echo .
docker push hongbiko/simple-echo
save
build now 클릭 → build 되고 있는 #1 console-output 클릭 → failed됨
failed된 이유 : 도커 이미지에 도커 cli(command line interface)가 설치되어 있지 않기 때문
dashboard → simple-echo-1 클릭 → general → restrict where this project can be run 체크 (이 아이템을 빌드하는데 있어서는 특정한 템플릿에 의한 포드만 이용하라는 의미) → jenkins-sample-agent(포드 지정) → save
build now → failed 함
프로젝트로 다시 돌아와서 : dashboard > simple-echo1 클릭 > configuraton > build environment 클릭 > use secret text(s) or file(s) 체크 > add > username and password (separated) > 아래처럼 입력 > save
configuration > build steps > 아래처럼 입력 > save
build now 클릭 → console output → sucess
쿠버네티스 배포
build now 클릭 → console oupt → failed함
failed 이유는 ?
error when retrieving current configuration → 현재 디플로이먼트 상태를 가져오는게 허용되어 있지 않았음 → 이 크러스터에 리소스를 생성하거나 조회할 권한이 주어지지 않았음 → credentails 설정해줘야함
build now 클릭 → success
쿠버네티스에 잘 설치되어있는지 확인
파이프 라인 만들기
깃허브에서 파이프 스크립트 가져오기
CI 파이프라인
간단한 파이프라인 구축 실습
깃허브 리포지토리 생성 (private repo)
깃허브 접근용 SSH Key 생성
SSH KEY 만들기
spring boot 프로젝트 생성 → calcultor.zip 파일 생성됨
로컬에서 빌드
로컬 컴퓨터에 JDK (버전까지 맞추면 좋음) 가 설치 되어있어야 함
https://www.oracle.com/kr/java/technologies/downloads/#java17
설치 compressed → mac interchip
다운받은 calculator 파일들 깃 레포지토리에 넣고
젠킨스 설정
빌드해보기
빌드 에이전트의 개선
단위 테스트
단위 테스트의 중요성
단위 테스트는 개발자의 몫
코드의 품질이란?
실행 시점이 아닌, 그보다 이전에 정의할 수 있는 코드의 품질은 어떤 것들이 있을까?