25/11/05 CI/CD 2

344th·2025년 12월 11일

AWS AI

목록 보기
43/48

CI

CI(지속적 통합)

  • 개발자들의 코드 변경 사항을 공유 브랜치로 다시 병합하는 작업을 수월하게 진행
  • 단위/통합 테스트 기능 제공
  • 애플리케이션에 제대로 적용되었는지 확인 가능
  • 신규 코드와 기존 코드 충돌시 CI는 이러한 버그들을 빠르게 자주 수정 가능

CI

: 빌드 → 테스트 → 머지 →

CD

: 자동 릴리즈 → 자동 디플로이

젠킨스

: 구축, 테스트, 제공과 관련된 모든 작업을 자동화, 소프트웨어 배포 가능

Jenkins는 CI/CD(Continuous Integration / Continuous Deployment) 를 구현하기 위한 대표적인 오픈소스 자동화 서버

Jenkins가 하는 일

  • 개발자가 코드 push → 자동 빌드
  • 자동 테스트
  • 자동 패키징(WAR, JAR 등)
  • 자동 배포(서버 또는 클러스터로)

왜 Jenkins를 쓰나?

  • 사람이 반복적으로 해야 하는 일을 자동화해줌
  • 빌드/배포 과정에서 발생할 수 있는 오류를 획일화하여 줄여줌
  • 개발자들이 각자 환경에서 빌드할 필요가 없어짐 (환경 통일)
  • 모든 빌드·배포 기록이 남아서 추적 가능
  • 수많은 플러그인을 통해 다양한 환경과 연동 가능 (GitHub, AWS, Docker, K8s, Maven 등)

즉, 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

젠킨스 접속

http://192.168.56.11:8080/

젠킨스 접속 초기 비밀번호 확인

$ 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와 연결해서 사용한다면

  1. GitHub pull

  2. 명령 실행

  3. 워크스페이스 생성

  4. 결과 파일 저장

  5. 콘솔 출력 기록 생성

  6. 빌드 번호 생성

maven 프로젝트 생성

  • jenkins의 가장 큰 핵심 기능은 자동 빌드
  • java 기반 프로젝트에서 가장 많이 사용되는 별도 도구가 maven
  • 패키징하기 위해 maven 필요

maven 설치 진행

$ sudo apt -y install maven

설정(Jenkins 관리) → Tools

JDK installation

  • Name : java-17
  • JAVA_HOME : /usr/lib/jvm/java-17-openjdk-amd64/

Maven Installation

세이브

Jenkins 관리 → Plugins → Available plugins

Maven Integration 설치

Maven Project 생성

New Item → Maven Project 생성 후 Configure

  • clean package 설치도 필요

GitHub 레포에 반드시 포함되어야 하는 것

  1. Maven 표준 프로젝트 구조

    GitHub에는 아래 구조 그대로 올라가 있어야 함

    your-repo/
    │
    ├── pom.xml               Maven 기본 설정파일 (가장 중요)
    │
    └── src/
        └── main/
            	├── java/         Java 소스코드
    					│   └── ...
            	├── resources/     설정 파일들
            	└── webapp/         JSP, HTML, WEB-INF 등이 위치
               			 ├── index.jsp
               			 └── WEB-INF/
                    		 └── web.xml
  2. 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>
    
    • 여기서 finalNamehello-world 이기 때문에 Jenkins 빌드하면 target/hello-world.war가 생성됨

    (2) Java 소스코드

    예: src/main/java/com/example/HelloController.java

    • Spring MVC 예제거나 Servlet 예제 등 원하는 형태로 구성 가능.

    (3) 웹 자원 (webapp 폴더)

    예:

    • src/main/webapp/index.jsp
    • src/main/webapp/WEB-INF/web.xml
  3. Jenkins가 빌드할 수 있는 최소 조건

    파일/폴더존재 여부설명
    pom.xml무조건 필요Maven 빌드 설정 파일로, 프로젝트 의존성·플러그인·패키징 방식을 정의함
    src/main/java필요Java 소스 코드가 위치하는 기본 디렉터리
    src/main/webapp필요JSP 파일 및 WEB-INF 폴더를 포함하는 웹 애플리케이션 리소스 디렉터리
    packaging = war매우 중요Tomcat 등 서블릿 컨테이너에 배포 가능한 형태(WAR)로 패키징하기 위함
    finalName (hello-world)권장생성되는 WAR 파일 이름을 Jenkins 등 배포 설정과 쉽게 맞추기 위함
  4. 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
profile
새싹 개발자

0개의 댓글