이번 포스트에서는 Jenkins에서 Freestyle방식을 사용해서 Item을 구축하는 방법에 대해서 설명한다.
요즘은 Pipeline을 많이 사용하지만 Freestyle도 나름 간단하게 적용시켜서 사용하기에는 나쁘지 않은 것 같다.
1. Jenkins의 Item에 대한 이해
1-1. Item이란?
- Jenkins에서 "Item" 또는 "Job"은 자동화 작업의 기본 단위다. 개발자가 젠킨스를 통해 CI/CD 프로젝트를 구축하려면 아이템(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을 포함한 보다 일반적인 개념이다.
- Jenkins에서 가장 기본적인 구성 단위이다. 여기에는 Job이 포함되어 있지만, Folder나 MultiJob 같은 다른 타입의 Item도 있을 수 있다. 즉, Item은 Job을 포함한 보다 일반적인 개념이다.
- Job:
- Item 중에서도 실제로 빌드, 테스트, 배포 등을 수행하는 작업을 의미한다. Freestyle Project, Pipeline 등이 이에 해당한다.
- Item 중에서도 실제로 빌드, 테스트, 배포 등을 수행하는 작업을 의미한다. Freestyle Project, Pipeline 등이 이에 해당한다.
- Project:
- 일반적으로 Job과 같은 의미로 사용된다. 특히 Freestyle Project와 같이 'Project'라는 단어가 명시적으로 사용되는 경우가 있다.
- 일반적으로 Job과 같은 의미로 사용된다. 특히 Freestyle Project와 같이 'Project'라는 단어가 명시적으로 사용되는 경우가 있다.
보통 이 세 개의 용어는 상황에 따라 혼용되어 사용되곤 하지만, 정확한 의미를 전달하고 싶을 때는 위의 차이점을 고려해야 한다.
예를 들어, "모든 Item을 나열하라"고 할 때에는 Job뿐만 아니라 다른 타입의 Item (예: 폴더)까지도 포함될 수 있다. 하지만 "모든 Job을 나열하라"고 하면, 실제 빌드나 배포 작업을 수행하는 Item만을 의미하게 된다.
2. FreeStyle vs Pipeline
2-1. Freestyle
- 장점
- 사용자 친화적:
- 웹 기반의 GUI를 통해 간단하게 설정을 할 수 있다. 플러그인을 쉽게 추가하거나 제거할 수 있어 사용성이 높다.
- 웹 기반의 GUI를 통해 간단하게 설정을 할 수 있다. 플러그인을 쉽게 추가하거나 제거할 수 있어 사용성이 높다.
- 사용자 친화적:
- 단점
- 유지 보수성:
- 설정 변경을 위해서는 Jenkins 관리자 인터페이스에 직접 로그인해야 하고, 각 Job 설정을 수동으로 변경해야 한다.
- 가시성:
- 빌드나 배포 과정을 콘솔 출력을 통해서만 확인할 수 있어, 전체적인 흐름을 한눈에 볼 수 없다.
- 빌드나 배포 과정을 콘솔 출력을 통해서만 확인할 수 있어, 전체적인 흐름을 한눈에 볼 수 없다.
- 유지 보수성:
2-2. Pipeline
- 장점
- 버전 관리:
- Jenkinsfile을 사용하여 코드와 함께 파이프라인 설정을 저장소에 저장할 수 있다. 이로 인해 코드 리뷰나 버전 관리가 용이하다.
- 세밀한 흐름 제어:
- 하나의 Jenkinsfile을 통해 전체 CI/CD 흐름을 제어할 수 있어, 복잡한 워크플로우를 구현할 수 있다.
- 실시간 모니터링:
- GUI를 통해 빌드의 현재 상태와 통계, 평균 수행 시간 등을 쉽게 확인할 수 있다.
- GUI를 통해 빌드의 현재 상태와 통계, 평균 수행 시간 등을 쉽게 확인할 수 있다.
- 버전 관리:
- 단점
- 초기 설정:
- 파이프라인을 설정하기 위해서는 Groovy 기반의 DSL(Domain Specific Language)를 익혀야 한다. 따라서 초기 학습 비용이 발생할 수 있다.
- 파이프라인을 설정하기 위해서는 Groovy 기반의 DSL(Domain Specific Language)를 익혀야 한다. 따라서 초기 학습 비용이 발생할 수 있다.
- 초기 설정:
2-3. 결론
Freestyle은 간단한 CI/CD 작업에 적합하고 빠르게 설정할 수 있는 반면, Pipeline은 복잡한 워크플로우와 높은 수준의 사용자 정의 설정을 필요로 할 때 더 유용하다.
3. Freestyle 방식으로 Jenkins CI 구축
3-1. Item 생성하기
- 젠킨스 대시보드 좌측의 “새로운 Item” 을 클릭한다.
3-2. project(Job) 생성하기
- 프로젝트명을 작성하고 하단의 프로젝트 선택을 하면 된다.
- 나는 Freestyle project를 선택했다.
3-3. project(Job) 세팅하기
- 프로젝트의 설명을 작성한다.
3-4. 연결할 코드 저장소 선택하기
- 나는 Github를 사용중이라서 Github project 체크박스를 선택했다.
3-5. 소스코드 관리 설정하기
- 여기서 Git을 선택하고 내 소스코드의 저장소 설정을 해준다.
3-6. Credentials 설정하기
- 위에서 Git을 선택하고 Repository URL을 작성했다면 하단의 Credentials 정보를 설정해야 한다. 우선 나는 지금 Jenkins를 최초 세팅해서 설정한 Credentials이 없으니 “Add” 버튼을 눌러서 Credentials를 추가한다.
- Credentials 하단의 “Add” 버튼을 누르면 아래와 같은 팝업창이 나올텐데 여기서 “Jenkins”를 선택한다.
- 그럼 이제 아래와 같은 Add Credentials 팝업창이 나온다.
- kind를 설정하는 select박스를 선택해서 보면 아래와 같이 나올텐데 여기서 “Username with password”를 선택한다.
- form에 모든 내용을 작성하고 “Add”버튼을 눌러 추가하면 된다.
- Username: github 로그인Id 입력
- Password: 실제 github access token 정보 입력 (github token 발급방법은 아래의 포스트를 참고)
- ID: 원하는 credential 이름 입력 (내가 식별하기 위한 이름)
- Description: 설명 작성
2023.10.26 - [Git] - Github Access Token발급받는 방법
- 아래와 같이 작성될것이다. 이제 이 내용을 저장해준다.
- 저장을 하고 나서 다시 Credentials 하단의 Option 박스를 선택하면 내가 추가한 Credentials가 추가되어 있고 이것을 선택한다.
3-6. 이제 하단으로 내려가서 다음 설정인 branch를 지정한다.
- 나는 main을 브랜치로 사용중이라 */main 으로 적어줬다.
- 만약 다른 practice라는 브랜치를 사용중이라면 */practice 라고 적어줘야 한다.
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 설정하기
3-8. 다음으로 "빌드 환경"을 설정한다.
- 이부분은 잘 모르겠어서 조금 더 알아보고 추가하도록 하겠다.
3-9. "Build Steps" 설정
- 처음 Build Steps에는 아래와 같이 "Add build step" 버튼만 있을텐데 이 버튼을 클릭한다.
- 버튼을 클릭하면 나오는 Option에서 "Invoke Gradle script"를 선택한다.
- 이제 하단의 이미지처럼 Invoke Gradle script 설정창이 나올것이다.
- 이 설정은 아래의 4번 목차 "Jenkins Gradle 설정하기"를 보고 설정을 한 후 다시 이 설정으로 돌아와서 진행하면 된다. (잠깐 하단의 Save버튼을 눌러 저장하고 4번 목차의 작업을 마무리 한 후 Dashboard에서 Item을 선택해서 들어간 다음 좌측 메뉴바의 "구성" 을 클릭해서 들어가면 지금까지 저장한 내용에 이어서 수정할 수 있다.)
4. Jenkins Gradle 설정하기
4-1. 대시보드 화면으로 나가서 Jenkins관리에 들어간다.
4-2. 하단의 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 버전을 찾아와서 설정한다.
- Spring Boot에서 내 프로젝트의 gradle 버전 확인하는법은 아래의 포스트를 확인하고 따라해보자
2023.10.26 - [Spring 기초/spring 설정] - Spring Boot 프로젝트에서 Gradle 버전 확인과 업그레이드 가이드
4-4. Gradle installations 작성한 내용 저장하기
- 위의 포스트에서 알아본 gradle 버전을 선택하고 저장한다. (Install automatically를 선택하고 저장하자)
이제 저장되었으니 Jenkins에서 Item 세팅시에 Gradle을 선택하면 이 jenkins-test라는 이름으로 등록된 Gradle을 선택해서 사용할 수 있을것이다.
5. 빌드 수행하기
5-1. Item세팅을 완료했으면 대시보드로 이동해서 아까 작성하던 project(Job)로 들어간다.
5-2. Dashboard 좌측의 메뉴바에서 “지금 빌드”를 클릭하면 빌드가 시작된다.
5-3. 아래와 같이 빌드가 성공했다고 나올것이다.
지금까지 Jenkins 아이템 구축 내용은 Freestyle 방식을 사용해서 CI까지만 구현을 완료한 글이다.
CD도 구현을 한 후 포스트를 이어서 올리도록 하겠다.
2023.10.25 - [DevOps] - AWS EC2에서 Docker와 Jenkins로 CI/CD 환경 구축하기
'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 |