본문 바로가기

개발/spring

[ gcp ] gitlab - jenkins - tomcat 연결 - 3

지난번 글에서  

 

서버 한대에 gitlab , 나머지 서버한대에 jenkins-tomcat을 올리는 작업을 진행했습니다 

 

jenkins와 tomcat에 한 서버에 설치되어 deploy ear/war to container를 사용해서 배포 햇지용..

 

https://programmerk.tistory.com/20

 

그런데 tomcat서버가 여러대가 되서 다른서버로 올리는 상황이 생기면 어떻게 해야할까 고민하여 찾아보는 도중 ssh를 이용하여 배포하는 방법을 찾게되어 진행해보았습니다

 

 

 

publish over ssh 를 사용하는건데요 . 

 

ssh 는 원격 디바이스에 접속할때 사용되는 암호화 방법입니다.

 

작업의 원리는 간단합니다

 

jenkins서버에서  tomcat 웹서버로 ssh 접속을 한 후 war파일을 전달한 후 스크립트를 실행시키도록합니다

 

그렇게 하기위해서 

jenkins에 자신의 rsa private 키를 저장하고 접속하려는 서버에 자신의 rsa public 키를 저장해주면 접속이 가능합니다.

 

 

실제 진행되는 과정을 보여드리겟습니다 ~

 

1. 일단 두대의 클라우드 서버를 준비합니다. 

한대에는 jenkins (agent server 라 칭함 )를 나머지 한대에는 tomcat(remote-server)  를 설치합니다.

 

 

https://programmerk.tistory.com/22

 

https://programmerk.tistory.com/19

 

 

2. agent 서버에 ssh key를 생성한 후 remote 서버에 등록

 

- agent server config

 

sudo ssh-keygen -t rsa -C "jenkins" -m PEM -P "" -f /var/lib/jenkins/.ssh/id_rsa

 

관리자 권한으로 ssh-keygen 사용하여 이름 jenkins , 패스워드 "" , 경로는 {젠킨스_HOME}/.ssh/ id_rsa라는 파일을 생성할 것이다

 

 ssh-keygen public/private 키를 생성하여 ssh 접속을 할때 사용된다 . Public 키는 추후에 remote-server 등록해줄것이고 private 키는 젠킨스 public over ssh 설정에  넣어줄것이다.

한쌍의 키가 있어야 ssh 접속이 가능하다

 

생성한 .ssh폴더의 파일을 젠킨스 권한으로 변경

 chown -R jenkins:jenkins /var/lib/jenkins/.ssh

 chmod -R 777 /var/lib/jenkins/.ssh

 

그리고 id_rsa.pub 파일에 들어가서 데이터를 복사해야한다

 vi id_rsa.pub

 

 

 

- remote server 

 

복사한 데이터를 remote 서버로 가서

 

 vi ~/.ssh/authorized_keys  연다음  위에서 복사한 내용 넣어주시면되여

 

( 없는경우 아래처럼 디렉토리 만들고 권한 주시면됩니다  )

 mkdir .ssh 

 chmod 700 ~/.ssh

 touch ~/.ssh/authorized_keys

 

 

 

3. 젠킨스 웹페이지에 들어가 자신의 publish over ssh에  private key 및 설정

 

 

 

넣을때 ------Begin 부터 ~~~~~~~~~~~~~~~KEY ------------- 까지 다 넣어줘야해요 !!!!!!!!

 

그다음 SSH servers 설정에 remote-server 정보를 넣어줄거에요

Name 아무거나

Hostname remote-server IP

Username remote-server username

Remote directory /home/사용하는 디폴트 디렉토리 넣어주세요

이제 테스트를 진행합니다

테스트가 success 뜨면 정상 등록됫으니 저장해주세요

 

저는 여기서 엄청 fail 떳어요

그래서 keygen으로 여러가지 만들어봣는데 jenkins 경로에다가 만든것만 됫습니다.

 

 

 

 

 

4. 젠킨스에 배포설정 파일 생성

 

이제 제킨스 프로젝트를 생성하겟습니다.

 

프로젝트 생성내용은 저번에 보여드린거와 같고

 

빌드후 배포 부분을 deploy container 에서 send build artifacts over ssh 바꿀것입니다.

 

이설정으로 build war파일을 remote server sftp 전달하게됩니다.

 

밑에 소스경로를 찾아보니까 {jenkins_home}/workspace/젠킨스 project 기본 경로로 잡혀있었습니다

 

Source files **/*.war 잡고

Remove prefix 소스프로젝트명/target 을선언해줍니다.

 

( 경로가  {jenkins_home}/workspace/젠킨스 project/소스프로젝트명/target/ROOT.war 입니다 )

 

 

 

Remote directory 저는 필요없어서 비워두고 

Exce command 실행시킬 명령어를 입력합니다

 

저같은경우에는 ~/ 경로에 start.sh 이라는 쉘스크립트를 만들어 사용할 것입니다

 

 

 

 

5. 이쉘을 만드는 방법은 vi ~/start.sh 입니다

안에 내용은

 

 whoami

 

 

 

sh /usr/share/tomcat9/bin/shutdown.sh

 

sudo sh /usr/share/tomcat9/bin/startup.sh

 

echo "end"

 

whoami 로 실행하는 콘솔의 유저를 확인하고 

이 스크립트에는 젠킨스가 배포후 톰캣을 shutdown 햇다가 start하는 부분을 넣어둘 것 입니다.

 

이렇게하고 저장

 

6. 빌드 및 확인

 

 

빌드되는 로그를 보면 지정한대로 원격 서버로 22 포트를 사용하여 SFTP 접속  했고  system 에서 설정한 directory cd 사용하여 이동하는것을 볼수있습니다 .

그리고 ROOT.war put하여 원격서버로 전달하였습니다. 전달이 끝난후 스크립트를 실행하였습니다.

 

스크립트의 whoami ==> 스크립트 유저 확인할 있고

Tomcat 시작되고

Echo 찍은 로그가 남는것을 볼수있습니다.

 

 

혹시 쉘스크립트동작시 sudo 부분에서 에러가 발생하면 이부분을 jenkins 아님 whoami 에서 나온 유저로 추가해 아래와 같이 해주세요

 

 

 

 

이렇게 함으로써 이제 웹서버가 여러대가 되어도   젠킨스에서 프로젝트를 여러개 만들어서 한번에 관리할수 있습니다.

 

 

 

윈도우와 연결할떄는 아래 윈도우 ssh_config 설정해주시면됩니다

 

https://cloudeveloper.net/windows-10-%EB%84%A4%EC%9D%B4%ED%8B%B0%EB%B8%8C-%EB%B0%A9%EC%8B%9D%EC%9C%BC%EB%A1%9C-ssh-%EC%84%9C%EB%B2%84-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0-64988d87349

 

Windows 10 네이티브 방식으로 SSH 서버 설정하기

지난 번 글에 이어서 Windows 10과 Windows Server 1709부터 기본 제공되는 SSH 서버를 설정하는 방법을 살펴보도록 하겠습니다.

cloudeveloper.net