작업 환경 : 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 // 종료
2. Jenkins 설정
- 초기 비밀번호 확인
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
- 최초 접속 후 설정
- 플러그인 설치
- 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 발급받기 (재확인 불가이니 저장해 둘 것)
- 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에서도 자동
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하면 자동으로 빌드 - 배포까지 해준다
'WEB 공부' 카테고리의 다른 글
[WEB] Jenkins 빌드 시 환경변수 파일 넣기 (0) | 2021.10.10 |
---|---|
[WEB] Vuex 동기화 문제 해결 (0) | 2021.10.06 |
[WEB] Jenkins Permission denied 에러 해결법 (0) | 2021.10.06 |
[Frontend] 프론트에서 AWS S3에 이미지 압축 / 업로드 / 다운로드 / 삭제하기 (0) | 2021.08.22 |
[WEB] Spring - DI (0) | 2021.05.18 |
[WEB] Cookie & Session (0) | 2021.05.16 |
[WEB] Backend - EL, JSTL (0) | 2021.05.16 |