회사 운영서버는 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