지난 시간에는 Jenkins만을 사용하여 CI/CD 환경을 구축해보았습니다.
SSH 통신을 사용하여 Jenkins 서버에서 프로젝트 파일을 빌드한 뒤, 이를 Application Server로 전송하여 실행하는 형태로 구축하였는데, 불편한 점이 좀 많았습니다.
특히, Github Action과 AWS CodeDeploy를 사용하는 경우와 비교하였을 때, 사용자가 직접 Jenkins 서버에서 빌드해야한다는 점이 번거로웠습니다.
Github와 Jenkins를 같이 사용하여 이러한 문제점을 해결할 수 있는 것 같기 때문에 공부해볼 겸 CI/CD 환경을 구축해보겠습니다.
그리고 이번에는 공부한 뒤로 한 번도 사용해보지 못한 Docker까지 사용해볼 것 같습니다.
1차적인 이유로는 복잡한 작업을 간소화시키기 위함입니다.
이전에 공식문서를 참조해가면서 Jenkins를 직접 설치해봤는데,
$ sudo apt update
$ sudo apt install fontconfig openjdk-17-jre
$ java -version
$ sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \
https://pkg.jenkins.io/debian/jenkins.io-2023.key
$ echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
https://pkg.jenkins.io/debian binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null
$ sudo apt-get update
$ sudo apt-get install jenkins
설치하기 위한 명령어가 좀 길다는 단점이 존재합니다.
물론 공식문서에 나와있는 내용이기에 필요할 때마다 공식 문서를 찾아서 복사해도 되지만, 도커를 사용하면 쉽게 설치할 수 있다는 장점이 존재합니다.
그리고 사실 전에 도커를 공부하긴했지만, 딱히 사용할 곳이 없어서 애매했던 찰나에 기회가 생겨 사용해보고 싶었습니다.
현재 Github, Jenkins, Docker를 활용하여 다음과 같이 구현하는 것을 목표로 두고 있습니다.
일단 Jenkins 인스턴스에 Docker를 실행시킨 뒤, Docker를 통하여 Jenkins를 실행해줍니다.
Github Repository에 커밋이 발생하는 경우, Github는 이를 Jenkins에게 전달하고 Jenkins는 이를 빌드합니다.
빌드가 정상적으로 완료되었을경우, Jenkins는 SSH 통신을 통하여 Application Server에 jar 파일을 전달하고, 프로젝트를 실행하기 위한 도커 이미지를 도커 허브에 전달합니다.
그리고 Application Server에서 도커 이미지를 가져온 뒤, 이를 실행하여 서버를 배포하는 것을 목표로 하고 있습니다.