티스토리 뷰

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에는 groupIDartifactID를 설정해 줍니다. 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
댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31