GitLab Runner + Windows + Spring 연동

안녕하세요 ! 간만의 블로그 글을 쓰는 것 같습니다. 이번에는 예전에 시도했었던 Windows + GitLab Runner + Spring 연동을 해보았던 경험을 공유하고자 합니다. 여러 블로그를 공식적으로 참조를 했었고, 그 과정에서 최종적으로 했던 작업은 Windows + Local Tomcat + GitLab Runner 입니다. 도움받았던 사이트도 많아서 함께 명시하고 같이 경험하실 수 있었으면 합니다.

Gitlab_Pineplines

원본 : GitLab 공식 사이트 

0. 들어가기에 앞서..

Gitlab - Runner를 하게 된 계기는 개발 시 소스 레포지토리와 연동되어 Pull Request 발생 시에 테스트 자동 실행, 실행 결과 자동 통보 등과 같은 환경을 구성을 많이 하시는 분들이 많았고, 직접 해보고 싶었습니다. 이를 위해 여러가지 도구들이 있는데 가장 많이 사용되는 방식이 github과 이를 중심으로 하는 에코 시스템들입니다. 하지만 직접 private하게 레포지토리를 구성하는 경우 gitab을 설치하여 많이 사용하는데 직접 이런 체계를 구성해야 했습니다. 이번 글에서는 이런 상황속 특히 Windows 상황에서 gitlab의 CI/CD를 지원하는 Gitlab Runner를 이용하여 Spring 프로젝트에 어떻게 적용했는지에 대해 설명하고자 합니다.

1. GitLab - Runner 설치


참조 링크 : http://allroundplaying.tistory.com/21

공식 GitLab 링크 : https://docs.gitlab.com/runner/install/windows.html

  • GitLab Install Runner ( Windows ) 다운로드
  • 해당 경로는 C:폴더를 만들어서 EXE 파일을 해당 경로에 두면 설치는 완료됩니다.
  • GItLab 설정이 완료되면 Cmd + 마우스 오른쪽 -> 관리자 권한으로 CMD 시행을 해줍니다.
  • ./gitlab-runner.exe register 명령어 입력 ( 해당되는 exe 등록 )
  • Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com ) https://gitlab.com ( 우리는 gitLab을 쓸것임 )
  • gitlab-ci token for this runner ( gitlab 초큰 등록을 해주어야 합니다. )

-> 해당 GitLab ci Token 확인법 -> 해당 GitLab Project -> Settings -> CI / CD를 들어가서 Runner manually의 토큰을 보고 입력하면 됩니다.

as

  • Please enter the gitlab-ci description for this runner
  • ( 해당 GitLab CI 부분의 Runner 이름을 지정해 주는 겁니다. )
  • 제대로 연동시에 CI/CD 확인시 해당 Runner의 이름이 뜰겁니다.
  • Please enter the gitlab-ci tags for this runner (comma separated)
  • 태그 입력으로 해당 태그는 .gitlab-ci.yml에서 반응하는 tags를 설정해 줍니다.
  • ( 제일 중요합니다 / 신중하게 생각해주시길 )
  • Runner 실행 방법
  • Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
  • 우리는 shell로 할거기 때문에 shell로 적어줍니다.
  • shell로 만들 경우 config.toml 파일이 생성됩니다. 이를 통해 우리는 설정한 내용이 기록되어있습니다.
  • 해당 Runner가 제대로 연동이 되어 있다면 Runners activated for this project로 설정이 되어 있을 겁니다.

ad

  • GitLab Runner는 Cmd 관리자 권한으로 열어주어야 합니다. ( 계속 )


2. gitlab.ci.yml 설정


yaml_

  • gitlab-ci.yaml는 해당 프로젝트 루트에 위치시키면 됩니다.
  • 해당 yaml에는 stages를 통해 작동시킬 단계를 나눌 수 있다.
  • 해당 GIT_STRATEGY를 통해 fetch를 받을 수 있고, 기존의 업데이트된 소스외에도 전체적인 소스를 받을 수 있습니다.
  • tags는 해당 설치에 사용된 tags만 사용할 수 있습니다
  • script의 chcp 65001은 UTF-8 설정 ( 한글 문제이며 ) , call을 통해 booting을 할 수 있습니다.


3. WINDOWS BATCH 설정


bat__

  • 윈도우 배치 폴더를 실행하기 위해서 프로젝트 구조는 루트에 박아두던지, 프로젝트 내부에 하는 것이 여러모로 유리하다.
  • 우리는 Root 폴더에 박아두고 실행합시다.
  • 안정적이면 bat을 다른 폴더에 두는 것이 더 좋습니다.


해당 과정까지 진행되고, IntellJ + GItlab Push 할 경우 자동으로 CI / CD -> Job에서 해당 과정을 확인하고 진행되는 것을 볼 수 있습니다.

