[CICD] Jenkins 설치 방법과 간단 사용법
현 재직중인 회사에서는 Github Action을 통해서 이미지를 빌드하고(흔히 말하길 CI 과정), Argocd를 통해서 배포(흔히 말하길 CD 과정)을 진행하고 있다. 이처럼 Github Action + Argocd 조합으로 CI/CD 프로세
dobby-isfree.tistory.com
이전 게시물에서 Jenkins를 설치하는 방법도 단일 Github Repo + 단일 Branch에서 사용하는 방법에 대해 간략하게 설명했다.
하지만 단일 Branch 기준으로 설정하게 되면, Gitflow 브랜치 전략을 사용하는곳에서는 매 Branch마다 추가해줘야하는 문제점이 있다.
그래서 Jenkins에서는 다수의 Branch 환경에서 사용할 수 있도록 설정할 수 있다.
Gitflow Branch 전략이란?

Gitflow Branch 전략(이하 Gitflow 전략)은 가장 전통적인 방법으로 가장 대중적으로 사용된다.
- 지금 재직중인 회사에서도 Gitflow 전략을 채택해서 서비스 배포가 이뤄지고 있는데
- 필자가 느끼기에는 안정적이면서, 버전관리나 휴먼에러 발생이 가장 적은 전략인것 같다.
Gitflow 전략은 흔히 아래와 같이 진행된다.
- 신규 기능 개발을 위해 개발팀에서는 develop 브랜치를 기준으로 feature 브랜치를 생성하고 작업한다.
- 개발이 다 되면 feature -> develop 브랜치로 병합이 된다.
- develop 브랜치에서 release 브랜치를 생성하고 배포 준비 및 테스트를 한다.
- 테스트가 완료되면 master 브랜치로 병합하여 운영 환경에 배포하게 된다.
즉, 위 과정처럼 많은 브랜치에서 개발이 되고, 배포가 이뤄져야한다.
브랜치 전략으로는 Gitflow가 아니더라도 Github flow 등등 여러 전략이 있고, 상황에 따라서 선택하면 된다.
Gitflow에서 Jenkins는 어떻게 사용할 수 있을까?
Jenkins에서도 역시나 단일 Repo + 다수의 브랜치일때는 각 브랜치에 있는 Jenkinsfile을 참조해서 사용하게 된다.
MultiBranch Item 생성하기
제일 처음 Item을 생성할 때 Multibranch Pipeline을 선택해서 생성하면 된다.

그 다음에는 어떤 Repo를 대상으로 할지, 그리고 어떤 브랜치를 대상으로 할지 선택하면 된다.
- 만약 특정 브랜치 이름이 있다면 해도 되지만, *로 전체 브랜치를 대상으로 하는것을 권장한다.

그리고 트리거 전략을 선택할 수 있는데, 여기서 builds triggered by webooks을 선택하는것을 권장한다.

물론 by indexing도 선택할 수 있는데, 이는 코드가 병합되고 다음번 Indexing시간까지 기다려야하는 불편함이 있다.
- by indexing
- indexing 시간을 하단에 정하는데 해당 시간마다 Repo 브랜치를 점검하고 변경사항을 확인한다.
- indexing 시간때 전체 브랜치를 점검하고 작업이 이뤄지기 때문에 의도에 맞게 배포 일자를 선택하는것이 어려워진다.
- by webhooks
- 코드 병합이 이뤄지면 Jenkins에 Webhook 이벤트가 발생하고, 이때 배포가 이뤄지는 방법이다.
- 코드 병합 때 바로 이벤트가 발생하고 배포가 이뤄지기 때문에 가장 일반적인 방법이다.
Multibranch Pipeline 실행하기
최초에는 Pipeline을 한번 실행해서 Jenkinsfile이 있는 브랜치를 확인하면 된다.
- 브랜치 Indexing을 해야한다.(물론 하지 않아도 지정한 주기에 맞춰서 Indexing이 된다.)


