DevOps/CI-CD

[Jenkins] Jenkins 란? (with. docker)

yubi5050 2023. 8. 30. 15:23

Jenkins 란?

젠킨스(Jenkins)는 지속적 통합(Continuous Integration, CI) 및 지속적 전달(Continuous Delivery, CD)를 지원하기 위해 개발된 오픈 소스 자동화 도구로, 소프트웨어 개발 및 배포 과정에서 자동화된 빌드, 테스트, 배포 작업을 수행하여 개발자와 팀이 소프트웨어를 빠르게 개발하고 안정적으로 배포할 수 있도록 도와줌

 

Jenkins 주요 특징

지속적 통합(CI): 소스 코드 변경이 발생할 때마다 자동으로 빌드 및 테스트를 실행하여 코드 품질을 유지함

지속적 전달(CD): 테스트 및 빌드가 성공하면, Staging / Production 환경으로 자동 배포

다양한 플러그인 지원 : AWS, Docker 등 다양한 플러그인 등을 지원하여, 특정 기능을 추가 하거나 외부 도구와의 통합을 용이하게 함

웹 기반 대시보드 : 웹 대시보드를 통해 빌드 및 배포 상태를 모니터링 하고 관리 가능

알림 및 통지 : 빌드나 배포 상태에 대한 알림, 이메일, 메시지 수신 가능

 

ex) Git에서 프로젝트를 push 하면, Jenkins에서 CI 빌드가 진행되고, 테스트를 통과하면, CD 파이프라인을 통해 원하는 환경으로 배포되고, 빌드나 배포에 성공/실패시 알림이 옴. 전 과정에 대한 성공 여부를 웹 기반 대시 보드로 확인 가능함

 

Jenkins 설치 방법 (with. Docker)

1. 원하는 환경 (EC2 or 젠킨스 빌드 서버 or 로컬) 선택

해당 환경에 맞는 Docker를 설치함

- 만약 EC2 free-tier라 (ram 1gb) 일 경우 swap-memory를 추가로 지정해주어야 젠킨스가 안멈춤

- https://gksdudrb922.tistory.com/196  // jenkins swap memory 설정 링크

 

2. Jenkins 이미지 다운로드 및 실행

sudo docker run -d --name jenkins --restart=on-failure \
-p 8080:8080 \
-p 25:25 \
-v ~/jenkins_home:/var/jenkins_home \
-e TZ=Asia/Seoul \
-u root \
jenkins/jenkins

 

3. 실행 된 Docker 에서의 Jenkins 초기 비밀번호를 복사함

sudo docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

 

4. Jenkins url에 접속하여 기본 셋팅

- URL 접속 : (ex) AWS EC2 : http://3.34.41.245:8080)

- Jenkins 초기 비밀번호 입력 및 관리자 유저 정보 입력

- 필요한 Plugin 셋팅

 

5. 프로젝트 생성

-  목적 (CI / CD)에 맞는 item 을 구성하여 CI/CD 플로우 완성 

 

추가

Jenkins api_token 생성

- Jenkins - settings - user - 설정 - api_token 생성

- API 콜 등으로 api_token이 포함된 url로 build 나 deploy 등 특정 job을 실행 가능함

 

git 저장소 (github, bitbucket)와 연동되는 SSH credential 만들기

1) jenkins docker 안에 들어가서 ssh-keygen

2) 해당 ssh-keygen으로 root/.ssh에 공개키와 비밀키가 생성됨

3) id_rsa.pub (공개키) 내용을 (cat id_rsa.pub)를 복사하여 git 저장소에 등록

4) id_rsa (비밀키)는 jenkins credentials 에 등록

5) known host 등에 등록하라고 하면 추가 다음과 같은 명령어 입력

- git ls-remote -h -- <원격 저장소의 ssh git link> HEAD

 

jenkins build 테스트 호출 (with. curl, postman, command line 등)

만약 특정 빌드가 잘 되는지, 혹은 코드 로직에서 연결 하고 싶다면, 다음과 같이 URL endpoint를 작성해서 테스트도 가능하다.

- URL : http://<jenkins_username>:<jenkins_api_token>@<jenkins_url>/job/<job_name>/build

- curl : curl -i -X POST 'http://<jenkins_username>:<jenkins_api_token>@<jenkins_url>/job/<job_name>/build?token= <token_name>'