발단
개인적으로 CI/CD 구축 시에 구글에 올라온 블로그 글들이 고작 몇개월 전인데 이미 적용이 안되는 글이라 너무 어려웠다.
그래서 이 글에 CI/CD 구축을 자세하게 써볼까 했는데, 이미 다른 블로그에 해당 내용이 많고 시간 소모가 많이 될 것 같아서 바뀐 내용만 인지하는 차원에서 적어보려고 한다.
추후에 개인적으로 참고하려는 용도로 쓰는 글이지만 누구든 한번 쯤은 읽어보는 것도 좋을 것이다.
괜히 이 블로그 저 블로그보면 똥 된장 구분 못하기 때문에 구축할 때 이런 부분을 조심해야겠구나하고 슥 한번 보고 넘어가시면 된다. (물론 이 글도 언젠가 똥이 될 수도)
참고
1. 시행착오를 겪었던 것을 주로 적는다.
2. 과거의 블로그 글과 현재 차이나는 부분을 중점적으로 적을 것이다.(예를들어 젠킨스 처음부터 끝까지 설치하는 과정은 다른 블로그에도 충분히 많아서 설명하지 않고 생략함)
3. 리눅스 명령어를 잘 모르겠다면(vim 사용 등) 여기를 참조.
목표
CI - 지속적 통합
스프링부트를 Github에 배포를 하면 젠킨스에서 해당 파일을 빌드하고 빌드가 끝나면 Slack으로 메시지를 전송해주는 시스템을 만든다.
CD - 지속적 통합
빌드가 끝나면 Publish Over SSH로 jar 파일 배포 후에 도커로 이미지 생성 후 프로젝트를 자동 배포하는 시스템을 만든다.
여기서는 Declarative Pipeline + 블루 오션을 사용 할 예정이다.
개인적으로 이 수작업 노가다를 하는 궁극적인 이유는 블루 오션때문이다. 블루 오션에 관한 글을 따로 적을 예정.
1. 스프링부트 프로젝트 Github 배포
타임리프로 html 페이지 하나만 찍히는 프로젝트 생성했다.
여기서 겪은 시행착오는 하나뿐이다.
JDBC를 연결하지 않으면 계속 연결하라는 에러가 떴기 때문이다.
Spring boot 프로젝트에서 DB 없이 사용하려면 @SpringBootApplication 어노테이션에 아래와 같이 적어야 하는 듯 하다.
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
프로젝트 실행이 정상적으로 됐다면 프로젝트 github에 배포
2. 리눅스 설치 후 젠킨스 설치
개인 서브용 컴퓨터에 Ubuntu 20.04 버젼을 설치했다.
그리고 Putty로 열기 위해 터미널(Ctrl+Alt+T)을 열어 SSH Server 접속이 가능하도록 아래 명령어로 설치했다.
apt-get install ssh
그리고 모든 작업은 메인 컴퓨터 putty를 연결해서 작업했다.
Putty를 통해 아래 명령어로 젠킨스를 설치한다.(설치 과정은 다른 블로그 글이 더 자세하므로 패스)
sudo apt-get install jenkins
참고 - putty에서 복사는 우클릭, 붙여넣기는 Shift+Insert를 활용하자.
도커 내에 젠킨스를 설치하느냐, 리눅스 서버위에 젠킨스를 바로 설치하느냐가 고민이었는데 개인적으로는 리눅스 위에 바로 젠킨스를 설치했다. 이유는 여기를 참조.
3. 젠킨스 포트 변경 시 Issue
젠킨스를 실행하기에 앞서 젠킨스 포트를 변경해줘야 한다. 기본 포트가 8080 포트이기 때문에 겹치는 현상 때문에 바꿔주는 것이 좋다. 이 부분도 과거 젠킨스 버젼과 내용이 달랐던 부분이다.
sudo vi /usr/lib/systemd/system/jenkins/service
위의 명령어를 입력하고 키보드 화살표로 쭉 내리다보면 8080으로 PORT가 잡혀있는데 이 부분을 vim을 이용해 원하는 포트번호로 수정해준다.
만약에 위의 명령어를 입력했는데 수정 할 내용은 하나도 없이 텅텅 비어있다면 아래 명령어로 젠킨스를 한번 실행시키고 나서 확인해보자. 모든 설정이 끝났으면 다시 아래 명령어를 통해 젠킨스를 실행한다.
sudo service jenkins restart
실행이 됐으면 http://[서버URL]:[포트]를 입력해서 들어온다.
4. 젠킨스 Publish Over SSH 설정
젠킨스 구성 설정의 대부분은 예전 글과 그리 큰 차이가 없어서 어려움이 없었지만 CD 구축 시 SSH 설정이 굉장히 어려웠다.
Publish over SSH가 올 초에 젠킨스에서 취약점 문제로 배포 종료가 됐었지만
2022년 2월 중순 경에 바로 1.24 version으로 업데이트를 하면서 다시 사용할 수 있게 되었다.
SSH 설정을 할 때 키생성에 관한 글들이 많지만 RSA 키를 생성할 때 ssh-keygen만 입력하면 제대로 연동이 안된다.
ssh-keygen -t rsa -b 4096 -m PEM
위 코드로 키를 생성해야한다. 무조건.
5. 젠킨스 내에 Credential에 제발 Description을 적자 눈물난다 정말 ㅠ
이거 안적어 놓으면 나중에 구분 안돼서 피똥싼다. A든 B든 뭐라도 적어놓자.
6. 깃헙 Webhook이란?
깃헙의 Webhook(웹훅)이란, 특정 이벤트가 발생하였을 때 타 서비스나 응용프로그램으로 알림을 보내는 기능이다.
그니까 Push가 일어나면 젠킨스로 알림을 보내는 것을 말한다. 알림을 받은 젠킨스는 빌드, 배포 자동화가 시작된다.
깃헙 Repository Setting 에서 웹훅을 설정할 때 젠킨스 주소를 적는 부분이 있는데 여기다가 localhost라고 적으면 Github은 자기 내 회사의 localhost를 바라본다. 마찬가지로 내 컴퓨터 내부 IP를 적어줘도 github에선 못 알아먹을 것이다.
그래서 github이 내 컴퓨터의 외부 아이피를 바라볼 수 있도록 해야하는데, 여기서 ngrok이라는 것을 이용해도 되지만 무료 이용자에게는 너무 한없이 차가운 놈이라 그냥 포트포워딩을 통해 뚫어줬다.
'🐋 Docker' 카테고리의 다른 글
Dockerfile을 빠르게 배워보기 (0) | 2023.11.13 |
---|---|
Docker Volume을 빠르게 배워보기 (0) | 2023.11.13 |
도커(docker) + 톰캣(tomcat)으로 war 배포하기 (1) | 2020.02.07 |
윈도우에서 도커 사용 시 가상화 설정 (0) | 2020.02.07 |