DevOps

CI/CD 파이프라인 구축하기 - 1 (Git, Jenkins, Maven(Java))

우잉~ 2024. 12. 4. 17:46

 

CI/CD Pipeline 구성

 

* Jenkins: 지속적인 통합(CI) 서비스를 제공하는 오픈 소스 도구

* Maven: Java 프로젝트 관리 도구로, 컴파일 및 빌드를 수행하고 배포 파일을 생성할 수 있다.

 

[CI/CD 파이프라인 구축 실습 목표]

  1. GitHub와 Jenkins의 통합 → GitHub에 있는 코드를 Jenkins 서버로 가져온다.
  2. Jenkins와 Maven의 통합 → Jenkins에서 빌드 프로세스를 Maven으로 자동화

1. Jenkins 서버 구성하기

  • EC2 인스턴스 생성하기
  • 이름: jenkins-server
  • AMI: Amazon Linux 2
  • 인스턴스 유형: t2.micro
  • 새로운 키페어 생성: devops-project-key
  • 보안 그룹 생성: jenkins-server-sg

* MobaXTerm 사용할 것이기 때문에 .pem으로 다운로드 받았다.

** Jenkins의 포트 번호는 8080이므로 인바운드 규칙에 추가해야 한다!

인스턴스 생성
보안그룹 인바운드 규칙 8080 추가

 

MobaXTerm을 이용한 jenkins-server 접속

세션 선택
세션 정보 입력
SSH 세션 생성 완료

 

2. jenkins 설치(Stable) 및 접속

아래의 젠킨스 공식 사이트에 들어가서 설치를 진행할 수 있다.

Stable을 다운로드 받는 것이 일반적!

https://www.jenkins.io/download/

 

Download and deploy

Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software

www.jenkins.io

 

클릭

 

아래와 같은 커맨드를 입력하여 Jenkins를 설치하면 된다.

※ root로 전환해야 하므로 sudo su 명령어를 이용해주자!

설치 명령 도큐먼트

 

젠킨스 설치 후

service jenkins status 명령어를 입력하여 서버가 활성화되어 있는지 확인한다.

inactive(dead)일 경우 service jenkins start 명령을 이용한다.

오류 및 다른 명령어 사용 문구

위와 같은 에러가 생겼을 경우 다른 명령어를 사용해보자...

에러 2

서버를 불러오는 데 실패하였다. 

찾아보니 자바가 설치되어있지 않을 경우... 활성화할 수 없다는 것을 알아냈다.

자바 미설치 상태...

 

java17를 설치해주자

Amazon Linux의 경우 Amazon Corretto라는 JDK를 제공하는데, 이는 Java 17과 호환된다고 한다!

sudo amazon-linux-extras enable corretto17
sudo yum install java-17-amazon-corretto

 

자바 설치 확인

 

다시 돌아와서

service jenkins start 명령을 입력하고, service jenkins status 명령을 이용하면 서버가 활성화되는 것을 확인할 수 있다.

젠킨스 서버 활성화 완료

 

이제 브라우저를 열어서 젠킨스 서버의 퍼블릭 IP 주소:8080을 입력하면 접속이 잘 되는 것을 확인해야 한다.

!!! 만일 접속이 되지 않는다면 보안 그룹에서의 인바운드 규칙을 설정해주지 않았을 가능성이 매우매우 높으니 확인을 꼭 해볼 것!!!

첫화면

 

접속하자마자 로그인 화면이 나오게되는데, 해당 파일에 비밀번호가 있으니 확인해서 입력해달라는 문구가 뜬다.

cat 명령어를 이용하면 아래와 같이 비밀번호를 뱉어준다.

젠킨스 비밀번호 획득

 

비밀번호를 입력하면 다음과 같은 화면이 나오는데, 플러그인을 설치할 것인지에 대해 묻고 있다.

실습을 위해 따로 설치하지 않고 X 버튼을 눌러 다음으로 넘어간다.

플러그인 설치 안 함

 

이제 젠킨스 서버를 사용할 수 있는 모든 준비가 되었다는 화면이 뜬다.

