본문 바로가기

DevOps/CI|CD

젠킨스로 CI/CD 구현하기

젠킨스로 CI/CD 구현하기

젠킨스를 이용하여 CI/CD를 구성해보자

 

아이템(item)이란 새롭게 정의할 작업을 의미한다. CI/CD를 하려면 각각의 작업은 모두 필요하다. 만약 작업을 코드로 정의한 경우라고 해도 작업순서 정도는 알려줘야 한다.

 

  • Freestyle project
    • 스타일의 자유도가 높은 방식으로, 브라우저에서 사용자가 직접 설정값과 수행할 동작을 입력할 수 있다. 화면에 보이는 항목을 입력하면서 구성할 수 있어서 젠킨스와 관련된 경험이 부족한 사용자도 구성하기 쉽다는 장점이 있다. 하지만 과정이 복잡한 작업을 구성하기 어렵고, Freestyle로 생성한 아이템은 입력한 항목의 명세서를 별도로 저장하는 과정이 없으므로 작성한 내용을 공유하기 어렵다.
  • Pipeline
    • 젠킨스에서 지원하는 고유의 Pipeline 문법으로 코드를 작성해 작업을 정의하는 프로젝트이다. Freestyle과 비교해 법을 사전에 숙지해야한다는 점 때문에 비교적 진입 장벽이 있다. 그렇지만 변수 정의, 반복문, 조건문 등의 프로그래밍 기법을 사용할 수 있어 좀 더 복잡한 방식의 작업을 정의하는것이 가능하다. 또한 작성한 코드를 통해 새로운 프로젝트를 바로 생성할 수 있고 코드를 일부만 수정해 재사용하기도 수월하다. 깃허브와 같은 코드 저장소에 애플리케이션 코드를 올릴 때 Pipeline 코드로 작성한 파일을 함께 올려 두면 애플리케이션 코드와 배포 방법을 함께 관리할 수 있기 때문에 관리 편의성도 높다.
  • Multi-configuration project
    • 하나의 소스 코드를 여러 조건의 조합으로 나온 경우의 수에 해당하는 환겨엥 동시에 배포하는 프로젝트이다.
  • Folder
    • 젠킨스 작업이 늘어나면 늘어날수록 단순하게 관리하기 어려운데 이런 경우 관련있는 작업들을 분류해 둘 필요가있다. 이럴경우 분류 가능한 디렉터리를 생성하는것이 Folder이다.
  • Multibranch Pipeline
    • Multibranch Pipeline 을 사용하면 하나의 소스 코드 저장소 내에 존재하는 각 브랜치에서 젠킨스 파이프라인 코드가 작성된 파일을 불러와 한 번에 여러 브랜치에 대해 품질 검증, 테스트, 빌드 등의 작업을 할 수 있도록 해준다.

 

5개의 아이템중 주로 사용되는것은 Freestyle과 Pipeline이다. 일반적으로 간단한 작업이나 공유보다는 직접 사용을 염두에 둔 작업은 Freestyle 로 정의하고, 복잡도가 높아서 고려할 것이 많거나 정의해둔 내용의 공유 및 재사용을 중시하는 경우에는 Pipeline을 사용한다.

 

 

 


Freestyle로 간단히 echo-ip 배포하기

먼저 Freestyle을 이용해 컨테이너를 쿠버네티스 클러스터에 배포할것이다. 젠킨스는 배포를 위해 사용하는 도구이므로 배포할 대상은 사전에 구성돼 있어야 한다. 배포할 대상은 IP 주소를 반환하는 간단한 Nginx 웹서버인 echo-ip이다. CI를 실습하려면 echo-ip를 빌드해야 하므로 해당 소스를 깃허브 저장소(https://github.com/iac-source/echo-ip)에서 가지고 온다. 그리고 CD를 위해서 kubectl create 와 expose 를 Freestyle 프로젝트에서 배포로 사용하도록 정의할것이다. 

 

# echo-ip 저장소 파일 목록

  • Dockerfile
    • echo-ip 도커 이미지를 빌드하는 데 사용하는 파일이다. 도커 이미지를 만들기 위한 기초 이미지는 nginx:stable을 사용하고, 인증과 관련된 파일과 설정 파일을 복사할 후에 실행하도록 구성되어있다.
  • Jenkinsfile
    • Pipeline 실습을 위해 작성된 파일이다.
  • README.md
    • 깃허브의 초기 화면에서 안내 메세지를 표시하기 위해 사용하는 파일이다.
  • cert.crt
    • echo-ip의 Nginx에서 HTTPS 접속 시 사용하는 인증서 파일이다.
  • cert.key
    • echo-ip의 Nginx에서 HTTPS 접속 시 사용하는 비밀 키 파일이다.
  • nginx.conf 
    • echo-ip의 응답을 설정하기 위한 Nginx 설정 파일이다. 이 설정 파일은 접속자의 IP 주소를 응답할 수 있는 간단한 설정을 포함하고 있다.

 

 

# CI/CD를 구성하는 순서
1. 깃허브에서 echo-ip를 빌드할 정보가 담긴 파일들을 내려(pull)받는다.
2. 받은 파일들을 이용해서 컨테이너 이미지를 빌드한다.
3. 빌드한 이미지를 레지스트리에 저장(push)한다.
4. 레지스트리에 저장한 이미지를 쿠버네티스 클러스터에 디플로이먼트로 생성하고 로드밸런서 서비스로 노출한다.

 

1. 이름을 ldh-echo로 지정하고 Freestyle project 아이템을 선택한 후에 OK버튼을 누른다.

 

 

2. General 탭에서 Restrict where this project can be run 체크를 해제한다.

이 설정은 젠킨스의 에이전트가 특정한 레이블을 가지고 있을 때 해당 레이블을 가진 에이전트만 실행될 수 있도록 제한을 가하는 옵션인데 현재는 불필요하다.

 

 

3. Git 소스코드 관리