티스토리 뷰
□ Gitlab runner
▶ 서버들에서 다수의 토큰을 사용하며 Go 언어로 작성되었기 때문에, 단일 바이너리로 처리되며 해당 포스팅에서는 Shared Runners를 활용한 원격배포를 할것입니다. CI / CD 포스팅을 그대로 따라오셨다면 지금부터는 아래 그림처럼 간단하게 실제 Gitlab-runner를 활용한 CI/CD를 구성해 보겠습니다. 전체적인 구성을 설명드리면 현재 CI/CD Server에 Gitlab-runner, Maven을 추가로 설치하고 로컬에서 개발자들이 Gitlab에 Push를 하게 되면 Gitlab-runner가 동작해 WAS Server에 자동으로 배포되는 아키텍처 입니다. Gitlab-runner는 docker가 아닌 Server에 직접 설치를 진행할 것이며, Shared Runners를 이용한 tag를 지정해 WAS Server에 자동으로 배포까지 진행해 보겠습니다.
□ 간단한 순서
1. CI/CD Server에 Gitlab-runner / Maven install
2. WAS Server에 CI/CD Server에 설치한 Gitlab-runner install
3. CI/CD Server에 Gitlab-runner register
4. 프로젝트 생성 후 Gitlab-CI TEST
□ gitlab-runner install
■ gitlab-runner는 CI/CD , WAS Server에 모두 설치해 줍니다.
$ curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
$ sudo yum install gitlab-runner
□ gitlab-runner register
■ Gitlab에 admin 계정으로 들어가 Runners로 들어가게되면 Set up a shared Runner manually 가 보입니다. 거기에서 2번에는 Gitlab URL이 있고 3번에는 Token정보가 있습니다.
■ 위 정보들을 바탕으로 WAS Server에 Gitlab-runner register를 진행합니다. tags는 아래와 같이 콤마(,)를 활용하여 여러개 지정할 수 있습니다. executor는 shell로 지정합니다. 정상적으로 successfully이 나오면 Gitlab에서 아래와 같이 추가 된걸 확인할 수 있습니다.
[gitlab-runner@hskim-dev001 ~]$ sudo gitlab-runner register
Runtime platform arch=amd64 os=linux pid=5442 revision=4c96e5ad version=12.9.0
Running in system-mode.
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
https://gitlab.hskim.kr
Please enter the gitlab-ci token for this runner:
WLR123456789
Please enter the gitlab-ci description for this runner:
[krish-dev001]: hskim-test
Please enter the gitlab-ci tags for this runner (comma separated):
was, deploy
Registering runner... succeeded runner=WLRhu4VG
Please enter the executor: docker, docker-ssh, parallels, docker-ssh+machine, kubernetes, custom, shell, ssh, virtualbox, docker+machine:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
■ 아래와 같이 정상적으로 추가된 모습을 볼 수 있습니다.
■ 세부 설정으로 들어가 Lock to current projects 체크를 해제해줍니다.
■ 이제 WAS Server에 Deploy하기 위해서 2가지 프로젝트를 사용하겠습니다. 흐름은 war파일을 묶고 Nexus3에 올린 후 Nexus3에 있는 war파일을 WAS Server에 옮겨 실행할 것입니다.
nubc-portal-backend: mvn install을 하여 특정 private repository(Nexus3)에 PUSH
backend-deploy: Nexus3에 있는 war 파일을 WAS Server에 옮긴 후 tomcat 재시작
▶ nubc-portal-backend
■ Gitlab에 프로젝트 생성 후 초기 PUSH를 진행하고 .gitlab-ci.yml 파일을 아래와 같이 작성합니다. 간단하게 mvn install 및 deploy 하는 스크립트이며 tags는 위의 설정했던 was, deploy를 넣어줍니다.
variables:
NAME: 'nubc-portal-backend'
GIT_STRATEGY: clone
stages:
- nubc-portal-backend
nubc-portal-backend:
stage: nubc-portal-backend
only:
- master
before_script:
- echo $(pwd)
script:
- mvn install
- echo $(pwd)
- mvn deploy
tags:
- was
- deploy
■ pom.xml에는 groupID 및 artifactID를 설정해 줍니다. war파일을 만들것이기 때문에 packaging은 war로 설정해줍니다. 그리고 Maven 빌드 패키지단계에서 생성한 아티팩트를 설정을 위해 Nexus3의 저장소 정보를 입력해 줍니다. (distributionManagement 말고 parent를 설정하여 하는 방법도 있습니다.)
<groupId>kr.hskim</groupId>
<artifactId>nubc-portal-backend</artifactId>
<version>5.0.0-SNAPSHOT</version>
<name>nubc-portal-backend</name>
<packaging>war</packaging>
<description>REST API Server for NUBC Portal</description>
<distributionManagement>
<repository>
<id>maven-releases</id>
<url>http://nexus3.hskim.kr/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<url>http://nexus3.hskim.kr/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
■ 아래와 같이 정상적으로 Nexus3에 올라가게 됩니다.
▶ backend-deploy
■ 이제 backend-deploy 프로젝트를 활용하여 Nexus3에 있는 WAR파일을 가지고와서 WAS Server에서 tomcat 재시작까지 하는 .gitlab-ci.yml 파일을 작성합니다.
■ 해당 스크립트는 이제 WAS Server에서 실행됩니다. curl로 NEXUS_URL로 접근해 위에서 올렸던 WAR_PATH 경로를 입력해 다운받고 deploy 위치에 옮기고 톰갯을 재실행하는 스크립트입니다. 이로써 WAS Server까지 배포하는 테스트까지 해보았습니다.
variables:
NAME: 'backend-deploy'
GIT_STRATEGY: clone
stages:
- backend-deploy
tomcat-war-backend-deploy:
stage: backend-deploy
only:
- master
before_script:
- echo ${pwd}
script:
#nexus3 download
- curl -o nubc_portal.war http://${NEXUS_URL}/repository/${NEXUS_BROWSE}/${WAR_PATH}
- sudo cp ./nubc_portal.war /app/tomcat/webapps
- sudo systemctl stop tomcat.service
- sudo systemctl start tomcat.service
- sudo systemctl status tomcat.service
tags:
- dev-deploy
보완할 점이 엄청 많지만(settings.xml 활용, gitlab trigger variables 활용, 환경변수 활용) 추후에 포스팅!
'DevOps > CI - CD' 카테고리의 다른 글
[NBP] CI / CD - Nexus3 및 LDAP 연동 (0) | 2020.06.22 |
---|---|
[NBP] CI / CD - LDAP Install 및 LDAP & Gitlab 연동 (0) | 2020.06.22 |
[NBP] CI / CD - Gitlab (0) | 2020.06.16 |
[NBP] CI / CD - Traefik (0) | 2020.04.14 |