Jenkins를 이용한 Spring 프로젝트 CI / CD 구축 (젠킨스 빌드 / 배포)

SionBackEnd·2023년 3월 7일
0

아이템 등록

좌측 상단의 새로운 아이템을 등록한다.

프리스타일 프로젝트로 생성한다.

깃허브 프로젝트의 링크를 작성해준다.

아이템 설정


우리가 설정할 목차이다.

소스 코드 관리를 None에서 Git으로 변경하고 repo Url을 입력후 Credentials 아래의 Add버튼을 누른다.

password에는 무엇을 작성해야하는가?
깃헙 비밀번호가 아니다.
깃허브 본인 우측 상단 프로필의 Settings > Developer settings > Personal access tokens을 클릭한다.

Generate new token을 눌러 토큰을 발급한다.


위 3개를 허용한다.


다시 젠킨스로 돌아와 바로 아래에 Build할 브랜치를 작성한다.


다음 아래에 있는 빌드 유발에서 4번째 깃헙 웹북 트리거를 설정한다.
그후 깃헙 사이트로 이동한다.

프로젝트 해당 레포지토리에 들어가서 레포지토리 setting을 클릭하고 webhooks를 눌러 webhook을 만들어준다.


다음은 빌드 환경이다. 빌드환경에서는 AWS 엑세스키, 시크릿키, RDS주소 등을 암호화 할 수 있다.
Credentials의 Add버튼을 누른다.

Secret text를 선택하고 값을 입력한다. 만약 Credentials를 수정 및 삭제하고 싶다면,
Dashboard > Jenkins 관리 > Credentials 에서 가능하다.

다음은 빌드 스텝이다. 나는 쉘 스크립트를 이용하여 빌드를 직접 진행하였다

작성한 쉘 스크립트

echo '시작'

echo ">application.yml 파일 위치로 이동"
cd /var/lib/jenkins/workspace/jenkins/(개인 정보)

echo ">application.yml 테스트전용yml 변경"
sed -i "s#\${RDS_URL}#$RDS_URL#" application.yml
sed -i "s#\${RDS_USERNAME}#$RDS_USERNAME#" application.yml
sed -i "s#\${RDS_PASSWORD}#$RDS_PASSWORD#" application.yml
--생략--

echo ">application-prod.yml 서버전용yml 변경"
#sed -i "s#\/root\/chromedriver#\/home\/ec2-user\/chromedriver#" application.yml
sed -i "s#\${RDS_URL}#$SERVER_RDS_URL#" application-prod.yml
sed -i "s#\${RDS_USERNAME}#$SERVER_RDS_USERNAME#" application-prod.yml
sed -i "s#\${RDS_PASSWORD}#$SERVER_RDS_PASSWORD#" application-prod.yml
--생략--

echo ">빌드할 위치로 이동"
cd /var/lib/jenkins/workspace/jenkins/(개인 정보)

echo ">권한 추가 및 클린 빌드"
sudo chmod 777 ./gradlew
sudo ./gradlew clean
sudo ./gradlew build

sed 명령어가 궁금하다면?
https://jhnyang.tistory.com/287
https://ivps.tistory.com/695

jenkins가 빌드를 할때 사용하는 파일 위치는 workspace이다. 기본적으로 기본값이 /var/lib/jenkins/worksapce/(아이템명) 이다.
참고로 workspace의 기본값을 변경할 수도 있다. 하지만, 나는 변경하지 않았다.
아이템명은 여러분이 만든 젠킨스 프로젝트의 이름이다.

아마 위의 쉘스크립트를 그대로 사용했다면, 아마 에러를 만나게 될텐데 그이유가 CentOS기준으로 jenkins 프로그램을 실행시키는 유저가 root권한을 가지고 있지 않기 때문에 sudo라는 명령어를 사용할 수 없다.
하지만 내가 굳이 sudo를 작성한 이유는 sudo를 작성하지 않으면 빌드가 제대로 되지 않기 때문이다.
그렇다면 어떻게 해야하나? 그렇다. jenkins에게 root권한을 주어서 sudo를 사용할 수 있게 만들어야한다.

Jenkins 유저 sudo 권한 주는 방법 사이트 -> 나의 설명보다 원본 설명이 더 나은듯해 따로 설명하진 않는다. (귀찮니즘 절대 아님)

빌드가 성공했다면?!!! codeDeploy 플러그인을 다운받자.

다운로드는 Dashboard > Jenkins 관리 > Plugin Manager > Avaliable plugins 에서 가능하다.

설치를 하고 나면 빌드 후 조치 부분에 Deploy an application to AWS CodeDeploy가 존재할 것이다. 선택하고 이제 값을 입력해 줄 시간

그뒤 저장을 누르면 된다.

한가지 빼먹은 일이 있는데 Dashboard > Jenkins 관리 > Configure System 중간 부분에 AWS CodeDeploy Credentials를 입력하는것이다.

참고한 사이트
https://lemontia.tistory.com/948#recentEntries
https://galid1.tistory.com/747

젠킨스에서 할일은 이제 다 끝났다.

깃허브로 돌아가서 최상단 CI할 브런치 최상단에 appspect.yml과 deploy.sh를 작성해 주기만 하면된다.
이 블로그가 매우 많은 도움을 줄것이다.
https://velog.io/@ayoung0073/Server-Jenkins-Docker-CodeDeploy

배포 !

젠킨스 빌드 실행 버튼을 누르고 기다리면 성공할 것이다.

추가적으로 도움을 얻을 수 있는 블로그

s3를 이용하는 방법

https://lemontia.tistory.com/945 -> 수동 배포

ssh를 이용하는 방법

시리즈 1 / 시리즈 2

디스코드로 배포 성공 유무 확인하기

플러그인에 discord라고 작성하고 discord notifier를 다운 받는다.
discord-notifier 공식문서
디스코드 웹훅 만들기

profile
많은 도움 얻어가시길 바랍니다!

0개의 댓글