
* Jenkins: 지속적인 통합(CI) 서비스를 제공하는 오픈 소스 도구
* Maven: Java 프로젝트 관리 도구로, 컴파일 및 빌드를 수행하고 배포 파일을 생성할 수 있다.
[CI/CD 파이프라인 구축 실습 목표]
- GitHub와 Jenkins의 통합 → GitHub에 있는 코드를 Jenkins 서버로 가져온다.
- 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이므로 인바운드 규칙에 추가해야 한다!


MobaXTerm을 이용한 jenkins-server 접속



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 명령을 이용한다.

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

서버를 불러오는 데 실패하였다.
찾아보니 자바가 설치되어있지 않을 경우... 활성화할 수 없다는 것을 알아냈다.

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 명령이 실행되도록 설정했기 때문에 아래와 같은 내용이 출력되어야 한다.

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 명령을 다시 실행해야 한다!

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을 추가할 필요가 없다!

빌드 시작을 누르고 빌드가 완료되면 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 디렉터리에는 보통 외부 프로그램을 다운로드했을 때 파일이 저장되는 위치이다.

이후에 tar 명령을 이용하여 복사해둔 링크의 압축 파일을 푼다.
> tar -xvzf apache-maven-3.9.9-bin.tar.gz

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

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

설정해줘야 하는 환경 변수 목록
- M2_HOME: 실제 Apache Maven이 설치된 경로
- M2: 바이너리 디렉터리
- JAVA_HOME: 실제 JDK가 설치된 경로
M2_HOME는 아까 다운로드 받고 압축을 해제한 경로이다.

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

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


[경로 변수 설정]
- 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

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

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

apply 후 save를 누르면 된다.
7. Jenkins를 사용하여 Java 프로젝트 빌드하기
Maven 프로젝트 생성
- 이름: FirstMavenProject
- 타입: Maven project


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

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

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

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


다음 포스팅에서는 Jenkins와 Tomcat을 연결해보겠다!
'DevOps' 카테고리의 다른 글
| CI/CD 파이프라인 구축하기 - 3.2 (Docker 컨테이너 자동 빌드 및 자동 배포) (0) | 2024.12.13 |
|---|---|
| CI/CD 파이프라인 구축하기 - 3.1 (Docker 설정 및 Jenkins SSH server 설정하기) (0) | 2024.12.13 |
| [문제 해결] Dockerfile에서 tar 명령어 실행 안 될 때 해결 방법 (0) | 2024.12.13 |
| CI/CD 파이프라인 구축하기 - 2 (Tomcat) (1) | 2024.12.13 |
| CI/CD란? 개념/주요 단계/장점 (1) | 2024.12.02 |