Jenkins로 시작하는 CI: Freestyle 프로젝트 구축 가이드

2023. 10. 26. 12:49·DevOps
반응형

이번 포스트에서는 Jenkins에서 Freestyle방식을 사용해서 Item을 구축하는 방법에 대해서 설명한다.

 

요즘은 Pipeline을 많이 사용하지만 Freestyle도 나름 간단하게 적용시켜서 사용하기에는 나쁘지 않은 것 같다.

 


 

1. Jenkins의 Item에 대한 이해


1-1. Item이란?

  • Jenkins에서 "Item" 또는 "Job"은 자동화 작업의 기본 단위다. 개발자가 젠킨스를 통해 CI/CD 프로젝트를 구축하려면 아이템(Item)을 생성하여야 한다.

jenkins item 생성
jenkins item 생성

Item은 특정한 작업을 수행하기 위한 설정과 함께 저장되는 것으로, 예를 들어 소스 코드의 빌드, 테스트 실행, 배포 등을 수행할 수 있다.
Jenkins는 다양한 종류의 Job을 제공하며, 가장 일반적으로 사용되는 것은 "Freestyle project"와 "Pipeline"이다.

 

1-2. Freestyle project:

  • 가장 기본적인 형태의 Job이다. GUI를 통해 간단하게 설정할 수 있으며, 소스 코드를 체크아웃한 후 쉘 스크립트나 배치 파일 등을 실행할 수 있다.

1-3. Pipeline:

  • 코드로 작성되는 Job으로, 복잡한 워크플로우와 다중 스텝을 처리할 수 있다. Jenkinsfile에 작성되며, 이 파일을 소스 코드 저장소에 포함시킬 수 있다.

 

1-4. Jenkins의 Project, Item, Job 용어 설명

Jenkins에서 "Project," "Item," "Job"이라는 용어는 서로 매우 밀접한 관계가 있지만, 약간의 차이가 있다.
  • Item
    • Jenkins에서 가장 기본적인 구성 단위이다. 여기에는 Job이 포함되어 있지만, Folder나 MultiJob 같은 다른 타입의 Item도 있을 수 있다. 즉, Item은 Job을 포함한 보다 일반적인 개념이다.

  • Job:
    • Item 중에서도 실제로 빌드, 테스트, 배포 등을 수행하는 작업을 의미한다. Freestyle Project, Pipeline 등이 이에 해당한다.

  • Project:
    • 일반적으로 Job과 같은 의미로 사용된다. 특히 Freestyle Project와 같이 'Project'라는 단어가 명시적으로 사용되는 경우가 있다.

보통 이 세 개의 용어는 상황에 따라 혼용되어 사용되곤 하지만, 정확한 의미를 전달하고 싶을 때는 위의 차이점을 고려해야 한다.
예를 들어, "모든 Item을 나열하라"고 할 때에는 Job뿐만 아니라 다른 타입의 Item (예: 폴더)까지도 포함될 수 있다. 하지만 "모든 Job을 나열하라"고 하면, 실제 빌드나 배포 작업을 수행하는 Item만을 의미하게 된다.

 


 

2. FreeStyle vs Pipeline


2-1. Freestyle

Jenkins freestyle project
Jenkins freestyle project

  • 장점
    • 사용자 친화적:
      • 웹 기반의 GUI를 통해 간단하게 설정을 할 수 있다. 플러그인을 쉽게 추가하거나 제거할 수 있어 사용성이 높다.

  • 단점
    • 유지 보수성:
      • 설정 변경을 위해서는 Jenkins 관리자 인터페이스에 직접 로그인해야 하고, 각 Job 설정을 수동으로 변경해야 한다.
    • 가시성:
      • 빌드나 배포 과정을 콘솔 출력을 통해서만 확인할 수 있어, 전체적인 흐름을 한눈에 볼 수 없다.

2-2. Pipeline