만약 브랜치에 Jenkinsfile이 있으면 아래와 같이 브랜치 이름이 뜨게 되고, Jenkinsfile이 없다면 뜨지 않는다.

이 단계까지 왔다면 다 끝났다. 이후에는 각 브랜치에 Jenkinsfile을 작성하면 된다. 테스트를 위해서는 아래 코드를 참고하면 된다.
### 테스트 Jenkinsfile
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building..'
}
}
stage('Test') {
steps {
echo 'Testing..'
}
}
stage('Deploy') {
steps {
echo 'Deploying...'
}
}
}
}
그리고 내가 지정한 브랜치에 병합이 일어나서 Trigger가 된다면 내가 위에서 작성한 Jenkinsfile이 실행되는 구조이다.

MultiBranch 별 Jenkinsfile 구성하기
Jenkinsfile은 각 브랜치마다 달리 설정할 수 있으나, Gitflow 전략에서는 결국에는 Jenkinsfile은 동일한 파일이 된다.
그렇기에 Jenkinsfile에서 브랜치 이름 또는 Tag 기반으로 분기를 하는게 중요하다.
그리고 분기처리를 할 때는 보통 브랜치 이름으로 분기처리를 하게 된다.
Webhook으로 Trigger를 받는다면 아래와 같이 Jenkins Env를 사용해서 분기를 할 수 있다.
- {Jenkins 주소}/env-vars.html/로 학인 가능하다.

GIT_BRANCH로 Trigger 받은 브랜치 이름에 대해서 알 수 있으니, 아래와 같이 브랜치명을 기본으로 분기처리하면 된다.
## Jenkins Env로 브랜치 분기처리
pipeline {
agent any
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Branch Name') {
steps {
script {
def branchName = env.GIT_BRANCH
echo "Branch Name: ${branchName}"
if (branchName == 'develop') {
echo "Building develop branch"
// develop 브랜치 빌드 작업
} else if (branchName == 'release') {
echo "Building release branch"
// release 브랜치 빌드 작업
} else {
echo "Building other branch"
// 다른 브랜치 작업
}
}
}
}
}
}
지금까지 Jenkins에서 Multibranch Pipeline에 대해서 알아보았다.
필자는 지금까지 Github Action만 사용했었기에 Jenkins는 아직 익숙하지 않다.
- Github을 사용할 때는 브랜치명, 태그, 커밋 등등의 정보로 분기처리가 가능했는데
- Jenkins를 사용할 때는 Github Trigger로 넘겨주는 정보로만 사용이 가능하기에 제약사항이 있는것 같다.
각자의 장단점이 있는것 같으나, 지인들에게 물어보면 보통 Jenkins보다는 Github Action을 선호하는것 같다.(비용 문제만 빼면)
새로운 직장에서는 Jenkins를 배포도구 중 하나로 사용하고 있어서, 알아보았다.
Jenkins도 사용하고 Argocd도 사용하고 Spanniker도 사용하고 많은걸 사용한다.
- Spanniker는 설치만 해봤지, 사용해본적은 없는데 :(
아직 배울것이 많은 세상이고, 하나씩 배워가자. 어제보다 더 발전한 오늘의 내가 되어 있기를!!
끝!
'기술 토론장 > [Ops] Devops' 카테고리의 다른 글
| [k8s] kind 활용, Local PC에서 Kubernetes 설치 (0) | 2025.03.19 |
|---|---|
| [CICD] Jenkins 설치 방법과 간단 사용법 (0) | 2025.02.19 |
| [AWS][AI] RAG기반의 생성형 AI Chatbot 성능 끌어올리기 (2) | 2024.11.21 |
| [AWS][AI] AI Chatbot 구현하기 use Bedrock KnowledgeBase (3) | 2024.10.06 |
| [AWS][AI] AWS Bedrock KnowledgeBase 사용 방법 (1) | 2024.10.05 |