Start using Jenkins 버튼을 누르면 젠킨스의 메인 화면이 뜰 것이다.

젠킨스 사용 완료 화면
젠킨스 메인 화면

 

 

3. 젠킨스 프로젝트 생성

젠킨스를 사용하기 위해서 먼저 프로젝트를 생성해야 한다.

  • 새로운 Item 선택
  • Item 이름: HelloWorldJob

 

 

OK를 눌러 생성하게 되면 아래와 같이 프로젝트의 옵션을 설정할 수 있다.

 

 

설명에 간단하게 HelloWorldJob이라고 작성하고, 아래에서 빌드 과정에서 실행할 명령어를 작성해준다.

윈도우에서 실행할 경우에는 Execute Windows Batch command를 이용하면 된다.

현재 실습 환경에서는 Linux를 사용하고 있기 때문에 Execute shell을 선택해주고 빌드할 때 실행할 명령어를 작성한다.

echo 명령어와 uptime을 사용하였다.

빌드시 실행할 명령어 작성

 

Apply 후 저장 버튼을 눌러 설정을 마무리한다.

 

젠킨스가 제대로 빌드되었을 경우 uptime 명령이 실행되도록 설정했기 때문에 아래와 같은 내용이 출력되어야 한다.

uptime 명령 확인

 

build now(지금 빌드)를 클릭하면 프로젝트 빌드가 시작된다.

빌드 완료

 

좌측 하단에 있는 Builds를 누르게 되면 빌드 상세 정보를 확인할 수 있다.

Console OutPut을 클릭하여 확인하면 hello world 문장 출력과 uptime이 성공적으로 출력된 것을 확인할 수 있다.

빌드 시 명령을 실행한 콘솔 출력문

 

4. Git - Jenkins 통합

git과 jenkins를 통합하기 위해서 해야할 일은 다음과 같다.

  • jenkins 인스턴스에 git 설치
  • jenkins 콘솔에서 GitHub 플러그인 설치
  • jenkins 콘솔에서 git 환경 설정

 

우선 ssh 터미널에서 Hostname을 jenkins-server로 변경해야 한다.

호스트이름은 /etc/hostname에서 변경할 수 있다!

> vi /etc/hostname

 

변경 사항을 적용하기 위해 재부팅한다.

> sudo reboot

 

!!! 재부팅한 뒤 service jenkins start 명령을 다시 실행해야 한다!

hostname 변경 사항 적용 완료

 

jenkins와 git을 통합하기 위해서는 당연하게도 git이 설치되어 있어야 한다.

 

git 설치

> yum install git

 

다음으로 해야할 일은 jenkins 콘솔에서 GitHub 플러그인을 설치하는 것이다.

Manage Jenkins(Jenkins 관리) - Plugins - Available plugins  - github 검색 후 install을 클릭한다.

 

깃허브 설치가 완료되면 git 실행 명령어 설정해줘야 한다.

설치 완료 후 Manage Jenkins(Jenkins 관리) - Tools에 가면 확인할 수 있다.

기본 설정일 경우 바로 사용할 수 있지만, 다른 경로에 저장했을 경우에는 git을 설치한 경로로 변경해줘야 한다.

설치 경로를 확인하는 명령어는 whereis [프로그램]이다.

 

 

5. GitHub에서 Jenkins 서버로 코드 불러오기

코드를 불러올 새로운 프로젝트를 생성한다.

프로젝트 이름: PullCodeFromGitHub

프로젝트 타입: Freestyle project

프로젝트 생성

 

소스 코드 관리(Source Code Management)에서 Git을 선택하여 코드를 불러올 리포지토리 URL을 입력한다.

* git 리포지토리가 public일 경우에는 Credential을 추가할 필요가 없다!

git repository URL 설정

 

빌드 시작을 누르고 빌드가 완료되면 Console Output에서 리포지토리가 복제된 위치를 확인할 수 있다.

보통 Jenkins는 /var/lib/jenkins/workspace에 빌드 관련된 정보를 모두 저장한다는 것을 알 수 있다.

 

