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 더블클릭 후 로그온 설정에서 관리자 그룹의 유저를 등록함.
- 해결 : 서비스에서 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 설치가 필요했음.
- 해결 : zip 파일 다운 -> 서비스 등록 -> 기동 및 자동 시작 설정 https://onestone-note.tistory.com/53
[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 대역이 달라 네트워크 연결이 되지 않았음.
- 느낀점 : 네트워크 및 포트 연결 상태는 작업 전에 미리 확인해야 함을 배움.
'인프라 > Jenkins' 카테고리의 다른 글
[Jenkins] SSH, SCP offline (0) | 2021.10.22 |
---|---|
[Jenkins] Plugin offline install (0) | 2021.10.22 |
[Jenkins] SVN Tag 빌드 및 배포하기 (0) | 2021.09.28 |
[Jenkins] Spring Gradle 빌드 & 원격 서버에 배포 (0) | 2021.09.26 |
[Jenkins] CentOS에 Jenkins 설치하기 (0) | 2021.09.15 |