CI(지속적 통합)
CI
: 빌드 → 테스트 → 머지 →
CD
: 자동 릴리즈 → 자동 디플로이
: 구축, 테스트, 제공과 관련된 모든 작업을 자동화, 소프트웨어 배포 가능
Jenkins는 CI/CD(Continuous Integration / Continuous Deployment) 를 구현하기 위한 대표적인 오픈소스 자동화 서버
Jenkins가 하는 일
왜 Jenkins를 쓰나?
즉, Jenkins는 프로젝트를 자동으로 가져오고 → 빌드하고 → 테스트하고 → 배포까지 수행하는 엔진
$ sudo apt -y update
$ sudo apt install -y fontconfig openjdk-17-jre
$ sudo wget -O /etc/apt/keyrings/jenkins-keyring.asc https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key
$ echo "deb [signed-by=/etc/apt/keyrings/jenkins-keyring.asc]" https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
$ sudo apt -y update
$ sudo apt -y install jenkins
$ sudo systemctl enable jenkins --now
젠킨스 접속
젠킨스 접속 초기 비밀번호 확인
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword
관리자 계정 생성 후 새 아이템 생성


프리스타일 사용 이유
: 간단하게 파일을 저장하고 실행하고 빌드하기 위해
Started by user soomin
Running as SYSTEM
Building in workspace /var/lib/jenkins/workspace/hello
[hello] $ /bin/sh -xe /tmp/jenkins7975738852425387530.sh
+ echo hello jenkins
Finished: SUCCESS
확인
**/var/lib/jenkins/workspace/hello$ ls**
hello.txt
지금 빌드를 Github와 연결해서 사용한다면
GitHub pull
명령 실행
워크스페이스 생성
결과 파일 저장
콘솔 출력 기록 생성
빌드 번호 생성
$ sudo apt -y install maven
설정(Jenkins 관리) → Tools

JDK installation

Maven Installation

세이브
Jenkins 관리 → Plugins → Available plugins

Maven Integration 설치

New Item → Maven Project 생성 후 Configure


Maven 표준 프로젝트 구조
GitHub에는 아래 구조 그대로 올라가 있어야 함
your-repo/
│
├── pom.xml Maven 기본 설정파일 (가장 중요)
│
└── src/
└── main/
├── java/ Java 소스코드
│ └── ...
├── resources/ 설정 파일들
└── webapp/ JSP, HTML, WEB-INF 등이 위치
├── index.jsp
└── WEB-INF/
└── web.xml
GitHub에 넣어야 하는 핵심 파일
(1) pom.xml 필수
이 파일이 없으면 Maven 빌드 자체가 불가능함
→ Jenkins에서 Root POM = pom.xml 을 사용할 수 없어짐.
pom.xml은 대략 이런 형태
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>hello-world</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<build>
<finalName>hello-world</finalName> <!-- 결과물 이름 -->
</build>
</project>
finalName이 hello-world 이기 때문에 Jenkins 빌드하면 target/hello-world.war가 생성됨(2) Java 소스코드
예: src/main/java/com/example/HelloController.java
(3) 웹 자원 (webapp 폴더)
예:
src/main/webapp/index.jspsrc/main/webapp/WEB-INF/web.xmlJenkins가 빌드할 수 있는 최소 조건
| 파일/폴더 | 존재 여부 | 설명 |
|---|---|---|
| pom.xml | 무조건 필요 | Maven 빌드 설정 파일로, 프로젝트 의존성·플러그인·패키징 방식을 정의함 |
| src/main/java | 필요 | Java 소스 코드가 위치하는 기본 디렉터리 |
| src/main/webapp | 필요 | JSP 파일 및 WEB-INF 폴더를 포함하는 웹 애플리케이션 리소스 디렉터리 |
| packaging = war | 매우 중요 | Tomcat 등 서블릿 컨테이너에 배포 가능한 형태(WAR)로 패키징하기 위함 |
| finalName (hello-world) | 권장 | 생성되는 WAR 파일 이름을 Jenkins 등 배포 설정과 쉽게 맞추기 위함 |
Jenkins가 GitHub 소스를 가져오면 어떻게 되는가?
1) Jenkins → GitHub에서 코드 clone
2) pom.xml 분석
3) mvn clean package 실행
4) /var/lib/jenkins/workspace/<프로젝트이름>/target/hello-world.war 생성
5) Jenkins → Tomcat 서버로 자동 deploy
⇒ 즉, GitHub에는 "빌드 가능한 Maven 프로젝트"만 있으면 됨
Maven 프로젝트 제대로 빌드됐는지 확인
**$ ls /var/lib/jenkins/workspace/second/target/**
classes hello-world maven-status
generated-sources hello-world.war surefire-reports
generated-test-sources maven-archiver test-classes