[WEB] Jenkins로 CI/CD 구축하기

[WEB] Jenkins로 CI/CD 구축하기

작업 환경 : Gitlab, Jenkins, gradle

1. jenkins, java 설치 후 구동

Java 설치

// 자바 설치, 필요한 버전으로 수정 sudo apt-get install openjdk-11-jdk // 버전확인 java --version

버전 확인

Jenkins 설치

//키 다운로드 wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add - echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list //키 확인 apt-key list //jenkins 설치 sudo apt-get install jenkins

Jenkins 실행 port 변경 기본 port인 8080은 tomcat 등 다른 서비스들도 많이 사용하는 포트라, 변경해주는게 편하다 /etc/sysconfig/jenkins 또는 /etc/default/jenkins 파일의 HTTP_PORT를 변경

Jenkins 구동

systemctl start jenkins // 구동 systemctl status jenkins // 상태확인 systemctl restart jenkins // 재시작 systemctl stop jenkins // 종료

status 확인

2. Jenkins 설정

초기 비밀번호 확인

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

최초 접속 후 설정

초기 비밀번호 입력 Install suggested plugins 관리자 계정 생성

플러그인 설치

Jenkins관리 - 플러그인 관리 Gitlab, Publish over SSH, Gradle(보통 위에서 설치됨)

Global Tool Configuration 설정 JDK 및 Gradle을 버전에 맞춰 설정

//java 위치 확인 which javac readlink -f [which javac의 결과]

3. Item 생성 및 빌드 설정

새로운 Item - Freestyle Item 생성

Item - 구성 - 소스 코드 관리

Repository URL : 관리할 gitlab url 입력

Gitlab 계정정보 추가(Credentials Add) Username에 로그인 ID, Password에 비밀번호 입력 ID와 Description은 원하는대로 기입 가능하다

빌드할 branch명 지정

Gradle 빌드 설정 추가 Invoke Gradle script

빌드 설정 생성한 Gradle 지정 clean(사용할 workspace 청소), build(빌드) 입력 우측 하단 [고급...] 버튼으로 메뉴 확장 Build할 File(backend/build.gradle) 지정

빌드 파일 지정

Item 화면에서 Build Now를 누르면 테스트 가능하다

성공

4. Push/Merge시 자동 빌드 설정

Item 구성 - 빌드 유발 설정 Push, Accepted Merge, Closed Merge(차이가 뭐지?) 설정 GitLab webhook URL 확인 우측 하단 [고급...] 버튼으로 메뉴 확장 Secret token 발급받기 (재확인 불가이니 저장해 둘 것)

이벤트 설정 Secret Token 발급

Gitlab 프로젝트에 webhook 설정 Settings - Webhooks 진입 (maintainer 권한 필요) URL : Jenkins의 GitLab webhook URL Secret token : Jenkins의 Secret token Trigger : push, merge 선택 하단의 Add webhook으로 추가

webhook 작동 확인 Test - Push events를 선택해 상단에 HTTP 200이 응답되면 정상 작동 push 이벤트를 보냈으므로 Jenkins에서도 자동

webhook push 테스트 테스트에 자동 빌드하는 Jenkins

5. 자동 배포 설정

이번 프로젝트에선 Nginx가 :80, :443 요청을 localhost:xxxx로 proxy하도록 설정 즉, Nginx는 가만히 두고 localhost만 재시작해주면 자동 배포로 동작한다

SSH 전송을 위한 서버 설정 Jenkins 홈 - Jenkins 관리 - 시스템 설정 - Publish over SSH key 경로 지정 혹은 직접 입력

접속할 서버 설정 이름, IP, 계정명, base 디렉토리 설정 (이 경우는 home 디렉토리)

Item 구성 - 빌드 후 조치 - Send build artifacts over SSH 추가

파일 전송 설정값 지정 Source files : 옮길 파일, 이 경우 방금 build한 jar파일의 경로 지정 Remove prefix : Source files 입력 내용 중 prefix, 폴더경로에 해당하는 것들 Remote directory : 전송받을 폴더 위에서 /home/account를 base 디렉토리로 설정했으므로, /home/account/test 폴더에 jar파일이 저장된다 Exec command : 전송 후 실행할 명령어

기존 xxxx port를 쓰던 프로세스를 죽이고 지금 전송한 jar를 xxxx port로 사용하겠다

fuser -k [xxxx]/tcp // 주의. 절대경로로만 입력할 것 nohup java -jar /home/account/test/*.jar --server.port=[xxxx] >> server.log 2>&1

이제 develop branch에 push하거나 merge하면 자동으로 빌드 - 배포까지 해준다

from http://nato-blog.tistory.com/135 by ccl(S) rewrite - 2021-10-06 04:01:22