젠킨스로 CI/CD 적용하기(CD 적용편) - 2
이번 글에서는 젠킨스로 CD, 즉 지속적 배포를 적용해보겠습니다.
먼저 CD를 위해서 프로젝트의 소스코드를 빌드한 후에 만들어진 패키지 파일(xxx.jar, bundle.js 등등)을 배포할 서버에 보내줄 것입니다.
그러기 위해서 Publish Over SSH 플러그인이 필요합니다.
Jenkins의 메뉴에서 Jenkins 관리로 들어간다음 Manage Plugins 로 들어갑니다.
1번부터 4번까지 진행해주시면 됩니다.
Publish Over SSH 플러그인을 이용해서 빌드한 소스코드의 패키지 파일(xxx.jar, bundle.js)를 배포할 서버에 보내줄 것입니다.
(Publish Over SSH 플러그인은 ssh접속을 위한 설정을 하고 scp를 이용해서 파일을 보냅니다. 배포를 위해 패키지 파일을 보내는 것이지 꼭 패키지 파일이 아니라도 보낼 수 있습니다!)
4번까지 진행하셨다면 다음과 같은 화면이 나옵니다.
설치가 완료되고 Jenkins가 재시작 될 수 있도록 체크해줍니다.
(체크를 하고 다 끝난거같은데 화면이 넘어가지않는다면 다시 젠킨스 홈으로 접속을 해주세요!)
설치가 완료되고 젠킨스 메인화면이 나왔다면 다시 메인화면의 젠킨스 설정 -> 시스템 설정으로 갑니다.
시스템 설정으로 들어와서 스크롤을 쭉 내려보면 Publish Over SSH 플러그인을 설치하기 전에는 없었던 설정 폼이 추가됐습니다.
여기서 ssh에 접속하기 위한 다양한 방법들이 있는데 이 글에서는 .pem 파일(개인키)에 있는 내용을 사용하겠습니다.
pem 파일은 Privacy Enhanced Mail 로 Base64 로 인코딩한 텍스트 형식의 파일입니다.
pem키에 관한 내용이 더 궁금하다면 여기서 봐주세요!
이제 ssh에 접속하기위한 rsa private key인 pem파일 내용물을 Key에 입력하고 SSH Servers 추가를 눌러줍니다.
SSH Servers 의 정보를 입력하겠습니다.
참고로 SSH Servers 는 여러개 추가가 가능합니다.
Name : 젠킨스 내부에서 현재 설정을 식별할 이름입니다. 개인이 임의로 작성하면 됩니다.
Hostname : 실제로 접속할 원격 서버의 ip를 입력합니다.
Username : 접속할 원격 서버의 username 입니다.
RemoteDirectory : 원격서버에 접속하여 작업을 하게되는 디렉토리입니다.
RSA Private key와 Hostname을 제대로 입력했다면 우측 하단의 Test Configuration을 눌렀을 때 Success가 나옵니다!
이제 SSH 접속을 위한 설정은 완료됐습니다.
이제 Item으로 가서 배포를 위한 설정을 해보겠습니다!
이전 글에서 CI 설정을 했던 Item으로 가서 구성으로 들어갑니다.
구성 화면에서 Build 설정 폼 아래를 보면 빌드 후 조치 추가가 있습니다.
Send build artifacts over SSH를 선택합니다.
아래의 입력폼이 나옵니다.
Name 은 젠킨스 설정에서 입력했던 서버 설정의 이름입니다.
Source files 는 대상이 되는 파일을 입력해줍니다. 와일드카드 '*' 로 여러개의 파일도 옮길 수 있습니다.
Remove prefix 는 원격 서버에 생성되어서는 안되는 경로의 부분을 의미합니다. 여기서는 원격서버에 /build/lib 경로의 폴더가 새로 만들어지는 것을 막기위해 build/libs 를 입력하여 제거해준것입니다. 이렇게하면 원격지 서버에는 *.jar 파일만 옮겨집니다.
Remote directory 원격지에 작업을 진행할 폴더를 입력합니다.
Exec command 원격지 서버에서 실행할 command를 입력합니다. 여기서는 sh 명령어를 이용해서 원격지 서버에 만들어둔 배포용 script를 실행시켰습니다.
여기서 추가적으로 원격지 서버에서 Console에 찍히는 로그를 젠킨스에서 보고싶다면 아래와 같이 고급을 누르고
Verbose output in console 에 체크를 해줍니다.
여기까지 하셨으면 모든 설정이 끝났습니다.
이제 대상 브랜치에 push(merge) 이벤트가 발생하면 자동테스트 + 빌드 -> 자동 배포가 이뤄집니다.
다음 글에서는 Pipeline을 이용해서 Item을 설정해보겠습니다.