Name
Last commit
Last update
..
images ci_cd image 교체
README.md stag, dev.hongsnet.net adding

logo

www.hongsnet.net Source Deploy

source_overview

구성 요소

  • Git and GitLab (gitlab-ci.yml)
  • gitlab-runner
  • k8s

GitLab Runner Overview

Runner는 yaml을 파일을 수행한다. 특정 프로젝트에 국한되거나, 여러 프로젝트에서 사용할 수 있도록 제공된다. 여기서 모든 여러 프로젝트에서 사용할 수 있는 Runner를 Shared Runner이라고 하며, 특정 프로젝트에 국한되서 사용되는 Runner를 Specific Runner라고 한다.

홍쓰넷 소스배포에는 Specific Runner를 사용한다.

!참고 : Shared 와 Specific Runner의 차이

Specific Runner는 특정 Project에서만 사용할 수 있다.

이는 여러 프로젝트에서 사용가능한 Shared Runner와의 가장 큰 차이점이다.
즉, 여러 프로젝트에서 유사한 Job을 수행할 경우에는 Shared Runner가 권장되며,
특별한 Job이 있는 경우에는 Specific Runner가 권장된다.

예를 들어, 만약 특정 프로젝트를 Deploy할 때 이를 위한 프로젝트 별로 권한을 지정해야 한다면,
Specific Runner를 통해 Job을 수행하는 것이다.

GitLAB Runner Install

  • redhat 계열
# curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | bash
...중략

# yum install gitlab-runner
  • Debian 계열
# curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | bash
...중략

# apt install gitlab-runner

GitLAB Runner Register (Nodes)

GitLab Runner 패키지를 설치했으면, 다음과 같이 등록(register)을 수행해야 한다.

# gitlab-runner register
Runtime platform arch=amd64 os=linux pid=3037 revision=ac8e767a version=12.6.0
Running in system-mode.

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
https://gitlab.hongsnet.net
Please enter the gitlab-ci token for this runner:
XXXXXXXXX
Please enter the gitlab-ci description for this runner:
[TB2.hongsnet.net]:
Please enter the gitlab-ci tags for this runner (comma separated):
deploy
Registering runner... succeeded runner=M4y6veuz
Please enter the executor: kubernetes, docker, docker-ssh, parallels, shell, ssh, virtualbox, custom, docker+machine, docker-ssh+machine:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

Token의 정보는 GitLAB에서 확인할 수 있다.

프로젝트 -> Settings -> CI/CD -> Runners 이동

runner_gitlab

GitLAB Runner Register

위와 같이 Runner가 등록되었으면, 다음과 같은 현황을 확인할 수 있다.

runner_register

GitLAB .gitlab-ci.yml 파일의 작성

# cat .gitlab-ci.yml
stages:
  - devel
  - deploy
  - backup

variables:
  GIT_STRATEGY: clone
  GIT_SSL_NO_VERIFY: "1"
  TARGET_SERVICE_DIR: /var/lib/libvirt/SERVICE/home/hongsnet
  TARGET_DEVEL_DIR: /DATA/SERVICE
  TARGET_DEPLOY_DIR: /WEB_SRC/home

devel:
  stage: devel
  only:
    - devel #master 브랜치의 devel만 해당
  script:
   - rsync -ar --delete ${CI_PROJECT_DIR} ${TARGET_DEVEL_DIR}
  tags:
   - devel #gitlab runner에서 지정한 tag 이름

deploy:
  stage: deploy
  only:
    - master #backup 브랜치의 deploy만 해당
  script:
   - rsync -ar --delete ${CI_PROJECT_DIR}/public_html ${TARGET_DEPLOY_DIR}/hongsnet/
  tags:
   - backup #gitlab runner에서 지정한 tag 이름

tb2:
  stage: backup
  only:
    - master #master 브랜치의 deploy만 해당
  script:
   - (if [[ ! -d ${CI_PROJECT_DIR}/public_html ]]; then mkdir -p ${CI_PROJECT_DIR}/public_html; fi);
   - rsync -ar --delete ${CI_PROJECT_DIR}/public_html ${TARGET_SERVICE_DIR}
  tags:
   - tb2 #gitlab runner에서 지정한 tag 이름

tb3:
  stage: backup
  only:
    - master #master 브랜치의 deploy만 해당
  script:
   - (if [[ ! -d ${CI_PROJECT_DIR}/public_html ]]; then mkdir -p ${CI_PROJECT_DIR}/public_html; fi);
   - rsync -ar --delete ${CI_PROJECT_DIR}/public_html ${TARGET_SERVICE_DIR}
  tags:
   - tb3 #gitlab runner에서 지정한 tag 이름

소스배포 절차

  • STEP 1 : devel 브랜치를 Checkout 한다.
# git checkout devel

# git branch
* devel
  master
  • STEP 2 : 특정 페이지에 다음과 같은 코딩을 수행한다.
echo "<script type=\"text/javascript\">
        alert('개발서버 테스트입니다!');
        location.href='/';
      </script>";
exit;
  • STEP 3 : devel 브랜치에 commit 하고, Push 한다.
# git add public_html/freehosting_jsp.html
# git commmit -m "개발서버의 배포 테스트"
# git push -u origin devel

GitLAB의 pipeline을 보면, 다음과 같이 진행된 것을 확인할 수 있다.

cicd_devel

또한 상세내용은 다음과 같다.

cicd_devel_com

  • STEP 4 : Stag 서버에서 변경된 내역을 확인한다.

http://dev.hongsnet.net

dev_hongsnet

"JSP(단독)" 메뉴 클릭 시 다음과 같이 Javascript 호출되면서 Index로 이동

dev_hongsnet_result