Jenkins로 Spring Boot 프로젝트 빌드&배포하기
CI/CD에 대한 언급이 많은 만큼 Jenkins를 통해 구축해보기로 했다.
CI/CD 개념은 따로 포스팅했다.
https://myyoun.tistory.com/166
CI/CD란?
CI/CD라는 용어는 시도때도없이 언급되고 들려오는 용어다. 처음에는 정말 단순하게 '자동배포'만으로 생각했고 그거 그냥 설정만 조금 해놓으면 버튼하나눌러서 하는거 아닌가? 했었던 때도 있
myyoun.tistory.com
환경은 다음과 같다.
- AWS EC2 Ubuntu 20.04
- Spring Boot 2.5.4
- Gradle 7.1.1
CI/CD를 제대로 구축하게 되면 git에 push했을 때 알아서 동작하는것 까지 설정해야 하지만 여기서는 직접 Jenkins에서 빌드를 눌러 배포까지 처리하는 과정만 정리한다.
일단 Jenkins를 사용하기 위해서는 jdk가 필요하다.
https://myyoun.tistory.com/157
[AWS Spring boot (Gradle) 연동] JDK, Tomcat 설치
서버에 올린 뒤 윈도우에서 처음 개발 셋팅을 할때와 마찬가지로 java 셋팅과 Tomcat설치가 필요하다. 제일 먼저 jre를 설치한다. 일단 설치 전, 이전 포스팅 마지막에 있는것 처럼 update와 upgrade를
myyoun.tistory.com
jdk 설치 및 환경변수 설정은 상단 포스팅에 있으니 참고.
jenkins를 설치하기 전 저장소 키를 먼저 다운로드 해야한다.
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
echo deb https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list
만약 설치중 "Package 'jenkins' has no installation candidate" 라는 에러가 발생했다면 하단 링크를 참고한다.
위 키는 2020년 4월에 변경된 키인데 간혹 그 전에 포스팅 된 글에서는 예전 키 경로가 적혀 있을 수 있기 때문이다.
추후 또 변경된다면 같은 에러가 발생할 수 있기 때문에 참고.
그럼 이제 Jenkins 설치를 시작한다.
sudo apt-get update
sudo apt-get install jenkins
키 다운로드 후 update를 안해주면 Package 'jenkins' has no installation candidate 에러를 볼 수 있으니 update 해주고 설치한다.
설치가 끝났다면 서비스 포트를 변경해준다.
jenkins는 기본 default로 8080포트를 사용중이다.
만약 8080 포트를 사용하고 있지 않은 상황이라면 굳이 바꿔줄 필요가 없겠지만 사용하고 있다면 변경해줘야 한다.
sudo vi /etc/default/jenkins
중간쯤에 HTTP_PORT 가 8080으로 되어있는데 이 부분을 사용할 포트로 바꿔주면 된다.
변경해줬다면 jenkins를 재시작 해준다.
sudo service jenkins restart
그리고 systemctl status로 정상 작동 여부를 확인한다.
sudo systemctl status jenkins
그럼 이제 Jenkins 에 접속하기 전에 패스워드를 확인해야 한다.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
입력하면 바로 하단에 출력된다.
브라우저에서 Jenkins로 접속하는 방법은 본인 퍼블릭IP:포트번호 다.
이전에 포트설정할때 9090으로 설정했기 때문에 IP:9090 으로 접근한다.
그럼 이런 화면을 볼 수 있는데 방금 찾아놓은 패스워드를 여기 입력해준다.
여기서는 환경이나 설정에 따라 다르겠지만 그냥 suggested로 진행했다.
suggested를 클릭하면 설치가 진행되는데 시간이 쫌 걸린다.
끝나면 Admin 계정 생성을 진행한다.
스킵도 가능하긴한데 스킵하지 않고 진행했다.
다음은 접근하기 위한 URL이다. 이미 사전에 포트번호를 변경해뒀다면 본인 퍼블릭IP:바뀐포트번호 형태로 출력될것이다.
그럼 일단 1차적인 설정은 끝!
다음으로 필요한 플러그인 설치를 진행한다.
설정이 끝나고 나오는 페이지에서 Jenkins 관리로 들어간다.
플러그인 관리로 이동.
필요한 플러그인은 Gradle Plugin과 Post build task다.
보통 Gradle Plugin은 기본적으로 설치되어 있는것 같다.
하지만 Post build task는 설치되어 있지 않기 때문에 설치가능 탭에서 Post build task를 검색해 설치해준다.
restart에 대해서는 딱히 언급되는걸 본적은 없는데 그냥 Install without restart를 해줬다 항상.
그럼 이런 페이지가 뜨고 페이지 하단에는
이렇게 뜬다. 그냥 restart를 누르는 이유가 여기있다.
어차피 내가 또 체크해서 재시작 해야되니까 그냥............... 별 의미 없는것 같다.
이건 플러그인마다 재시작에 대한 것이 좀 다르겠지만 뭘 택하던 크~게 영향은 없는 것 같다.
그럼 이제 작업을 생성한다.
새로운 Item 클릭.
name을 입력하고 FreestyleProject를 선택한다.
여기도 그때그때마다 상황에 따라 다를 것.
General 부분은 따로 뭘 작성하지 않았다.
소스코드 관리는 git을 통해 진행할것이기 때문에 관리하고자 하는 프로젝트 URL을 적는다.
적고나면 Credentials에서 Add -> Jenkins 클릭.
git의 Username과 password를 적고 Add를 눌러주면 된다.
그럼 이렇게 select box에서 선택할 수 있다.
build에서는 Add build step을 눌러 Invoke Gradle script 를 선택해준다.
여기서 Invoke Gradle를 선택하게 되면 Gradle Version이랑 다 선택해주면서 진행해야 한다.
일단 Use Gradle Wrapper로 선택해 진행한다.
Make gradlew executable 를 체크하지 않으면 permission denied 에러가 발생하니 꼭 체크해준다.
Wrapper location에는 ${workspace}로 해두면 알아서 경로를 찾아가기 때문에 좋다.
Tasks에서는 build를 입력함으로써 빌드를 실행하도록 한다.
빌드 후 조치는 말그대로 빌드가 끝난 후 실행할 것에 대해 작성하는 것이다.
Log text는 빌드가 성공했을 때 Log에서 찍히는 텍스트다.
Log text에 적은대로 찍힌다는 의미가 아니라 로그에 저 텍스트가 찍혔을 때 이 스크립트를 실행한다는 의미로 받아들일 수 있다.
Gradle의 경우는 BUILD SUCCESSFUL로 로그에 찍히고 Maven에는 BUILD SUCCESS로 찍힌다고 한다.
Script에는 배포를 위한 스크립트를 작성해주면 되고
Run script only if all previous steps were successful 를 체크해 이전 단계가 제대로 완료 되었을 때만 script를 실행하도록 하면 끝이다.
그럼 이제 Apply 누르고 저장 누르면 끝!
Build Now 를 누르면 작업이 시작되고
빌드 로그는 시간대 옆에 작게 나오는 화살표를 누르면 Console Output에서 확인할 수 있다.
그리고 Log text 에 관해서는 Console Output에 들어가서
이부분에서 확인할 수 있다.
파란글씨부분이 Log text에 들어가야 하는 부분이고 Log text를 제대로 적었다면
Match found for : BUILD SUCCESSFUL : True로 출력되게 된다.
참고
https://velog.io/@ifthenelse/jenkins-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-ubuntu-20.04
jenkins 설치하기 (ubuntu 20.04)
old 하다는 의견도 많지만, 개인적으로 jenkins가 익숙하고 좋다.무엇보다 shell 자체를 execute하는 방식이 좋다.새로운 서비스의 CI/CD 시스템으로 사용할 jenkins를 설치한다.설치중 "Package 'jenkins' has no
velog.io