Jenkins는 소프트웨어 개발 과정을 자동화하기 위한 오픈소스 도구이다. 주로 CI/CD, 즉 지속적 통합과 지속적 배포를 구현하는 데 사용된다. 개발자가 코드를 수정하고 저장소에 반영할 때마다 빌드, 테스트, 배포 과정을 자동으로 실행해준다.
사람이 직접 서버에 접속해 명령어를 입력하던 과정을 하나의 트리거로 대체할 수 있다는 점이 Jenkins의 핵심 가치다. 코드 변경이 발생하면 Jenkins가 이를 감지하고, 미리 정의된 절차에 따라 작업을 수행한다. 이로 인해 배포 속도는 빨라지고, 사람이 개입하면서 발생할 수 있는 실수는 줄어든다.
특히 Jenkins는 특정 플랫폼에 종속되지 않는다. Github뿐만 아니라 HTTP 요청만 보낼 수 있다면 어떤 시스템에서도 Jenkins 파이프라인을 실행할 수 있다. 이러한 유연성 때문에 다양한 조직과 환경에서 널리 사용되고 있다.
Jenkins CI/CD Pipeline
CI/CD에서 가장 중요한 개념은 파이프라인이다. 파이프라인은 Jenkins가 수행할 작업의 순서를 정의한 것이다. 예를 들어 코드 체크아웃, 빌드, 테스트, 배포와 같은 단계들이 순차적으로 실행되도록 구성할 수 있다.
Jenkins 파이프라인은 코드로 관리하는 것이 일반적이다. .jenkinsfile 또는 .jenkinspipeline 파일에 파이프라인을 정의하면 버전 관리가 가능해지고, 변경 이력 추적과 롤백이 쉬워진다. 서버가 초기화되거나 Jenkins가 재설치되더라도 파이프라인 스크립트만 있으면 빠르게 복구할 수 있다.
실무에서는 환경별로 서로 다른 파이프라인을 구성하는 경우가 많다. 개발 환경에서는 빠른 피드백을 위해 빌드와 간단한 테스트 위주로, 운영 환경에서는 안정성을 위해 검증 단계를 더 추가한다. 이러한 차이를 파이프라인 단위로 분리하면 관리가 수월해진다.
Jenkins는 단순히 자동 실행 도구가 아니라, 배포 정책과 개발 흐름을 코드로 표현하는 도구라고 볼 수 있다.
Github Webhook Pipeline 트리거
Github Webhook은 저장소에서 특정 이벤트가 발생했을 때 외부 서버로 HTTP 요청을 보내는 기능이다. push, merge, release 등 다양한 이벤트를 트리거로 사용할 수 있다. Jenkins는 이 Webhook을 받아 파이프라인을 실행한다.
예를 들어 dev 브랜치에 병합이 발생하면 개발 서버로 배포하는 파이프라인을 실행할 수 있다. prod 브랜치에 병합이 발생하면 운영 서버로 배포하는 파이프라인을 실행하도록 구성할 수 있다. 릴리즈 이벤트가 발생했을 경우에는 빌드 결과물을 압축해 외부 시스템으로 전달할 수도 있다.
Webhook의 장점은 조건부 트리거가 가능하다는 점이다. 요청 바디에는 브랜치 정보, 커밋 메시지, 라벨 정보 등이 포함된다. 이를 활용해 특정 라벨이 붙은 경우에만 배포 파이프라인을 실행하도록 제어할 수 있다.
이러한 구조를 사용하면 단순 병합과 실제 배포를 명확히 구분할 수 있으며, 불필요한 배포를 방지할 수 있다.
Jenkins 환경별 배포 구성
실무에서는 보통 여러 배포 환경을 운영한다. 개발 환경, 운영 환경, 그리고 릴리즈 환경이 대표적이다. 각 환경은 목적과 성격이 다르기 때문에 하나의 파이프라인으로 모두 처리하기 어렵다.
개발 환경은 개발자들이 작성한 코드를 통합하고 운영 환경에 배포하기 전 검증하는 역할을 한다. 운영 환경은 실제 사용자가 접속하는 환경이므로 보안과 안정성이 최우선이다. 릴리즈 환경은 온프레미스나 외부 시스템 배포를 위해 빌드 결과물을 패키징하는 용도로 사용될 수 있다.
Jenkins 파이프라인을 환경별로 분리하면 각 환경의 특성에 맞는 작업을 정의할 수 있다. 예를 들어 개발 환경은 macOS, 운영 환경은 Linux, 릴리즈 환경은 Windows 기반으로 구성할 수도 있다.
이처럼 Jenkins는 단순한 자동화 도구를 넘어 개발과 배포 흐름 전체를 구조화하는 역할을 수행한다.
정리하면, 개발자는 Github에 코드 변경을 반영하고, Webhook을 통해 Jenkins가 이를 감지한다. Jenkins는 저장소에 정의된 파이프라인 스크립트를 읽어 정해진 순서대로 작업을 수행한다. 이 과정이 자동으로 반복되면서 안정적인 CI/CD 환경이 완성된다.