[참고자료]: 원격 서버 배포
이번 실습의 마지막 단계인 CD 구축이다.
이전에 사용한 Jenkins와 WAS 서버를 연결해주어야한다
Jenkins 관리 > 플러그인 관리 > Available plugins 로 이동
"Publish Over SSH"를 설치해준다.
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 해놓자!
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
이제 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한다.
Jenkins에서 ssh 서버 접속이 되는지 test 하기 위해
설정 아래의 "Test Configuration" 버튼을 누른다.
이렇게 Success가 출력되면 성공!
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를 선택한다.
"Add Server"를 클릭하고 배포할 서버를 선택한다.
Source files: 배포할 파일(모든 jar 파일)
Remove prefix: 파일의 prefix 제거
Remote directory: 파일을 배포할 디렉토리
Exec command: 배포 후 실행 커맨드(WAS tomcat 컨테이너의 배포 파일을 복사)
모든 과정이 끝났다면 "Build Now" 버튼을 눌러 빌드해주자.
위와 같은 화면이 출력되면 빌드 성공!
마지막으로 연동했던 서버인 WAS로 이동해서 프로젝트가 배포되었는지 확인해보자.
Remote directory로 설정했던 /usr/local/tomcat/webapps/ROOT로 이동한다.
cd webapps/ROOT
ll
cd build
cd libs
ls
build와 gradle이 생성되어 있다.
jar 파일도 정상적으로 생성되었다.
java -jar kakaQ_be-0.0.1-SNAPSHOT.jar
local에서 실행되던 것처럼 잘 실행된다.
아까 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에 관련하여 올릴 예정이다.