CI/CD를 위한 시스템 아키텍처 실습(3)

Soyeon You·2023년 5월 26일
0

System

목록 보기
3/3

[참고자료]: 원격 서버 배포

이번 실습의 마지막 단계인 CD 구축이다.
이전에 사용한 Jenkins와 WAS 서버를 연결해주어야한다

Intergrate Jenkins with WAS

Install Jenkins plugin

Jenkins 관리 > 플러그인 관리 > Available plugins 로 이동
"Publish Over SSH"를 설치해준다.

Generate ssh key

Jenkins가 설치된 VM으로 이동해서 Jenkins 컨테이너에 접속한다.

docker exec -it my_jenkins /bin/bash

아래 커맨드로 ssh key를 생성하면 key가 생성될 위치와 passphrase를 입력하라고 하는데
따로 입력 안 하고 엔터로 넘어갔다.
나처럼 입력을 하지 않으면 default 위치인 /root/.ssh/id_rsa로 생성된다.

ssh-keygen

cat /root/.ssh/id_rsa
cat /root/.ssh/id_rsa.pub

이때 확인한 key 2개는 꼭 copy 해놓자!

Register public key

tomcat을 사전에 설치해둔 WAS VM으로 이동한다.
배포 시 사용할 서버의 .ssh/authorized_key에 public key인 id_rsa.pub를 등록해야한다.
authorized_keys 파일에 copy 했던 id_rsa.pub를 paste해준다.

cd ~
mkdir .ssh
vi .ssh/authorized_keys
chmod 700 .ssh
chmod 600 .ssh/authorized_keys

Setting Jenkins System

이제 id_rsa.pub(private key)를 이용하여 원격서버에 접속하기 위한 설정을 추가할 것이다.
Jenkins 관리 > 시스템 설정 으로 이동한다.
맨 아래로 내리면 Publish Over SSH가 있는데 여기서 "추가"를 눌러준다.

Name: SSH server 이름
Hostname: SSH로 파일을 전송할 원격 서버(WAS)
Username: 원격 서버 계정 이름
Remote Directory: 원격 서버 디렉토리

그런다음 아래의 "고급"을 눌러 "Use password authentication, or use a different key"를 체크한다.
Key 칸에 copy 해둔 id_rsa를 paste한다.

Test server connection

Jenkins에서 ssh 서버 접속이 되는지 test 하기 위해
설정 아래의 "Test Configuration" 버튼을 누른다.

이렇게 Success가 출력되면 성공!

Upload project to gitlab

project를 upload 하기 위해선 gradle(.jar) 이나 maven(.war)으로 생성해야한다.
나는 gradle을 선택했다.

우선 터미널에서 프로젝트 디렉토리로 이동해서 아래 커맨드를 입력한다.

git init

git remote add origin http://172.16.210.76:9090/kakaqserver/test_cicd.git
git branch -M master
git add .
git commit -m "test commit"
git push -uf origin master

Jenkins 프로젝트로 돌아가서 구성 > Build Steps > Invoke Grade script 로 이동한다.
"Use Gradle Wrapper" 선택 후 Tasks는 실행하고자 하는 커맨드를 입력해준다.

Send build artifacts over SSH

"빌드후 조치" 탭에서 Send build artifacts over SSH를 선택한다.

"Add Server"를 클릭하고 배포할 서버를 선택한다.

Source files: 배포할 파일(모든 jar 파일)
Remove prefix: 파일의 prefix 제거
Remote directory: 파일을 배포할 디렉토리
Exec command: 배포 후 실행 커맨드(WAS tomcat 컨테이너의 배포 파일을 복사)

모든 과정이 끝났다면 "Build Now" 버튼을 눌러 빌드해주자.

위와 같은 화면이 출력되면 빌드 성공!

Check Intergration

Check project file

마지막으로 연동했던 서버인 WAS로 이동해서 프로젝트가 배포되었는지 확인해보자.
Remote directory로 설정했던 /usr/local/tomcat/webapps/ROOT로 이동한다.

cd webapps/ROOT
ll

cd build
cd libs
ls


build와 gradle이 생성되어 있다.

jar 파일도 정상적으로 생성되었다.

Run project

java -jar kakaQ_be-0.0.1-SNAPSHOT.jar


local에서 실행되던 것처럼 잘 실행된다.

Jenkins Exec Command

아까 Jenkins에서 배포 서버를 설정할 때 배포 후 실행할 커맨드인 "Exec Command"에서
tomcat 컨테이너에 cp 커맨드를 입력했었다.
tomcat 컨테이너에 접속하여 copy 됐는지 확인해보자.

docker exec -it was_tomcat1 /bin/bash
cd webapps/ROOT
ls

여기에도 정상적으로 copy 된 것을 확인할 수 있다.


이번에 CI/CD 구축 실습을 하면서 gitlab과 Jenkins를 처음 써봤다.
CI까지는 할만했는데 CD가 굉장히 어려웠다..
local에서 작업 중인 project를 모두 올리려면 database도 연동해야한다.

일단 이번 실습 포스팅은 여기까지 마칠 것이며 추후 project가 마무리 되면 추가로 cache나 Druid에 관련하여 올릴 예정이다.

0개의 댓글