해당 경로에 진입하여 복제된 코드를 확인할 수 있다.

복제된 코드 확인

6. Jenkins와 Maven 통합하기

  • Maven에 Jenkins 서버 설정
  • 환경 변수 설정: JAVA_HOME, M2, M2_HOME
  • Jenkins 콘솔에서 Maven 플러그인 설치
  • Maven, Java 환경 설정

Maven 다운로드

https://maven.apache.org/download.cgi

Binary tar.gz archive에 커서 대고 마우스 우클릭 후 Copy link address

 

jenkins server 터미널로 가서 /opt 디렉터리 진입하고 wget 명령을 사용하여 파일을 다운로드한다.

* /opt 디렉터리에는 보통 외부 프로그램을 다운로드했을 때 파일이 저장되는 위치이다.

maven 다운로드

 

이후에 tar 명령을 이용하여 복사해둔 링크의 압축 파일을 푼다.

> tar -xvzf apache-maven-3.9.9-bin.tar.gz

파일 압축 해제 왼료

mv 명령어를 이용하여 복잡한 이름을 maven으로 변경하였다.

이름 maven으로 변경

 

이제 환경 변수를 설정해줘야 하는데, 환경 변수는 .bash_profile 파일에 추가할 수 있다.

root 디렉터리에 있는 .bash_profile

 

설정해줘야 하는 환경 변수 목록

  • M2_HOME: 실제 Apache Maven이 설치된 경로
  • M2: 바이너리 디렉터리
  • JAVA_HOME: 실제 JDK가 설치된 경로

M2_HOME는 아까 다운로드 받고 압축을 해제한 경로이다. 

M2_HOME 경로

M2는 maven 디렉터리 안에 속한 바이너리 디렉터리이다.

M2 경로

 

JAVA_HOME 경로는 보통 jvm을 이용하여 검색하면 쉽게 찾을 수 있다.

> find / -name jvm

jdk 설치 경로

 

[경로 변수 설정]

  • M2_HOME=/opt/maven
  • M2=/opt/maven/bin
  • JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto.x86_64

[경로 설정]

  • PATH=$PATH:$HOME/bin:$JAVA_HOME:$M2_HOME:$M2

.bash_profile 수정

 

 

 

Jenkins 콘솔에서 maven 플러그인을 설치한다.

 

 

설치가 완료된 후 Tools에서 jdk와 maven을 추가한다.

 

JDK installations

  • Name: java-17-amazon-corretto.x86_64
  • JAVA_HOME: /usr/lib/jvm/java-17-amazon-corretto.x86_64

JDK 이름, 경로 설정

 

 

Maven installations

  • Name: Maven-3.9.9
  • MAVEN_HOME: /opt/maven

maven 이름, 경로 설정

apply 후 save를 누르면 된다.

 

 

7. Jenkins를 사용하여 Java 프로젝트 빌드하기

Maven 프로젝트 생성

  • 이름: FirstMavenProject
  • 타입: Maven project

 

 

Build 설정 부분에서 루트 프로젝트 객체 모델 POM을 지정해야 한다. POM 파일에는 프로젝트에서 사용되는 라이브러리를 정의한 파일이다. → 프로젝트 종속성 

Goals and opitons는 메이븐의 라이프사이클을 뜻한다고 한다.

 

 

빌드를 시작하고 콘솔을 확인해보면 종속성을 확이낳고 라이브러리를 설치하는 작업이 진행중인 것을 확인할 수 있다.

 

빌드가 무사히 완료되면 /var/lib/jenkins/workspace에서 프로젝트를 확인할 수 있다.

 

 

모든 코드가 새 프로젝트 FIrstMavenProject에 불러와진 것을 볼 수 있으며, 젠킨스 콘솔의 Workspace(작업 공간)에서도 확인할 수 있다.

터미널에서 디렉터리 구조 확인

 

젠킨스 콘솔에서 디렉터리 구조 확인

 

 

 

 

 

 

다음 포스팅에서는 Jenkins와 Tomcat을 연결해보겠다!