개요
이번 시간에 Jenkins를 이용해서 jar 파일을 배포하는 법을 알아보겠습니다. GCP 서버에 Jenkins 설치 및 docker를 이용해서 image를 사용해보겠습니다.
다음은 준비물입니다
- GCP ubuntu 환경 인스턴스
다음은 작업 목차입니다
1. jenkins instance 설치
2. worker instance 설치
3. jenkins 설치하기
3-1. jenkins 초기 설치하기
3-2. [플러그인 관리] 설정하기
3-3. [Jenkins 관리] 생성하기
3-4. [새로운 Item] 생성하기
3-5. build하기
1. jenkins instance 설치
jenkins 인스턴스에서 실행하는 명령어를 설치합니다.
sudo yum install -y wget
sudo yum install -y maven
sudo yum install -y git
sudo yum install -y docker
jenkins를 설치합니다.
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
sudo yum -y install jenkins
sudo systemctl start jenkins
sudo systemctl status jenkins
jenkins가 정상적으로 설치되었다면 Active에 active(running)이 표시됩니다.
jenkins는 8080포트를 사용하기 때문에 8080포트를 외부에서 접근할 수 있도록 허용합니다.
[방화벽 규칙 설정]으로 가서 추가합니다.
2. worker instance에 docker 환경 구축하기
worker instance에서 docker 환경을 구축하기 위해 아래 명령어를 입력합니다.
sudo yum install -y docker
sudo systemctl start docker
sudo chmod 666 /var/run/docker.sock
3. jenkins 설치하기
3-1. jenkins 초기 설치하기
초기 접속 화면은 아래와 같습니다.
관리자 비밀번호를 입력하기 위해 터미널에서 다음의 명령어를 입력합니다.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
해당 비밀번호를 입력하고 다음으로 넘어갑니다
왼쪽의 추천 플러그인을 선택합니다.
설치중인 화면입니다.
설치가 모두 끝났다면 계정을 생성합니다
계정을 생성하면 접속 주소 설정이 나옵니다. 그대로 진행합니다.
설치가 완료되고 메인 화면입니다.
3-2. [플러그인 관리] 설정하기
SSH 배포를 위한 기본 설정이 필요합니다. [Jenkins관리]에 들어갑니다.
[플러그인 관리]에 들어갑니다.
[고급] 에서 플러그인 올리기를 합니다. 해당 파일 다운로드 링크는 다음과 같습니다.
https://archives.jenkins-ci.org/plugins/publish-over-ssh/latest/
publish-over-ssh 설치가 성공합니다.
jenkins와 애플리케이션 instance를 SSH로 연결하기 위해서 개인키, 공개키 생성 및 셋팅이 필요합니다. 이 때 비대칭키를 이용합니다.
Jenkins와 연동한 instance 이외에 다른 해커가 접근하는 것을 막기 위해서입니다. 따라서, Jenkins에서 개인키와 공개키를 먼저 생성합니다. 공개키는 각 worker instance에 등록하고 Jenkins의 SSH 접속 키로 개인키를 저장합니다. 이제 Jenkins만 SSH로 worker instance에 접근 할 수 있습니다.
아래의 명령어로 개인키와 공개키를 생성합니다.
ssh-keygen -t rsa -f ~/.ssh/id_rsa
아래 사진은 공개키와 개인키의 정상 생성 결과입니다.
id_rsa가 개인키이며, id_rsa.pub이 공개키입니다.
GCP에서 개인키는 [설정] - [메타데이터] - [SSH키] 에 등록하면 Jenkins와 연동한 instance들에 일괄 적용이 가능합니다.
공개키를 jenkins에 저장하기 위해 [Jenkins 관리] - [시스템 설정] 으로 이동합니다.
위의 방식이 안된다면 공개키를 각각의 worker-instance에 직접 등록해야 합니다.worker-instance에서 다음과 같이 경로에 들어와서 jenkins의 공개키(id_rsa.pub)을 복사 붙여넣기 합니다
3-3. [Jenkins 관리] 생성하기
맨 아래에 [Publish over SSH]로 이동해서 개인키와 SSH Servers 정보를 입력합니다.
여러개의 instance를 생성하기 때문에 Name은 규칙에 맞게 지어줍니다.
Hostname은 내부 IP를 적어줍니다.
Username은 해당 instance의 Terminal의 유저명을 입력합니다.
Remote Directory는 다음의 명령어로 위치를 알아냅니다.
cd ~
pwd
디렉토리 위치는 다음과 같습니다.
* aws에서의 설정은 다음과 같습니다.
Key : Jenkins에서 생성한 개인 키
Name : 인스턴스 name
Hostname : 프라이빗 IPv4
Username : centos
Remote Directory : cd ~에서 pwd 경로
3-4. [새로운 Item] 생성하기
다음으로 배포 스크립트를 작성합니다.
[새로운 Item] 에서 item 이름을 적고, [Freestyle project]를 선택합니다.
[빌드 후 조치]에서 [Send build artifacts over SSH]을 추가합니다
이전에 [SSH Servers]에서 만든 cpu-worker-instance-1을 Name에 선택합니다.
[고급]을 눌러 [Verbose output inconsole]을 체크하는데, 에러 메세지를 자세히 나타냅니다.
Exec command는 실행 명령어로서, 도커를 실행하며 로그를 남기기 위해 다음과 같은 코드를 입력합니다.
nohup docker run -p 8080:80 userId/cpu-bound-app > /dev/null 2>&1 &
deploy 환경이 완료되었습니다.
3-5. build하기
Build Now를 통해 빌드를 실행합니다.
'문제 해결, 기술 비교 > 개인프로젝트(북클럽)' 카테고리의 다른 글
Artillery로 한줄 게시판 저장/조회 성능 개선하기 (0) | 2022.05.13 |
---|---|
개인 프로젝트 오류 해결 (0) | 2022.05.13 |
Github webhook & Jenkins 연동하기 (0) | 2022.02.05 |
nginx를 이용한 로드밸런싱 및 무중단 배포 (0) | 2022.02.03 |
Dockerized 애플리케이션 GCP에 배포하기 (0) | 2022.02.02 |