본문 바로가기

개발/spring

[ 윈도우 10] gitlab - jenkins - tomcat 연결 - 4

회사 운영서버는 ubuntu  라서 열심히 테스트해 놨는데 

 

테스트 서버는 윈도우라서 다시 공부해서  연결하게됬습니다.

 

생각보다 삽질을 오래했습니다.

 

일단 젠킨스 설치는 그전과같이 ubuntu에 해놓앗고 톰캣 배포 서버만 윈도우입니다

 

그래서 기존 젠킨스 설정은 그대로 이고 , 윈도우서버 ssh 연결 및 배치파일 설정 , 심볼릭링크 걸기 만 추가하도록 하겟습니다.

 

현재 젠킨스에 git , publish over ssh , maven , gitlab과 연동은 다된 상태입니다. 

https://programmerk.tistory.com/19

 

[ ubuntu ] gitlab - jenkins - tomcat 연결 - 1

오랜만에 글을 쓰게되었습니다. 5월에는 쉬는날이 많기도하고 jenkins 셋팅을하는데 2~3일정도 걸려서 글이더 늦게 올라왔습니다. 연결하는데 너무 길어 분할하여 올리도록 하겟습니다. 젠킨스는

programmerk.tistory.com

 

https://programmerk.tistory.com/20

 

[ ubuntu ] gitlab - jenkins - tomcat 연결 - 2

지난번에 jenkin 설치 까지 완료하였습니다. https://programmerk.tistory.com/19 [ ubuntu ] gitlab - jenkins - tomcat 연결 - 1 오랜만에 글을 쓰게되었습니다. 5월에는 쉬는날이 많기도하고 jenkins 셋팅을하..

programmerk.tistory.com

 

빌드 후 조취 부분만 남았는데요 

 

1. 일단 윈도우서버에 ssh server기능을 열어줘야합니다

 

윈도우 -> 설정 -> 앱 -> 선택적 기능 -> 기능추가 -> ssh 입력하면 openssh 서버 설치할수있습니다.

 

 

 

 

 

2. 설치 완료되면 외부에서 비번없이 접근할수있게 등록해줘야합니다

윈도우 -> cmd -> 명령 프롬프트 클릭 -> dir -> cd .ssh ->  authorized_keys 파일 생성

 

3. 이제 만든 파일에  접속하려는 client 의 id_rsa.pub 값을 가져와 붙여넣어주세요 ( 저번에 한거랑 똑같아여 )

 

4. 윈도우 ssh 설정을 좀 바꿔줘야 합니다  

notepad(메모장) 를 관리자권한으로 실행한 후  다음 경로에 파일을 열어주세요

C:\ProgramData\ssh\sshd_config

 

 

몇가지 주석을 풀고 변경해주겠습니다

- 변경

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

PasswordAuthentication no
PermitEmptyPasswords no

- 주석 추가

#Match Group administrators
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

 

그리고 컴퓨터를 껏다 키던지 아니면 관리자모드로 powershell을 실행시킨후 sshd를 내렷다 올려주세요

 

 

 

 

 

자 이제 젠킨스에서 연결이 되는지 확인해보겠습니다.

 

젠킨스 대시보드 -> 시스템 환경 -> publish over ssh 에서 key 부분에 jenkins가 설치된 서버의 id_rsa (privatekey)를 넣어주세요

ssh server 설정에서 hostname에는 서버아이피  , username에는 서버 유저아이디 를 넣어주세요

Remote Directory는 보통 c\User\서버유저아이디 경로 입니다 

 

저는 jenkins_deploy 라는 폴더로 연결 시킬건데요

jenkins_deploy 폴더의 절대경로는 C:\Users\서버유저아이디\jenkins_deploy 입니다

ssh 접속만으로 C:\Users\서버유저아이디 까지 이동한거니까  ./jenkins_deploy만 넣어줘도  

 C:\Users\서버유저아이디\jenkins_deploy  경로로 이동이 가능합니다.

 

 

 

이제 젠킨스에서 설정한 프로젝트의 빌드 후 조치만 보겟습니다. 윗부분은 이전 글을 참고해주세요 

 

일단 Name은 환경설정에서 추가한 부분이고 

 

고급을 눌러서 이부분을 체크해주세요 . ssh 접속이후 빌드 과정의 로그가 남습니다. 