GitLab_CI_

echo 'MVN Build start' mvn package

=> 해당 MVN Build Console 메시지 표시 후 mvn Package하여 MVN Build WAR 배포


4. WINDOWS MAVEN 설치


  • 참조 링크 : https://zetawiki.com/wiki/윈도우_메이븐_설치
  • 해당 로컬에서 자동 GitLab Runner -> Maven까지 실행되기 위해서는 해당 Maven을 환경 변수에 등록해야 합니다.
  • ( 참고 : 해당 설치 후에 Gitlab - Runner는 껐다 킬것 )


5. WAR 배포 및 해당 경로에 배포 설정 ( web.xml이 없는 경우 포함 )


  • 해당 경로에 JAR로 설정하지 않고 WAR로 배포를 하는 방법입니다.

1

  • packaging 태그를 추가하여 war를 설정하면 해당 Job 실행시 자동으로 WAR이 배포됩니다.
  • name은 ROOT로 해두는 것이 ROOT에 자동으로 배치가 됩니다.

- 이외에 해당 경로에 자동으로 배포 설정 하는 방법입니다.

3

  • 해당 plugin을 작업해 주시면 원격으로 해당 위치에 작업을 해줍니다.
  • warName은 위에 있는 name을 받아와도 되고, 자기 맘대로 이름을 적어도 됩니다.
  • outputDirectory는 해당 Tomcat의 WAR를 파일을 받을 부분입니다.
  • failOnMissingWebXML은 레거시 스프링이면 web.xml이 존재하지만, 부트는 그런것이 없기 떄문에 false로 추가해 주어야 됩니다.


6. POM.XML 설정


<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-tomcat</artifactId>

</dependency>


  • 내장 톰캣이 아닌 Spring-boot-start-tomcat을 설정을 해주어야 합니다.
  • 해당 Pom은 5,6번 설정을 하면 완료됩니다.


7. Spring Main Class 외장 톰캣

Spring_main_Class

  • 해당 코드처럼 실제로 SpringApplicationBuilder configure 작업을 해주어야 합니다.
  • Spring Boot ServletInitalizer 설정


8. 기타 주의사항


  • Server.xml, pom.xml은 이 사항 이후에 건드릴 필요가 없음
  • Local환경이므로 HostName, docbase도 전혀 안건드려도 됩니다.
  • ( 괜히 건드렸다가 더 안됨 )
  • ORG 파일이 META-INF, WEB-INF와 함께 있는지 확인
  • 로그에서 확인해야 할 것 : catalina.log에서 org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [D:\Web\Tomcat8\webapps\ROOT.war] 처럼 해당 ROOT가 Deploy되어있는지 확인


8-1 . tomcat/bin/setenv.bat 설정


  • 필요한지 안필요한지 모름
  • set JAVA_OPTS=%JAVA_OPTS% -Dspring.profiles.active=dev
  • 한 문장 입력후 생성


9. 결론


  • 해당 CI/CD를 Commit만으로 작업할 수 있음
  • Gradle이나 추후 설정은 Batch 파일만 수정하면 됨
  • APP NAME을 ROOT로 하고 경로를 ROOT 바로 앞에 두면 자동으로 ROOT에 빌드됨


10. 필요하고 건드려야 할 파일


  • POM.XML 외장 톰캣 의존
  • Gitlab, GitlabRunner, Maven 설치
  • Gitlab CI yml 설정 필요


11. Apache & Tomcat 리스타트 bat 파일


@echo off

set "CATALINA_HOME=D:\Web\Tomcat8" set "STOP=%CATALINA_HOME%\bin\shutdown.bat" set "START=%CATALINA_HOME%\bin\startup.bat"

@echo on echo 'Apache Server stop' call net stop Apache2.4

echo 'Tomcat Server Stop & Start' call net stop Tomcat8

echo 'Tomcat Server Start' call net start Tomcat8

echo 'Apache Server Start' call net start Apache2.4


12. Spring Leagcy 시 주의


Spring Leagcy의 경우 .metadata를 기준으로 git을 commit할시에는 프로젝트 내부에서 .gitlab-ci.yml를 추가해도 안됨. 즉 , 프로젝트 내부 내용을 루트로 끌어와서 작업을 해야합니다

.metadata/ projectname => 이러면 인식을 못함

이 글을 마치며...

당시에는 Linux 를 다루고 CLI 환경에서 다루는데에 조금 더 낯설었던 것 같고, WIndows 환경에서 하는것에 좀 더 집중했었습니다. 해당 경험이 그대로 사라지지 않게 제가 했던 삽질기를 같이 공유드릴 수 있어서 좋았습니다. 감사합니다.


Popit은 페이스북 댓글만 사용하고 있습니다. 페이스북 로그인 후 글을 보시면 댓글이 나타납니다.