작업 환경 : 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하면 자동으로 빌드 - 배포까지 해준다

+ Recent posts