[GCP] spring boot + jenkins + docker 배포하기 (임시)
GCP 프로젝트 생성부터 jenkins 설치까지는 이전 글에서 다뤘다.
우선, 이전에 만든 jenkins
인스턴스에서 [유사하게 만들기]로 web
인스턴스를 생성하자.
생성 후에는 외부 고정 IP도 할당하자.
(기존에 있던 instance-1
은 ubuntu 였으므로 일단 중지해놓자.)
현재 실행 중인 인스턴스는 아래와 같다.
jenkins
: 젠킨스 서버, Centos7web
: 배포 서버, Centos7
젠킨스 서버에서는 Docker를 사용하지 않고,
배포 서버에서는 Docker를 사용할 것이다.
0. 시나리오
이 글을 참고했다.
- 코드를 작성한다.
- 깃헙에 Push한다.
- Webhook이 걸려 젠킨스에게 Job을 실행하라고 한다.
- 젠킨스가 Build해준 결과를 배포 서버에 넘긴다.
- 배포 서버에서 컨테이너를 실행해 자동 배포한다.
1. 젠킨스 서버 (jenkins
)
이 글을 참고했다.
1) 메타데이터 ssh 접근 설정
키 생성과 등록은 이전 글에서 이미 진행했다.
2) 젠킨스 서버 구동
젠킨스 인스턴스에 SSH 접속한 뒤에 아래 커맨드를 실행한다.
$ sudo service jenkins start systemctl enable jenkins
http://[젠킨스 서버 외부IP]:9090
으로 웹 브라우저에 접속한다.
3) Publish Over SSH
이 글을 참고했다.
설치
위 플러그인을 설치한다.
설정
먼저, 공개키와 개인키를 확인해보자.
# 공개키 확인
$ cat .ssh/id_rsa.pub
# 개인키 확인
$ cat .ssh/id_rsa # 복사해두자!
이때 확인한 개인키를 복사해두자!
이제 Publish Over SSH 설정을 해보자.
[Jenkins 관리 > 시스템 설정]에 들어간다.
맨 아래 보면 Publish Over SSH 관련 설정이 있다.
아래와 같이 설정해주었다.
각각의 입력은 아래의 과정을 거치면 된다.
- 아래의 그림에서 Name은 가급적이면 GCP에서 인스턴스의 이름과 동일하게 지어주는것이 좋다. (나는 배포 인스턴스의 이름을 적었다.)
- Hostname은 IP를 적어주면 되는데 워커 인스턴스가 젠킨스와 같은 네트워크상에 있으면 내부IP를 사용해도 된다. (나는 내부 IP를 사용했다.)
(같은 Region에 내부 IP가 비슷하다면 같은 네트워크)- Username은 인스턴스와 연결된 Username에 대한 정보이다. GCP에서 로그인할때 사용하는 계정 ID를 적어주면 된다.
- Remote Directory는 홈 디렉토리를 사용했다. 홈 디렉토리 정보는 홈 경로(~)에서 스크립트 명령어 ‘pwd’를 입력하면 확인할 수 있다.
- Test Configuration을 클릭하여 정상적으로 설정이 되었는지 확인할 수 있다. 잘 되었다면 왼쪽 하단에 ‘Success’ 라는 출력을 확인할 수 있다.
- 모든 입력이 끝난 후에는 저장을 해주면 된다
3) Jenkins와 Github Webhooks를 이용하여 배포 자동화 하기
이 글을 참고했다.
새로운 Item 생성
item name을 적고(나는 배포할 프로젝트의 이름을 적었다), Freestyle project를 선택하자.
Github와 연동
Jenkins 내 Git 경로 설정
Jenkins 내 Git 경로는 아래에서 설정한다.
Dashboard 메뉴 중 Jenkins 관리 선택
Global Tool Configuration 선택
하단의 Git 설정 중 Path to Git executable에 앞서 확인 한 git.exe의 전체 경로 붙여넣기 후 Save
Jenkins 내 Git 경로가 제대로 설정되어 있지 않을 경우 아래의 에러가 빨간색 글씨로 나타나 있을 것이다.
private repository 등록
이 글을 참고했다.
나는 private repository에 프로젝트가 있으므로 아래 설정을 해주어야한다.
젠킨스 인스턴스에서 이전에 생성한 공개키, 비밀키를 사용하면 된다.
# 공개키 확인
$ cat .ssh/id_rsa.pub
# 비밀키 확인
$ cat .ssh/id_rsa
생성한 공개키를 key
자리에 등록하면 아래와 같이 Deploy key를 생성할 수 있다.
이 때, 비밀키를 복사 후 붙여넣기 하자.
credential을 생성했다!
github 연동
이런 에러가 발생한다면?
$ /usr/bin/git ls-remote -h git@github.com:minju412/docker-test.git HEAD
=================
3) Global Config
JDK
Git
4) System Config
Github Repository
Github
Publish Over SSH
5) Create Jenkins’ Job
6) Git Clone
7) Build
8) Deploy
2. 배포 서버 (web
)
1) Docker 설치
# yum-utils 업데이트
$ sudo yum install -y yum-utils
# Docker-ce 저장소 추가
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 도커 엔진 설치
$ sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 도커 엔진 실행 및 서비스 등록
$ systemctl start docker
$ systemctl enable docker
$ systemctl status docker
2) Dockerfile 생성
3) init.sh
작성
4) Github에 Push
5) 자동 배포 되었는지 확인
2. 배포 서버에 도커 설치
==========================
web
인스턴스에 도커 설치하기
이 글을 참고했다.
$ sudo apt-get update
# 필수 패키지 설치
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
# GCP Key 인증
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# finger pring 확인
$ sudo apt-key fingerprint 0EBFCD88
# docker repository emdfhr
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
# docker 설치
$ sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io
$ docker -v
$ sudo systemctl enable docker && service docker start
# 권한 부여
$ sudo usermod -aG docker $USER
spring boot 배포하기
이 글을 참고했다.
Ref.
💛 개인 공부 기록용 블로그입니다. 👻