Source files : **/*.war 로 잡아주세요. jar인경우 확장자 바꾸면됩니다

remove prefix :  이부분은 보통 jenkins로 빌드하면 ${workspace }/프로젝트명/target/ROOT.war  에 파일이 생기는데 ${workspace} 부분은 생략되고   '프로젝트명/target/'  을 추가해주면됩니다. 이부분이 제거된다는 의미에요 

Remote directory : 이부분은 따로 설정해도되고 안해도됩니다 . 환경설정에서 추가했기떄문에 기본 경로는 환경설정에서 추가해준 C:\Users\서버유저아이디\jenkins_deploy 입니다

Exec command : 이부분은 ROOT.war가 원격서버에 정상적으로 전달이되고 실행할 동작을 넣어주는 곳입니다

직접입력을 해도되지만 저같은경우 bat 파일을 실행 시켯습니다.

 

 

배치파일 설정한것도 공유할게요

 

제일 먼저 실행되는 배치파일은 restart.bat 입니다

link.bat은 관리자권한으로 심볼릭링크 만들때 사용됩니다

start.ps1 , stop.ps1은 관리자 권한으로 powershell을 실행해서 톰캣 서비스를 내리고 올릴떄 사용됩니다 . 

 

 

유저가 업로드하는 파일은  C:\Users\kid_p\Desktop\upload 여기에 걸어놨습니다. ==> 심볼릭링크로 톰캣에서 읽을 수 잇도록 설정해 놧어요 

 

배치파일 동작은

 

1. ROOT.war 파일 ${tomcat}/webapps/ 이동

2. ROOT.war 권한 변경 

3. ${tomcat}/webapps/resources/upload 심볼릭링크 파일 ( 유저가 올리는 업로드 파일 - 톰캣 외부 경로에 있음 )  C:\Users\서버유저아이디\jenkins_deploy 이동

3-1.  3번 파일에 파일이 없는경우 C:\Users\서버유저아이디\jenkins_deploy 에 심볼릭링크 생성

 

(파워쉘 실행 )

4. 윈도우 서비스에서 톰캣 종료 (  저희는 톰캣을 서비스에올려서 사용하고있습니다 )

(파워쉘 종료)

(딜레이 1초 )

5. ROOT  파일 삭제

(파워쉘 실행 )

6. 윈도우 서비스에 톰캣 실행 

(파워쉘 종료)

(딜레이 10초 )

 

7. 심볼링 링크 다시 {tomcat}/ROOT/resources/ 밑으로 이동

 

이런식으로 진행했습니다

 

중간에 관리자 권한이다 뭐다 해서 굉장이 오래걸렷어요..

 

 

restart.bat

 

@echo off

rem 젠킨스로 배포된 파일을 톰캣 루트로 이동
move C:\Users\유저아이디\jenkins_deploy\ROOT.war "C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps"


echo %username%

rem 파일을 실제 저장하는 심볼릭 디렉토리가 있는지 체크한다 , 있는 경우 jenkins_deploy 폴더로 이동 시키고 없는경우 jenkins_deploy 에 생성한다

if exist "C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps\ROOT\resources\upload" (
  echo true
  move "C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps\ROOT\resources\upload" "C:\Users\유저아이디\jenkins_deploy\upload"
) else (
  echo false
  call C:\Users\유저아이디\jenkins_deploy\link.bat
)



rem  현재 톰캣 운영 상태 체크 
netstat -an | find "8080"


rem 톰캣 경로로 이동 
cd "C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps"

rem ROOT.war에 권한 추가 
icacls "ROOT.war" /GRANT everyone:F /T /Q


rem 톰캣 서비스를 내리기위해 powershell을 관리자 권한으로 실행 
call Powershell.exe -noprofile -executionpolicy bypass -file "C:\Users\유저아이디\jenkins_deploy\stop.ps1"


rem 톰캣 ROOT 디렉토리 삭제 
rmdir /s /q "C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps\ROOT"

rem 톰캣 내려가는 속도 떄문에 약간의 딜레이 줌
ping -n 3 127.0.0.1 1>nul

rem 톰캣을 실행 하기위해 powershell을 관리자권한으로 실행
call Powershell.exe -noprofile -executionpolicy bypass -file "C:\Users\유저아이디\jenkins_deploy\start.ps1"

rem 톰캣 올라갓는지 확인 
netstat -an | find "8080"

rem 톰캣 올라가는 시간 때문에 10초의 딜레이를 준다 
ping -n 10 127.0.0.1 1>nul

rem jenkins_deploy 에 빼놓은 심볼릭링크를 톰캣 ROOT/resources로 이동시킨다
move "C:\Users\유저아이디\jenkins_deploy\upload" "C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps\ROOT\resources\"

 

 


link.bat

 




>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

if '%errorlevel%' NEQ '0' (

    echo Run as Administrator...

    goto UACPrompt

) else ( goto gotAdmin )

:UACPrompt

    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"

    set params = %*:"=""

    echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

 

    "%temp%\getadmin.vbs"

    rem del "%temp%\getadmin.vbs"

    exit /B

:gotAdmin



echo mklink



mklink /d "C:\Users\유저아이디\jenkins_deploy\upload" "C:\Users\유저아이디\Desktop\linkjoin\upload"

 

 

 

start.ps1

 

 

Start-Process -FilePath "powershell" -Verb RunAs
 get-Service tomcat9 

Start-Service tomcat9
get-Service tomcat9 

stop.ps1

 

Start-Process -FilePath "powershell" -Verb RunAs
 get-Service tomcat9 

Stop-Service tomcat9


exit



exit