jenkins Pipeline project
jenkins Pipeline project

  • 장점
    • 버전 관리:
      • Jenkinsfile을 사용하여 코드와 함께 파이프라인 설정을 저장소에 저장할 수 있다. 이로 인해 코드 리뷰나 버전 관리가 용이하다.
    • 세밀한 흐름 제어:
      • 하나의 Jenkinsfile을 통해 전체 CI/CD 흐름을 제어할 수 있어, 복잡한 워크플로우를 구현할 수 있다.
    • 실시간 모니터링:
      • GUI를 통해 빌드의 현재 상태와 통계, 평균 수행 시간 등을 쉽게 확인할 수 있다.

  • 단점
    • 초기 설정:
      • 파이프라인을 설정하기 위해서는 Groovy 기반의 DSL(Domain Specific Language)를 익혀야 한다. 따라서 초기 학습 비용이 발생할 수 있다.

2-3. 결론

Freestyle은 간단한 CI/CD 작업에 적합하고 빠르게 설정할 수 있는 반면, Pipeline은 복잡한 워크플로우와 높은 수준의 사용자 정의 설정을 필요로 할 때 더 유용하다.

 


 

3. Freestyle 방식으로 Jenkins CI 구축


3-1. Item 생성하기

  • 젠킨스 대시보드 좌측의 “새로운 Item” 을 클릭한다.

새로운 item
새로운 item

 

3-2. project(Job) 생성하기

  • 프로젝트명을 작성하고 하단의 프로젝트 선택을 하면 된다.
  • 나는 Freestyle project를 선택했다.

freestyle project create
freestyle project create

 

3-3. project(Job) 세팅하기

  • 프로젝트의 설명을 작성한다.

project 설명 작성
project 설명 작성

 

3-4. 연결할 코드 저장소 선택하기

  • 나는 Github를 사용중이라서 Github project 체크박스를 선택했다.

code repository
code repository

 

3-5. 소스코드 관리 설정하기

  • 여기서 Git을 선택하고 내 소스코드의 저장소 설정을 해준다.

소스 코드 관리
소스 코드 관리

 

3-6. Credentials 설정하기

  • 위에서 Git을 선택하고 Repository URL을 작성했다면 하단의 Credentials 정보를 설정해야 한다. 우선 나는 지금 Jenkins를 최초 세팅해서 설정한 Credentials이 없으니 “Add” 버튼을 눌러서 Credentials를 추가한다.

jenkins Credentials Setting
jenkins Credentials Setting

 

  • Credentials 하단의 “Add” 버튼을 누르면 아래와 같은 팝업창이 나올텐데 여기서 “Jenkins”를 선택한다.

Credentials Add

 

  • 그럼 이제 아래와 같은 Add Credentials 팝업창이 나온다.

Add Credentials
Add Credentials

 

  • kind를 설정하는 select박스를 선택해서 보면 아래와 같이 나올텐데 여기서 “Username with password”를 선택한다.

Kind 선택하기
Kind 선택하기

 

  • form에 모든 내용을 작성하고 “Add”버튼을 눌러 추가하면 된다.
    • Username: github 로그인Id 입력
    • Password: 실제 github access token 정보 입력 (github token 발급방법은 아래의 포스트를 참고)
    • ID: 원하는 credential 이름 입력 (내가 식별하기 위한 이름)
    • Description: 설명 작성

2023.10.26 - [Git] - Github Access Token발급받는 방법

 

Github Access Token발급받는 방법

코딩은 글쓰기라고 생각한다. 꾸준히 기록하며 내 개발 실력을 키울것이다.

curiousjinan.tistory.com

 

  • 아래와 같이 작성될것이다. 이제 이 내용을 저장해준다.

add credentials complete
add credentials complete

 

  • 저장을 하고 나서 다시 Credentials 하단의 Option 박스를 선택하면 내가 추가한 Credentials가 추가되어 있고 이것을 선택한다.

Credentials select box

 

3-6. 이제 하단으로 내려가서 다음 설정인 branch를 지정한다.

  • 나는 main을 브랜치로 사용중이라 */main 으로 적어줬다.
  • 만약 다른 practice라는 브랜치를 사용중이라면 */practice 라고 적어줘야 한다.

branch setting
branch setting

 

3-7. 하단으로 내려가서 “빌드 유발” 설정을 한다.

  • 이것은 github에 push하면 jenkins에서 자동으로 build 하는 방법에 대한 설정이다.
  • “GitHub hook trigger for GITScm Polling” 체크박스를 선택한다.
  • GitHub에서 webhooks 설정을 해주고 나서 진행해야 한다. 아래의 포스트를 보고 설정하도록 하자

