www.hongsnet.net Source Deploy
구성 요소
- 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 이동
GitLAB Runner Register
위와 같이 Runner가 등록되었으면, 다음과 같은 현황을 확인할 수 있다.
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을 보면, 다음과 같이 진행된 것을 확인할 수 있다.
또한 상세내용은 다음과 같다.
- STEP 4 : Stag 서버에서 변경된 내역을 확인한다.
"JSP(단독)" 메뉴 클릭 시 다음과 같이 Javascript 호출되면서 Index로 이동