Yebali

[Jenkins] Jenkins를 이용한 CI/CD 본문

Etc

[Jenkins] Jenkins를 이용한 CI/CD

예발이 2022. 9. 11. 18:16

아래 글은 EC2, Linux2에서 설정한 내용으로 환경이 다르다면 다소 상이할 수 있음.

Jenkins 설치하기

jenkins를 사용하기 위해서는 java가 설치되어 있어야 한다.

없다면 아래 명령어로 설치.

$ sudo yum install java-11-amazon-corretto

Jenkins 설치

$ sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
$ sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
$ yum install -y jenkins

Jenkins 설정

jenkins는 기본적으로 8080 포트를 사용한다.

포트 번호를 바꾸고 싶다면  '/etc/sysconfig/jenkins'에서 'JENKINS_PORT' 정보를 바꿔 주어야 한다.

또는 '/usr/lib/systemd/system/jenkins.service'에서 Environment="JENKINS_PORT=8080" 부분을 변경해야 한다.

$ sudo vim /etc/sysconfig/jenkins

Jenkins 구동

$ sudo systemctl status jenkins.service # jenkins 상태 확인
$ sudo systemctl start jenkins.sertive  # jenkins 

$ sudo service jenkins status
$ sudo service jenkins start

 

Jenkins + Github 연동

Webhook 설정하기

Jenkins Credential 설정

RSA 키 생성 

$ sudo mkdir /var/lib/jenkins/.ssh
$ sudo ssh-keygen -t rsa -f /var/lib/jenkins/.ssh/key

.pub이 있는 키가 공개키, 없는 키가 비밀키이다.

 

Github Deploy key 설정

Reposotory > Settings > Deploy keys > Add deploy key에서 공개키 (.pub)을 추가한다.

Jenkins Credencials 설정

Dashboard > Jenkins 관리 > Manage Credentials 에서 새로운 credential을 추가한다.

종류는 'SSH Username with private key'를 선택하고, Private key를 입력하면 된다.

key를 생성 할 때 'passpharse'를 입력했다면 동일하게 입력해 주어야 한다.

Jenkins 소스 코드 관리 추가

repo URL에는 깃 주소를, credentials는 위에서 추가한 것을 선택한다.

 

Github 설정

Reposotory > Settings > Wehooks > Add webhook

Payload URL에는 'ec2주소' + 'port' + '/github-webhook/'으로 구성해야 한다.

 

Dashboard > Jenkins 관리 > 플러그인 관리 > 설치 가능에서 'Github Intergration Plugin'을 설치해준다.

대소문자를 정확히 입력해야 검색이 된다...

 

설치하고 jenkins를 재시작하고나면 잠시 후 Webhook이 체크 표시로 바뀐다. 그럼 성공

 

Jenkins CD 설정

Item > 구성 > Build에서 아래와 같이 스크립트를 작성하여 쉘 스크립트를 실행시켜 빌드 후 배포를 하게 설정했다.

간단한 배포 스크립트는 아래와 같다.

#!/bin/bash
WORK_SPACE=/var/lib/jenkins/workspace
PROJECT=my-home-backend

cd $WORK_SPACE/$PROJECT

echo "> Find Running Application!"

CURRENT_PID=$(pgrep -f $PROJECT)

echo "> PID : $CURRENT_PID"

if [ -z $CURRENT_PID ]; then
    echo "> No Running Application!"
else
    echo "> kill -15 $CURRENT_PID"
    kill -15 $CURRENT_PID
    sleep 3
fi

echo "> Deploy New Application!"

JAR_NAME=$(ls -tr $WORK_SPACE/$PROJECT/build/libs/*jar | tail -n 1)

echo "> JAR Name: $JAR_NAME"

TODAY=`date "+%Y-%m-%dT%H:%M"`

nohup java -jar $JAR_NAME \
	--spring.profiles.active=prod \
	> /home/ec2-user/log/nohub_$TODAY.log 2>&1 &

리눅스의 권한관련 지식은 아직 부족해 'build' 에서 sudo 권한을 사용하긴 했는데

jenkins에게 sudo 권한을 주려면 '/etc/sudoers'파일을 아래와 같이 수정하면 된다.

 

 

참고 블로그

 

AWS EC2에 Jenkins 설치하기

운좋게 사이드 프로젝트를 진행하며 인프라 구성부터 CI/CD까지 구성해볼수 있는 좋은기회가 생겨서 이렇게 포스팅을 남기려고합니다.

velog.io

 

'Etc' 카테고리의 다른 글

GitHub Action으로 PR 마다 빌드 테스트 하기  (0) 2022.01.25
Confluence OAuth 2.0 인증하기  (0) 2021.12.14
Confluence Cloud Basic REST API 사용법  (0) 2021.12.14
Git 사용법  (0) 2021.10.30