2023.10.26 - [Git] - Jenkins 깃허브 훅 설정 - GitHub hook trigger for GITScm Polling 설정하기

 

Jenkins 깃허브 훅 설정 - GitHub hook trigger for GITScm Polling 설정하기

코딩은 글쓰기라고 생각한다. 꾸준히 기록하며 내 개발 실력을 키울것이다.

curiousjinan.tistory.com

빌드 유발 GitHub hook trigger for GITScm polling
빌드 유발 GitHub hook trigger for GITScm polling

 

3-8. 다음으로 "빌드 환경"을 설정한다.

  • 이부분은 잘 모르겠어서 조금 더 알아보고 추가하도록 하겠다.

빌드 환경 세팅
빌드 환경 세팅

 

3-9. "Build Steps" 설정

  • 처음 Build Steps에는 아래와 같이 "Add build step" 버튼만 있을텐데 이 버튼을 클릭한다.

Build Steps

 

  • 버튼을 클릭하면 나오는 Option에서 "Invoke Gradle script"를 선택한다.

invoke Gradle script select Option
invoke Gradle script select Option

 

  • 이제 하단의 이미지처럼 Invoke Gradle script 설정창이 나올것이다.
    • 이 설정은 아래의 4번 목차 "Jenkins Gradle 설정하기"를 보고 설정을 한 후 다시 이 설정으로 돌아와서 진행하면 된다. (잠깐 하단의 Save버튼을 눌러 저장하고 4번 목차의 작업을 마무리 한 후 Dashboard에서 Item을 선택해서 들어간 다음 좌측 메뉴바의 "구성" 을 클릭해서 들어가면 지금까지 저장한 내용에 이어서 수정할 수 있다.)

Build Steps
Build Steps

 


 

4. Jenkins Gradle 설정하기


4-1. 대시보드 화면으로 나가서 Jenkins관리에 들어간다.

jenkins관리화면
jenkins관리화면

 

4-2. 하단의 Tools를 클릭해서 들어간다.

System Configuration > Tools
System Configuration > Tools

 

4-3. Gradle installations 설정하기

  • Tools 화면에서 하단으로 스크롤을 내리다 보면 나오는 Gradle installations를 세팅한다.
  • 여기서 "Gradle Installations"을 설정하는 이유는 Jenkins 내부에서 Gradle 빌드를 수행할 때 필요한 Gradle 환경을 구성하기 위해서다.
Jenkins 자체적으로 Gradle을 세팅하지 않아도 CI/CD는 가능하다. 프로젝트 레벨에서 Gradle Wrapper를 사용하고 있으면, 그 Wrapper를 통해 빌드 작업을 수행할 수 있다. 이 경우 Jenkinsfile이나 빌드 스크립트 내에서 ./gradlew 명령을 사용해 빌드를 실행하면 된다.
그러나 Jenkins에서 Gradle을 직접 설정하면, 여러 프로젝트에서 동일한 Gradle 버전을 쉽게 관리할 수 있고, 환경 일관성을 높일 수 있다. 이 설정을 통해 빌드 과정 중에 외부 네트워크 접근 없이도 Gradle을 사용할 수 있어 보안도 강화된다.

 

  • 처음에는 당연히 gradle 세팅이 안되어있어서 “Add Gradle” 버튼만 있을텐데 이 버튼을 클릭한다.
    • 이 form에 내가 식별하길 원하는 이름과 실제 내 spring boot 프로젝트에서 사용하고 있는 gradle 버전을 찾아와서 설정한다.

gradle installations
gradle installations

 

  • Spring Boot에서 내 프로젝트의 gradle 버전 확인하는법은 아래의 포스트를 확인하고 따라해보자

2023.10.26 - [Spring 기초/spring 설정] - Spring Boot 프로젝트에서 Gradle 버전 확인과 업그레이드 가이드

 

Spring Boot 프로젝트에서 Gradle 버전 확인과 업그레이드 가이드

SpringBoot에서 Gradle 버전을 알아보자 이번 포스트에서는 특정 API나 Jenkins를 사용할때 Spring과 그 tool의 Gradle 버전을 맞춰주기 위해 필요한 Spring Boot 프로젝트의 gradle 버전 확인하는 방법을 소개한

