CI/CD를 처음 접할 때, 보통 Github Actions 와 Jenkins 라는 이름을 자연스럽게 접하게 된다!
깃허브 액션이 좀 더 쉽고 간편하고, 젠킨스가 좀 더 복잡하기는 하다
하지만 그만큼 더 강력하다
이 글에서는 Jenkins가 무엇인지, 왜 필요한지, 그리고 기본적인 동작 방식을 정리해보려 한다
젠킨스는 주로 지속적 통합(Continuous Integration, CI) 과 지속적 배포(Continuous Delivery, CD) 를 위한 도구로 사용된다.
쉽게 말하면, "코드를 커밋하거나 푸시할 때마다, Jenkins가 알아서 빌드, 테스트, 배포까지 자동으로 처리해주는 시스템" 이다.
Jenkins를 이용하면 사람이 직접 빌드 명령어를 입력하거나 서버에 수동으로 코드를 올리는 과정을 생략할 수 있기 때문에, 개발 효율성과 배포 안정성이 크게 높아진다.
[Jenkins가 필요한 이유]
Jenkins 기본 동작 흐름 구조
- 소스 코드 변경 감지
- GitHub, GitLab 등 소스 저장소와 연동하여 코드를 모니터링
- 보통 '커밋' 또는 'Pull Request' 발생 시 동작
- Build Job 실행
- 코드를 빌드하고, 필요한 테스트를 수행
- 예를 들면, Spring의 Maven 프로젝트의 경우 mvn clean install 명령어를 실행
- 테스트 및 결과 분석
- 유닛 테스트, 통합 테스트 등을 자동으로 실행하고 결과를 수집
- 실패 시 알림(Slack, Email 등)을 보내는 것도 가능
- 배포(Deploy)
- 테스트가 모두 통과하면 운영 서버나 테스트 서버로 자동 배포를 수행
- 모니터링 및 피드백
- Job이 성공했는지 실패했는지, 로그를 통해 모니터링
- 문제 발생 시 바로 대응 가능
Jenkins를 설치하고 시작하는 방법(Docker로 Jenkins 띄우기)
sudo docker run -d \ # detached 모드(백그라운드 실행)
--name jenkins \ # 컨테이너 이름을 jenkins로 지정
-p 8888:8080 \ # 호스트 8888포트를 컨테이너 8080 포트로 연결(Jenkins UI로 접속)
-p 50000:50000 \ # 에이전트 통신용 포트 개방(Jenkins Slave-Agent용)
-v jenkins_home:/var/jenkins_home \ # Jenkins 데이터(설정, 플러그인 등) 영구 저장(Volume 사용)
-v /var/run/docker.sock:/var/run/docker.sock \ # 컨테이너 안에서도 Docker 명령어를 사용할 수 있도록 Docker Daemon 소켓 공유
--group-add 0 \ # 컨테이너에 root 그룹(0번 그룹) 권한 추가 (Docker 명령 실행을 위해 필요)
--restart always \ # 컨테이너가 죽더라도 항상 재시작(운영에 적합한 옵션)
jenkins-custom # 사용할 이미지 이름(jenkins-custom은 아마 커스텀 이미지를 직접 빌드했을 가능성 있음)
이후에 아래 URL로 접속해 젠킨스 UI로 편하게 다루기!
http://localhost:8888
[Jenkins 주요 개념 정리]
- Job(또는 Pipeline): Jenkins가 수행할 작업 단위. 예를 들면 “Build and Deploy” 하나의 작업이 Job이다!
- Master-Slave 구조: Jenkins 서버(Master)가 여러 대의 실행 서버(Slave, Agent)를 관리할 수 있다. 대규모 프로젝트에서는 빌드를 분산 처리하기 위해 이 구조를 사용한다
- Plugin: Jenkins는 수천 개의 플러그인을 지원한다. 예를 들어 Git 연동, Slack 알림, Docker 배포 등을 플러그인으로 확장할 수 있다
- Pipeline Script(Jenkinsfile): 빌드, 테스트, 배포 과정을 코드로 관리할 수 있는 스크립트 파일이다. 인프라를 코드로 관리하는 흐름(IaC, Infrastructure as Code)과 연결된다
나 역시 Jenkins를 처음 도입하면서 삽질도 많이 했지만, 직접 설정하고 운영해보니 “자동화가 이렇게 개발 생산성을 올려주는구나”를 몸소 느낄 수 있었다. 앞으로 Jenkins를 활용해서 더 다양한 CI/CD 흐름을 만들어보는 것이 목표이다 ㅎ
https://claremont.tistory.com/entry/CI-CD-Jenkinsfile-%EC%9E%91%EC%84%B1%EB%B2%95
[CI-CD] Jenkinsfile 작성법
https://claremont.tistory.com/entry/CI-CD-%EC%A0%A0%ED%82%A8%EC%8A%A4Jenkins-%EA%B0%9C%EB%85%90-%EC%9E%A1%EA%B8%B0 [CI-CD] 젠킨스(Jenkins) 개념 잡기CI/CD를 처음 접할 때, 보통 Github Actions 와 Jenkins 라는 이름을 자연스럽게 접하
claremont.tistory.com
'DevOps > CI-CD' 카테고리의 다른 글
[CI-CD] ArgoCD를 쓰는 이유 (0) | 2025.05.02 |
---|---|
[CI-CD] Jenkinsfile 작성법 (0) | 2025.05.02 |