![[Jenkins] Item 추가 및 Pipeline 작성 + 테스트](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxtasw%2FbtsMel5drJG%2FWGiNUh5AgXCHdHSNspRTo0%2Fimg.png)
✔️ CICD 테스트를 진행하기 앞서 테스트 환경과 관련 포스팅을 참고해주세요.
-- 테스트 환경 --
AWS EC2 : Ubuntu
WAS : Java 17, Springboot 3.x
SCM : Github
CICD : Jenkins
🧷 [Ubuntu] Java 및 Jenkins 설치 + 스왑 메모리
🧷 [Jenkins] Github 자격 증명 추가 + 웹훅 설정
🧷 [Jenkins] 스프링부트 프로젝트 CICD 테스트 +삽질 로그
✅ 들어가기에 앞서
Jenkins라는 CI툴을 제대로 활용하기 위해서는 아이템(Item), 파이프라인(Pipeline), Job과 같은 기본적으로 숙지해야 하는 것들이 있습니다.
이번에는 이러한 용어들이 무엇인지에 대해 간단하게 알아보고, 이전에 등록한 웹훅에 대한 파이프라인을 작성하고 테스트 해보려 합니다.
Jenkins 잡(Job)이란?
Jenkins에서 작업을 실행하는 기본 단위입니다. 주로 빌드, 테스트, 배포 등의 작업을 정의하고 실행합니다.
Jenkins 아이템(Item)이란?
Jenkins에서 생성할 수 있는 모든 종류의 프로젝트를 의미합니다.
아이템의 종류로는 다음과 같습니다.
- Freestyle Project: 간단한 빌드 작업을 위한 기본 프로젝트.
- Pipeline: 복잡한 빌드/배포 프로세스를 스크립트로 정의하는 프로젝트.
- Multibranch Pipeline: 여러 브랜치를 자동으로 관리하고 각 브랜치마다 파이프라인을 설정하는 프로젝트.
- Folder: 여러 아이템(프로젝트)을 폴더로 묶어 관리.
아이템 == 잡을 동일하게 봐도 무방하다고 생각하지만, 엄밀히 따지면 아이템이 더 큰 개념입니다.
Jenkins 파이프라인(Pipeline)이란?
파이프라인은 코드로 정의된 자동화 프로세스입니다.
Jenkins에서는 Pipeline 아이템을 생성하거나 Jenkinsfile로 파이프라인을 관리할수 있습니다.
다음은 GPT를 통한 3가지 용어의 비유입니다.
🧩 용어 정리 (비유)
- Item (아이템) = 책장
→ Jenkins에서 생성하는 모든 프로젝트를 포함하는 개념. - Job (잡) = 책
→ 책장에 꽂혀 있는 실제 작업 단위. Jenkins가 수행하는 빌드/배포 과정. - Pipeline (파이프라인) = 책 속의 목차
→ 빌드, 테스트, 배포 같은 복잡한 과정을 코드로 작성한 스크립트.
➕ 아이템(Item) 생성
이제 용어들에 대한 기본적인 이해를 마쳤으니, 본격적으로 CICD를 위한 Jenkins 아이템을 생성해보도록 하겠습니다.
Jenkins GUI에 접속 후 왼쪽 'New Item'을 통해 아이템을 생성해보겠습니다.
빌드 뿐만 아니라 배포까지 과정을 수행하기 위해 Pipeline 아이템으로 생성하겠습니다.
이름의 경우 원하는 이름을 사용하면 될 것 같습니다.
첫 번째로 General 부분입니다. 옵션들에 대해 설명하면 다음과 같습니다.
- Do not allow concurrent builds
- 동시 빌드 허용 안함 (체크 시 이전 빌드가 끝날 때까지 새로운 빌드 대기)
- 체크 시 Abort previous builds 옵션이 생성되는데, 해당 옵션 체크 시 새로운 빌드가 시작되면 실행 중인 빌드들이 강제 중단 됩니다.
- Do not allow the pipeline to resume if the controller restart
- Jenkins 서버 재시작 후, 중단된 파이프라인을 다시 이어서 실행할지 여부를 결정 (체크 시 서버 재시작 후 파이프라인 자동 복구 x)
- Github project
- 이 파이프라인이 Github 저장소와 연동된 프로젝트임을 명시 (체크 시 Github 저장소 URL 입력 필드 생성)
- 이번 테스트는 Github와 연동되기 때문에 필수입니다.
- Pipeline speed/durabillity override
- 파이프라인 실행 시 속도와 안전성 사이에서 어떤 걸 우선할지 설정 (체크 시 옵션 리스트 생성)
- Preserve stashes from completed builds
- 완료된 빌드의 임시 파일(stash) 보존 (체크 시 완료된 빌드의 스태시도 보존해서 재사용 가능)
- 빌드 간 파일 공유가 필요할 때 주로 사용합니다.
- Throttle builds
- 특정 조건 하에서 빌드 수 제한
- 오래된 빌드 삭제
- Jenkins가 자동으로 오래된 빌드 기록을 삭제해 디스크 공간 절약
- 이 필드는 매개변수가 있습니다.
- 빌드 실행 전에 사용자 입력값을 받을 수 있음
- 브랜치 선택, 환경 설정, 버전 지정 등에 활용할 수 있습니다.
이번 테스트에서는 Do not allow concurrent builds, Github project 옵션만 체크하도록 하겠습니다.
다음은 Triggers 부분입니다. 빌드를 자동으로 시작하는 다양한 방법들을 설정할 수 있습니다.
이번 프로젝트에서는 3번째 옵션인 'GitHub hook trigger for GITScm polling'을 선택하겠습니다.
해당 옵션은 Github Webhook을 통해 푸시(push) 이벤트가 발생할 때 해당 아이템을 빌드하는 옵션입니다.
마지막으로 파이프라인 스크립트를 작성하는 부분입니다.
우선 간단한 트리거 유무만 확인하기 위해서 한 개의 stage로 구성했습니다.
echo 구문을 통해 콘솔을 출력하고, main 브랜치에서의 이벤트로만 빌드가 유발 되도록 설정했습니다.
credentialsId의 경우에는 이전 포스팅에서 추가했던 자격 증명 ID를 넣어주면 됩니다.
url은 레포지토리의 링크입니다. 레포지토리의 메인 URL + .git을 추가해주면 됩니다.
+ 스크립트 내부의 git branch : 'main' 부분에 어떤 브랜치 명을 넣냐에 따라서 이후 웹훅 테스트 과정에서 이벤트의 수신 유무가 결정되는 것 같습니다. main을 master로 변경 시 main 브랜치의 push이벤트에는 빌드가 되지 않는 걸 확인할 수 있었습니다. -> 이는 곧 특정 브랜치에만 웹훅을 걸기 위한 방법으로 사용할 수 있을 듯 싶습니다.
아래는 스크립트입니다.
pipeline {
agent any // 파이프라인이 실행될 에이전트 지정
stages {
stage('Check main Branch') {
steps {
echo 'echo : trigger success'
git branch: 'main',
credentialsId: 'Github-Auth',
url: 'https://github.com/Be-HinD/InfraStructure_Sample.git'
}
}
}
}
💻 테스트
이제 아무것도 없는 레포지토리로 돌아가서 실제로 푸시 이벤트가 발생할 때 제대로 웹훅이 동작하고, Jenkins 스크립트가 잘 실행되는지 확인해보도록 하겠습니다.
우선 스프링부트 프로젝트가 초기화된 폴더를 레포지토리에 푸시해보겠습니다.
제대로 푸시가 이루어진걸 확인할 수 있습니다.
이제 웹훅이 제대로 걸렸는지 확인해봐야 하는데요. 다시 해당 레포지토리 -> Settings -> Webhooks 탭에 들어가면 이를 확인할 수 있습니다.
조금 더 세부적으로 보고싶다면 해당 Webhook 클릭 -> Recent Deliveries 탭을 들어가시면 아래와 같이 상세 HTTP 요청 결과를 확인할 수 있습니다.
그럼 다시 Jenkins로 돌아가서 빌드가 제대로 유발되었는지 확인해보겠습니다.
+ 아무래도 아이템 등록 시 Jenkins에서 최초 한번 수동으로 빌드를 해야지 웹훅을 수신할 수 있게 되는 것 같습니다.
Dashboard -> Jenkins 관리 -> System Log를 통해 확인한 결과 정상적으로 PushEvent를 수신한 것을 확인할 수 있습니다.
또한 스크립트로 작성된 echo 구문이 제대로 출력이 되는걸 확인할 수 있습니다.👏👏
다음 포스팅에서는 웹훅 이벤트 수신에 따라 빌드 + 실행까지 파이프라인을 통해서 구축하고, 실제로 스프링부트 프로젝트를 Jenkins를 통해 실행하는 방법에 대해 알아보겠습니다.
'DevOps.' 카테고리의 다른 글
[Jenkins] Github 자격 증명 추가 + 웹훅 설정 (0) | 2025.02.12 |
---|---|
[Ubuntu] Java 및 Jenkins 설치 + 스왑 메모리 (2) | 2025.02.09 |
이게 CI야? CD야? (0) | 2025.02.09 |
[INFRA] Nginx In Container?, host? (0) | 2024.04.25 |
개발 기술 블로그, Dev
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!