0.  구축 환경

  • SVN + Jenkins Server (Windows)
  • Web Server (WebtoB, Windows) 
  • WAS (Jeus, Unix)
  • Front : react
  • API : Spring (Dynamic Web, JDK 1.5)
  • WAS 워크 플로우 : 배포파일 백업 -> SVN 체크아웃 -> ANT 빌드 -> classes 디렉토리 배포
  • WEB 워크 플로우 : 배포파일 백업 -> SVN 체크아웃 -> npm run build -> npm run export -> out 디렉토리 배포

1.  설치

  • 설치 과정에서 관리자 그룹의 로그온 유저를 설정하지 않아 젠킨스 서버내의 명령을 원활하게 실행할 수 없었음.
    • 해결 : 서비스에서 Jenkins 더블클릭 후 로그온 설정에서 관리자 그룹의 유저를 등록함.

2.  플러그인

  • 폐쇄망 환경에서 플러그인을 설치하기 쉽지 않았음. (Plugin Manager 이용 불가)
    • 해결1 : 온라인 환경의 젠킨스에서 Plugin Manager로 설치를 하면 Plugins 폴더에 .jpi가 생성되고, 확장자명을 .hpi로 바꿔 오프라인 환경의 젠킨스 Plugins 폴더에 붙여넣기 후 서버를 재기동하면 설치가 자동으로 이루어짐.
    • 해결2 : https://plugins.jenkins.io/ 링크에서 플러그인을 .hpi로 받을 수 있음.
    • 첫 설치 시에는 해결1 방법이 유용했으며, 추가적으로 필요한 플러그인을 설치할 때는 해결2 방법이 유용했음.

3.  파이프라인

  • 윈도우 환경에서 sh " " 명령을 실행해 오류가 발생함. (단순한 실수지만 에러 로그를 보고 판단하기 쉽지 않았음...)
  • bat "cd path" 후 다시 bat " " 명령을 하면 이동한 경로가 유지되지 않았음. (다시 workspace 경로로 초기화됨.)
    • 해결 : bat """ """ 이용

4.  백업

  • 배포 서버(WAS, WEB)에서 백업을 위해 SSH 명령을 이용하고자 했고, OpenSSH Server offline 설치가 필요했음.
 

[Windows] offline install openssh server

1. openssh.zip 다운로드 및 압축 풀기 https://github.com/PowerShell/Win32-OpenSSH/releases Releases · PowerShell/Win32-OpenSSH Win32 port of OpenSSH. Contribute to PowerShell/Win32-OpenSSH developme..

onestone-note.tistory.com

  • no password ssh를 위한 ssh key 등록 작업을 할 수 없었음. (sshd_config 설정이 필요한데 관리자 계정에 종속되어 있고 보안 솔루션이 적용되고 있는 부분이기도 하기에 수정할 수 없었음.)
    • 해결 : Putty의 plink를 이용 (plink -ssh -pw password ...)
  • plink로 명령 수행시 interactive promt로 엔터를 눌러야하는 상황이 발생함. (젠킨스는 원라인으로 수행해야 하기에 interactive promt를 수행할 수 없음.)
    • 해결 : plink -batch ... (disable interactive promt)
  • plink로 첫 ssh 명령 수행시 yes(호스트키 등록)를 눌러야하는 상황이 발생함.
    • 해결 : echo y | plink ...

5.  ANT 빌드

  • API 프로젝트에 JDK 버전에 맞지 않은 라이브러리가 포함되어 오류가 발생함.
    • 해결 : 해당 라이브러리 교체 및 버전에 맞지 않은 클래스 제거
  • encoding 문제가 발생함.
    • 해결 : build.xml 파일에서 javac 태그 안에 encoding="UTF-8" 추가함.
  • 에러 로그를 하나하나 해결하는 힘이 필요 했음.

6.  npm 빌드

  • nodejs는 offline 설치를 제공하지 않는다. (무조건 online)
    • 해결1 : node_modules를 다른 폴더에 저장해놓고, 해당 프로젝트에 옮겨서 빌드하고 끝난 후에는 다시 원래 폴더로 되돌려 놓는 방법을 이용했다. (복사하는 방법은 시간이 오래 걸린다.)
    • 해결2 : mirror를 이용하는 방법도 있었지만, 위의 방식과 유사한 원리라 더 쉬운 위의 방식을 이용했다.

7.  프론트 (React)

  • 리액트에 대한 이해 부족으로 빌드, 배포 과정에서 어려움을 겪음.
    • 해결 : 다음 과정 이해 npm install -> npm run build -> npm run start (로컬 브라우저에 띄울 때)                                                                                                                                             -> npm run export (배포할 때)
  • VSCode SVN 플러그인에서 SVN Tag 생성이 되지 않았음.
    • 해결 : svn:switch branch 로 생성할 수 있다. (어떻게 보면 branch와 tag는 똑같다, 단지 branch는 여기서 더 형상관리를 해나간다는 것이고 tag는 형상관리를 멈추고 release 하는 것이다.)

8.  배포

  • scp를 이용해 배포하고자 했는데 백업 과정에서의 SSH와 마찬가지로 ssh key 등록을 할 수 없었음.
    • 해결 : Putty의 pscp를 이용함 (pscp -scp -pw password ...)
  • 배포 서버의 배포 디렉토리에 대한 사용자의 쓰기 권한이 없어 scp 명령이 실패함.
    • 해결 : 디렉토리 권한 변경 (이러한 경우도 있음을 나중에도 고려...)
  • 웹 서버 배포시 로컬과 원격 서버의 IP 대역이 달라 네트워크 연결이 되지 않았음.
    • 느낀점 : 네트워크 및 포트 연결 상태는 작업 전에 미리 확인해야 함을 배움.
복사했습니다!