curiousjinan.tistory.com

 

 

4-4. Gradle installations 작성한 내용 저장하기

  • 위의 포스트에서 알아본 gradle 버전을 선택하고 저장한다. (Install automatically를 선택하고 저장하자)

gradle setting complete
gradle setting complete

 

이제 저장되었으니 Jenkins에서 Item 세팅시에 Gradle을 선택하면 이 jenkins-test라는 이름으로 등록된 Gradle을 선택해서 사용할 수 있을것이다.


 

5. 빌드 수행하기


5-1. Item세팅을 완료했으면 대시보드로 이동해서 아까 작성하던 project(Job)로 들어간다.

dashboard job
dashboard job

 

5-2. Dashboard 좌측의 메뉴바에서 “지금 빌드”를 클릭하면 빌드가 시작된다.

지금 빌드
지금 빌드

 

5-3. 아래와 같이 빌드가 성공했다고 나올것이다.

build success
build success

 

 

 

지금까지 Jenkins 아이템 구축 내용은 Freestyle 방식을 사용해서 CI까지만 구현을 완료한 글이다.
CD도 구현을 한 후 포스트를 이어서 올리도록 하겠다.





 

 

2023.10.25 - [DevOps] - AWS EC2에서 Docker와 Jenkins로 CI/CD 환경 구축하기

 

AWS EC2에서 Docker와 Jenkins로 CI/CD 환경 구축하기

이번에는 EC2에서 Docker를 띄운 후 Jenkins를 구축해 보자 1. EC2 인스턴스에 SSH 접속 AWS 콘솔에서 EC2 인스턴스의 IP 주소를 확인한 후, 터미널을 열고 SSH로 접속한다. 아래의 방법을 통해 Termius로 접속

curiousjinan.tistory.com

 

반응형

'DevOps' 카테고리의 다른 글

단일 장애 지점(SPOF)이란?  (0) 2023.11.21
ECR Docker 이미지 Push 오류: M1 아키텍처와 exec format 문제  (0) 2023.10.28
Pipeline 방식으로 Jenkins구축 - SpringBoot CI/CD 구축  (0) 2023.10.27
AWS EC2에서 Docker와 Jenkins로 CI/CD 환경 구축하기  (0) 2023.10.25
'DevOps' 카테고리의 다른 글
  • 단일 장애 지점(SPOF)이란?
  • ECR Docker 이미지 Push 오류: M1 아키텍처와 exec format 문제
  • Pipeline 방식으로 Jenkins구축 - SpringBoot CI/CD 구축
  • AWS EC2에서 Docker와 Jenkins로 CI/CD 환경 구축하기
Stark97
Stark97
문의사항 또는 커피챗 요청은 링크드인 메신저를 보내주세요! : https://www.linkedin.com/in/writedev/
  • Stark97
    오늘도 개발중입니다
    Stark97
  • 전체
    오늘
    어제
    • 분류 전체보기 (244) N
      • 개발지식 (20)
        • 스레드(Thread) (8)
        • WEB, DB, GIT (3)
        • 디자인패턴 (8)
      • JAVA (21)
      • Spring (88)
        • Spring 기초 지식 (35)
        • Spring 설정 (6)
        • JPA (7)
        • Spring Security (17)
        • Spring에서 Java 활용하기 (8)
        • 테스트 코드 (15)
      • 아키텍처 (6)
      • MSA (14)
      • DDD (10) N
      • gRPC (9)
      • Apache Kafka (18)
      • DevOps (23)
        • nGrinder (4)
        • Docker (1)
        • k8s (1)
        • 테라폼(Terraform) (12)
      • AWS (32)
        • ECS, ECR (14)
        • EC2 (2)
        • CodePipeline, CICD (8)
        • SNS, SQS (5)
        • RDS (2)
      • notion&obsidian (3)
      • 동아리 (0)
  • 링크

    • notion기록
    • 깃허브
    • 링크드인
  • hELLO· Designed By정상우.v4.10.0
Stark97
Jenkins로 시작하는 CI: Freestyle 프로젝트 구축 가이드
상단으로

티스토리툴바