Jenkins

RumbleBi·2022년 8월 30일
0
post-thumbnail

Jenkins 란?

Java Runtime 위에서 동작하는 자동화 서버이며 다양한 플러그인을 종합해서 CI/CD Pipeline을 만들어서 자동화 작업을 가능하게 한다. 즉, 소스코드의 repo에 대한 지속적인 통합(CI, Continuous Integration)과 지속적 배포(CD, Continuous Delivery) 환경을 구축하기 위한 도구다. build, test, deploy 프로세스를 자동화하여 소프트웨어 품질과 개발 생산성을 높일 수 있다.

예를 들면, 로컬환경에서개발 -> commit -> push 하면 정해진 파이프라인을 따라 build, test 등을 하여 배포시키는 개념이다.

CI, CD 란?
CI: 여러 개발자들의 코드를 계속해서 통합하는 것.
CD: 개발자들이 코드를 계속 작성하면 사용자 및 내부 사용자들(QA 등등)이 계속 사용할 수 있게 만드는 것. 즉 지속적으로 배포가능한 상태를 유지하는 것

Jenkins 이전의 개발 방식

Jenkins와 같은 도구들이 등장하기 이전에는 일정 시간마다 빌드를 실행하는 방식이 일반적이었다. 개발자들이 당일 작성한 소스코드의 커밋이 모두 끝난 시간대에 빌드가 집중적으로 진행되었다. 하지만, Jenkins를 통해 자동으로 test, deploy까지 작동되도록 도와주는 도구이며 git과 같은 버전관리툴과 연동할 수도 있다.

Jenkins 의 장점

1. 프로젝트 표준 컴파일 환경에서의 컴파일 오류 검출

2. 자동화 테스트 수행

git과 같은 버전관리시스템과 연동하여 코드의 변경을 감지하고 자동화 테스트를 수행하기 때문에 만약 개발자가 실시하지 못한 테스트가 있다고 하더라도 Jenkins에서 확인을 해준다.

3. 정적 코드 분석에 의한 코딩 규약 준수여부 체크

자동화 테스트와 마찬가지로 개인이 미처 실시하지 못한 표준 준수 검사나 정적 분석을 통한 품질 검사를 빌드 내부에서 수행한다.

4. 프로파일링 툴을 이용한 소스코드 변경에 따른 성능 변화 감시

5. 결합 테스트 환경에 대한 배포작업

Jenkins Pipeline

Pipeline 이란 연속적인 이벤트 혹은 Job의 그룹을 의미한다.
즉, 자신이 만든 젠킨스 Job들을 순차적 혹은 병렬적으로 실행시키거나 특별하게 작성한 스크립트로 이벤트들을 연속적으로 실행시키는 등의 일을 지원하는 기능이다. 간단히 말해, Jenkins Pipeline은 Jenkins를 사용하여 연속적인 전달 파이프 라인 의 통합 및 구현을 지원하는 플러그인의 조합이다. 파이프 라인은 파이프 라인 DSL (Domain-Specific Language)을 통해 간단하거나 복잡한 전달 파이프 라인을 "코드"로 생성 할 수있는 확장 가능한 자동화 서버를 갖추고 있다.

Agent Section : 여러 Slave를 두고 작업을 할 때 어떤 젠킨스가 어떤 일을 할지 지정한다.

Post Section : 각 스테이지가 끝난 후 후속 조치 설정 (ex. success, failure, always, cleanup..)

Stages Section : 어떤 일들을 처리할 건지 일련의 Stage를 정의함. 일종의 카테고리

Declaratives : Enviroment -> 어떤 Pipeline이나 stage scope 의 환경 변수 설정

Parameter -> 파이프라인 실행시 파라미터 받음

Triggers -> 어떤 형태로 트리거 되는가

When -> 언제 실행되는가 ( ex. 맨처음에만 변수 설정하고 그 뒤에는 분기문을 둬서 안해도 되게)

Steps : 여러 작업들을 실행 가능

Jenkins Plugin

Credentials Plugin : 각종 리소스에 접근하기 위한 토큰, 키 등을 저장하고 관리하기 위한 플러그인

Git : git의 소스코드를 가져와 빌드하는 등 git과의 연동을 위한 플러그인

Pipeline : 젠킨스의 핵심 기능인 파이프라인을 관리하기 위한 플러그인

Kubernetes : 쿠버네티스 클러스터에서 동적인 에이전트 실행, Docker 이미지로 정의된 각 에이전트에 대한 pods를 작성하여 빌드 후 실행 후 종

AWS CodeDeploy : 젠킨스 프로젝트의 빌드 후 AWS 인스턴스로의 애플리케이션 배포, zip 파일을 Amazon 인스턴스 집합으로 roll-out 하여 배포

Blue Ocean : 젠킨스 파이프라인을 가시성 좋게 변환하여 표시

Maven Integration : Maven을 이용하여 프로젝트를 빌드하고 JAR 또는 WAR 빌드 아티팩트 생성, Apache Maven을 사용하는 프로젝트에서 활용

JIRA Plugin : 이슈 추적 도구인 JIRA와 Jenkins를 연동하는 플러그인. JIRA REST API를 이용하여 젠킨스 빌드 페이지에 대한 백 포인터 역할

ThinBackup : 빌드 기록으로 작업의 백업 및 구성 관리, 자동 백업 기능을 통해 프로젝트를 쉽게 관리

Docker Build Step : 동적인 프로비저닝을 위한 플러그인. 다양한 도커 명령을 빌드 단계에서 사용. 이미지에서 컨테이너 생성 / 컨테이너 시작 및 중지, Docker / Docker Pipeline 등이 있음

Jenkins Disk-usage : 디스크 사용량 분석 플러그인. 젠킨스 프로젝트의 디스크 사용량을 분석하여 알리고 예상치 못한 디스크 사용을 예방

Amazon EC2 : EC2 인스턴스와 젠킨스의 연동을 위한 플러그인. ssh를 통한 publish를 하지 않아도 됨

profile
기억보다는 기록하는 개발자

0개의 댓글