Commit 02eca8e3 authored by JooHan Hong's avatar JooHan Hong

k8s ci_cd init

parent c76a5a9a
Pipeline #5256 passed with stages
in 47 seconds
...@@ -9,25 +9,26 @@ ...@@ -9,25 +9,26 @@
* Git and GitLab (gitlab-ci.yml) * Git and GitLab (gitlab-ci.yml)
* gitlab-runner * gitlab-runner
* **Docker Swarm Cluster** * docker-compose (**STAG** 시스템에서 사용)
* **K8s**
## GitLab Runner Overview ## GitLab Runner Overview
Runner는 yaml을 파일을 수행한다. 특정 프로젝트에 국한되거나, 여러 프로젝트에서 사용할 수 있도록 제공된다. 여기서 모든 여러 프로젝트에서 사용할 수 있는 Runner를 **Shared Runner**이라고 하며, 특정 프로젝트에 국한되서 사용되는 Runner를 **Specific Runner**라고 한다. Runner는 yaml을 파일을 수행한다. 특정 프로젝트에 국한되거나, 여러 프로젝트에서 사용할 수 있도록 제공된다. 여기서 모든 여러 프로젝트에서 사용할 수 있는 Runner를 **Shared Runner**이라고 하며, 특정 프로젝트에 국한되서 사용되는 Runner를 **Specific Runner**라고 한다.
홍쓰넷 컨테이너 배포에는 `Specific Runner`를 사용한다. 홍쓰넷 컨테이너 배포에는 `Specific Runner`를 사용한다.
## Container Deploy Overview (`Deprecated`) ## Container Deploy Overview (`Current`)
- **STEP 1** : STAG 시스템에 먼저 Docker Image를 배포한 후 검증한다. - **STEP 1** : STAG 시스템에 먼저 Docker Image를 배포한 후 검증한다.
> 사전에 devel 브랜치로 checkout을 수행한다. > 사전에 devel 브랜치로 checkout을 수행한다.
- **STEP 2** : STAG 시스템에서 검증이 완료되면, 다음과 같이 두 가지 Stage가 수행된다. - **STEP 2** : **STAG** 시스템에서 검증이 완료되면, 다음과 같이 두 가지 Stage가 수행된다.
- First : **push** stag는 GitLAB의 Container Registry에 Container Image를 PUSH 한다. - **push** : GitLAB의 Container Registry에 Container Image를 PUSH 한다.
- Second : **deploy** stag는 Docker Swarm Manager 서버에 Image 배포를 명령한다. 단, 모든 WORKER Node가 한 번에 업데이트되는 것이 아니라 한 대씩(**--update-parallelism 1**) 업데이트를 수행하게 된다. - **deploy** : K8s의 Master Node에 Image 배포를 명령한다.
## www.hongsnet.net **Dockerfile** ## www.hongsnet.net **Dockerfile**
...@@ -88,7 +89,7 @@ COPY config/hongsnet.conf /etc/supervisor/conf.d/hongsnet.conf ...@@ -88,7 +89,7 @@ COPY config/hongsnet.conf /etc/supervisor/conf.d/hongsnet.conf
EXPOSE 80 EXPOSE 80
RUN echo "hongsnet, 2020-01-20(5b23e123)" > /root/release_image RUN echo "hongsnet, 2020-12-20(2283829f44f6e5b7b17393ff6861553c13170a9d)" > /root/release_image
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"] CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]
``` ```
...@@ -110,6 +111,9 @@ variables: ...@@ -110,6 +111,9 @@ variables:
GIT_SSL_NO_VERIFY: "1" GIT_SSL_NO_VERIFY: "1"
GITLAB_TOKEN: "XXXXXX" GITLAB_TOKEN: "XXXXXX"
BUILD_IMAGE: ${CI_PROJECT_DIR}/hongsnet BUILD_IMAGE: ${CI_PROJECT_DIR}/hongsnet
BUILD_SHA: ${CI_COMMIT_SHA}
BUILD_SHA_RESULT: "2283829f44f6e5b7b17393ff6861553c13170a9d" #deploy tag, requirement
BUILD_VERSION: "20201220_v1"
before_script: before_script:
#- export RELEASE_DATE=`date +"%Y%m%d"` #- export RELEASE_DATE=`date +"%Y%m%d"`
...@@ -120,8 +124,8 @@ push: ...@@ -120,8 +124,8 @@ push:
- deploy - deploy
script: script:
- docker login -u juhanida21@nate.com -p $GITLAB_TOKEN registry.hongsnet.net - docker login -u juhanida21@nate.com -p $GITLAB_TOKEN registry.hongsnet.net
- /usr/bin/docker tag hongsnet-dev:init registry.hongsnet.net/joohan.hong/docker/hongsnet:latest - /usr/bin/docker tag hongsnet-dev:$BUILD_SHA_RESULT registry.hongsnet.net/joohan.hong/docker/hongsnet:$BUILD_VERSION
- /usr/bin/docker push registry.hongsnet.net/joohan.hong/docker/hongsnet:latest - /usr/bin/docker push registry.hongsnet.net/joohan.hong/docker/hongsnet:$BUILD_VERSION
tags: tags:
- deploy - deploy
...@@ -131,7 +135,9 @@ deploy: ...@@ -131,7 +135,9 @@ deploy:
- deploy - deploy
script: script:
- docker login -u juhanida21@nate.com -p $GITLAB_TOKEN registry.hongsnet.net - docker login -u juhanida21@nate.com -p $GITLAB_TOKEN registry.hongsnet.net
- docker service update --image registry.hongsnet.net/joohan.hong/docker/hongsnet:latest --update-parallelism 1 web_hongsnet - kubectl set image deployment/hongsnet-web hongsnet-web=registry.hongsnet.net/joohan.hong/docker/hongsnet:$BUILD_VERSION
- kubectl rollout history deployment/hongsnet-web
- kubectl rollout status deployment/hongsnet-web
tags: tags:
- backup - backup
...@@ -142,20 +148,18 @@ build: ...@@ -142,20 +148,18 @@ build:
script: script:
- cd /DATA/DOCKERS/hongsnet-dev; docker-compose down - cd /DATA/DOCKERS/hongsnet-dev; docker-compose down
- cd ${BUILD_IMAGE} - cd ${BUILD_IMAGE}
- docker build --rm -t hongsnet-dev:${CI_COMMIT_SHA} . - docker build --rm -t hongsnet-dev:$BUILD_SHA .
- (if [[ `docker images -f "dangling=true" -q` != "" ]]; then docker rmi $(docker images -f "dangling=true" -q); fi); - (if [[ `docker images -f "dangling=true" -q` != "" ]]; then docker rmi $(docker images -f "dangling=true" -q); fi);
- (rm -rf /DATA/DOCKERS/hongsnet-dev/docker-compose.yml; cp -rf /DATA/DOCKERS/hongsnet-dev/docker-compose.yml_init /DATA/DOCKERS/hongsnet-dev/docker-compose.yml); - (rm -rf /DATA/DOCKERS/hongsnet-dev/docker-compose.yml; cp -rf /DATA/DOCKERS/hongsnet-dev/docker-compose.yml_init /DATA/DOCKERS/hongsnet-dev/docker-compose.yml);
- (sed 's/init/${CI_COMMIT_SHA}/g' -i /DATA/DOCKERS/hongsnet-dev/docker-compose.yml); - (sed 's/init/$BUILD_SHA/g' -i /DATA/DOCKERS/hongsnet-dev/docker-compose.yml);
- cd /DATA/DOCKERS/hongsnet-dev; docker-compose up -d - cd /DATA/DOCKERS/hongsnet-dev; docker-compose up -d
tags: tags:
- devel - devel
``` ```
> 컨테이너 배포의 핵심은 gitlab-runner가 Manager Node에서 다음과 같이 명령하면서 업데이트가 이루어진다. > !중요 : **K8s**의 경우 Container Image Tag를 `latest`로 배포하는 것을 권장하지 않는다.
```bash > 배포과정 : **Image set** -> Rolling Update history 출력 -> Rolling Update watching -> 배포완료
docker service update --image registry.hongsnet.net/joohan.hong/docker/hongsnet:latest --update-parallelism 1 web_hongsnet
```
## 컨테이너 배포 절차 ## 컨테이너 배포 절차
...@@ -175,7 +179,7 @@ docker service update --image registry.hongsnet.net/joohan.hong/docker/hongsnet: ...@@ -175,7 +179,7 @@ docker service update --image registry.hongsnet.net/joohan.hong/docker/hongsnet:
> Working... > Working...
컨테이너 이미지 생성 시 **Git의 Commit SHA 값으로 컨테이너의 Tagging을 지정**한다. 컨테이너 이미지 생성 시 **Git의 Commit SHA(BUILD_SHA) 값으로 컨테이너의 Tagging을 지정**한다.
```python ```python
(rm -rf /DATA/DOCKERS/hongsnet-dev/docker-compose.yml; cp -rf /DATA/DOCKERS/hongsnet-dev/docker-compose.yml_init /DATA/DOCKERS/hongsnet-dev/docker-compose.yml); (rm -rf /DATA/DOCKERS/hongsnet-dev/docker-compose.yml; cp -rf /DATA/DOCKERS/hongsnet-dev/docker-compose.yml_init /DATA/DOCKERS/hongsnet-dev/docker-compose.yml);
...@@ -191,12 +195,7 @@ services: ...@@ -191,12 +195,7 @@ services:
image: hongsnet-dev:init image: hongsnet-dev:init
hostname: 'dev.hongsnet.net' hostname: 'dev.hongsnet.net'
volumes: volumes:
- "/DATA/SERVICE/passwd:/etc/passwd"
- "/DATA/SERVICE/group:/etc/group"
- "/DATA/SERVICE/shadow:/etc/shadow"
- "/DATA/SERVICE:/home" - "/DATA/SERVICE:/home"
- "/DATA/SERVICE/logs:/usr/local/apache/logs"
- "/DATA/DOCKERS/hongsnet-dev/ssl:/etc/letsencrypt"
- "/WEB_DATA/EDU/Data:/home/edu/public_html/HongsBoard/Data" - "/WEB_DATA/EDU/Data:/home/edu/public_html/HongsBoard/Data"
- "/WEB_DATA/EDU/Web_editor/EDU:/home/edu/public_html/HongsBoard/Web_editor/EDU" - "/WEB_DATA/EDU/Web_editor/EDU:/home/edu/public_html/HongsBoard/Web_editor/EDU"
- "/WEB_DATA/EDU/Web_editor/FILE:/home/edu/public_html/HongsBoard/Web_editor/FILE" - "/WEB_DATA/EDU/Web_editor/FILE:/home/edu/public_html/HongsBoard/Web_editor/FILE"
...@@ -209,24 +208,21 @@ services: ...@@ -209,24 +208,21 @@ services:
``` ```
**!참고** **!참고**
.gitlab-ci.yml 파일에 정의된 내역을 보면 다음과 같이 **Git Commit SHA 값**으로 변경하는 명령이 존재한다. .gitlab-ci.yml 파일에 정의된 내역을 보면 다음과 같이 **Git Commit SHA(BUILD_SHA) 값**으로 변경하는 명령이 존재한다.
```python ```python
- (sed 's/init/${CI_COMMIT_SHA}/g' -i /DATA/DOCKERS/hongsnet-dev/docker-compose.yml); - (sed 's/init/$BUILD_SHA/g' -i /DATA/DOCKERS/hongsnet-dev/docker-compose.yml);
``` ```
이는 `Commit 된 SHA 값`을 향후 **참조하기 위한 용도**로 사용된다. 이는 `Commit 된 SHA 값`을 향후 **참조하기 위한 용도**로 사용된다.
![container_dev](./images/gitlab_ci_cd_container.png)
- **STEP 3** : **STAG** 시스템에서 Docker Image의 상태를 확인한다. - **STEP 3** : **STAG** 시스템에서 Docker Image의 상태를 확인한다.
```bash ```bash
# docker ps # docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
29bc33723517 hongsnet-dev:d7f4a64cc6098bd61af337e0c822bc53c5ed35b7 "/usr/bin/supervisor…" 8 minutes ago Up 8 minutes 0.0.0.0:80->80/tcp hongsnet-dev_hongsnet_1 29bc33723517 hongsnet-dev:2283829f44f6e5b7b17393ff6861553c13170a9d "/usr/bin/supervisor…" 8 minutes ago Up 8 minutes 0.0.0.0:80->80/tcp hongsnet-dev_hongsnet_1
0779415724e2 portainer/portainer-ce:latest "/portainer" 4 weeks ago Up 4 weeks 8000/tcp, 0.0.0.0:9000->9000/tcp portainer 0779415724e2 portainer/portainer-ce:latest "/portainer" 4 weeks ago Up 4 weeks 8000/tcp, 0.0.0.0:9000->9000/tcp portainer
``` ```
...@@ -240,13 +236,13 @@ Switched to branch 'deploy' ...@@ -240,13 +236,13 @@ Switched to branch 'deploy'
``` ```
**!중요** **!중요**
Stag 과정 중에 Commit 된 ${CI_COMMIT_SHA} 변수를 /root/release_image 파일에 업데이트함으로써 증적을 기록한다. Stag 과정 중에 Commit 된 $BUILD_SHA_RESULT 변수를 /root/release_image 파일에 업데이트함으로써 증적을 기록한다.
```bash ```bash
# cat Dockerfile # cat Dockerfile
...중략 ...중략
RUN echo "hongsnet, 2020-01-20(d7f4a64cc6098bd61af337e0c822bc53c5ed35b7)" > /root/release_image RUN echo "hongsnet, 2020-12-20(2283829f44f6e5b7b17393ff6861553c13170a9d)" > /root/release_image
``` ```
이제 add/commit/push를 진행하면 된다. 이제 add/commit/push를 진행하면 된다.
...@@ -254,127 +250,45 @@ RUN echo "hongsnet, 2020-01-20(d7f4a64cc6098bd61af337e0c822bc53c5ed35b7)" > /roo ...@@ -254,127 +250,45 @@ RUN echo "hongsnet, 2020-01-20(d7f4a64cc6098bd61af337e0c822bc53c5ed35b7)" > /roo
```bash ```bash
# git add hongsnet/Dockerfile # git add hongsnet/Dockerfile
# git commit -m "2020-01-20(d7f4a64cc6098bd61af337e0c822bc53c5ed35b7)" # git commit -m "2020-12-20(2283829f44f6e5b7b17393ff6861553c13170a9d)"
# git push -u origin deploy # git push -u origin deploy
``` ```
# K8s Deploy Review
# Swarm Manager Review - **Image Pull Policy**
- **docker-stack.yml**
```bash
# cat docker-stack.yml
version: '3'
services:
hongsnet:
image: registry.hongsnet.net/joohan.hong/docker/hongsnet:latest
volumes:
- HOME:/home
- EDU_DATA:/home/edu/public_html/HongsBoard/Data
- EDU_EDITOR:/home/edu/public_html/HongsBoard/Web_editor/EDU"
- EDU_FILE:/home/edu/public_html/HongsBoard/Web_editor/FILE"
- HONGS_DATA:/home/hongsnet/public_html/Data"
- HONGS_EDITOR:/home/hongsnet/public_html/Web_editor/FILE"
- NEWSYSTEM_DATA:/home/newhongsystem/public_html/Data"
- NEWSYSTEM_EDITOR:/home/newhongsystem/public_html/Web_editor/FILE"
ports:
- "80:80"
deploy:
mode: global
placement:
constraints: [node.hostname != TB2-DOCKER]
update_config:
parallelism: 5
delay: 10s
restart_policy:
condition: on-failure
max_attempts: 3
window: 120s
volumes:
HOME:
driver_opts:
type: "nfs"
o: "addr=192.192.0.254,nolock,soft,rw"
device: ":/WEB_SRC/home"
EDU_DATA:
driver_opts:
type: "nfs"
o: "addr=192.192.0.254,nolock,soft,rw"
device: ":/WEB_DATA/EDU/Data"
EDU_EDITOR:
driver_opts:
type: "nfs"
o: "addr=192.192.0.254,nolock,soft,rw"
device: ":/WEB_DATA/EDU/Web_editor/EDU"
EDU_FILE:
driver_opts:
type: "nfs"
o: "addr=192.192.0.254,nolock,soft,rw"
device: ":/WEB_DATA/EDU/Web_editor/FILE"
HONGS_DATA:
driver_opts:
type: "nfs"
o: "addr=192.192.0.254,nolock,soft,rw"
device: ":/WEB_DATA/HONGSNET/Data"
HONGS_EDITOR:
driver_opts:
type: "nfs"
o: "addr=192.192.0.254,nolock,soft,rw"
device: ":/WEB_DATA/HONGSNET/Web_editor/FILE"
NEWSYSTEM_DATA:
driver_opts:
type: "nfs"
o: "addr=192.192.0.254,nolock,soft,rw"
device: ":/WEB_DATA/NEWHONGSYSTEM/Data"
NEWSYSTEM_EDITOR:
driver_opts:
type: "nfs"
o: "addr=192.192.0.254,nolock,soft,rw"
device: ":/WEB_DATA/NEWHONGSYSTEM/Web_editor/FILE"
```
> `global mode`를 사용한다. 이는 사전에 의도된 구성이며, 내역은 다음과 같다.
```python ```python
deploy: imagePullPolicy: IfNotPresent
#mode: replicated
#replicas: 3
mode: global
``` ```
또한 Manager(Leader) Node는 다음과 같이 제외한다. > 기본 풀(pull) 정책은 IfNotPresent이며, 이것은 kubelet이 **이미 존재하는 이미지에 대한 Pull을 생략**하게 한다.
```python - **Gitlab Pipeline 결과**
placement:
constraints: [node.hostname != TB2-DOCKER]
``` ![container_dev](./images/gitlab_ci_cd_container.png)
- **Docker Swarm Node status** - **Pod Describe 결과**
```bash ```bash
# docker node ls # kubectl describe pod hongsnet-web |grep 20201220
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION Image: registry.hongsnet.net/joohan.hong/docker/hongsnet:20201220_v1
bb6yuipq9ja8llzi25owyz1a2 TB2 Ready Active Reachable 20.10.2 Normal Pulling 8m14s kubelet Pulling image "registry.hongsnet.net/joohan.hong/docker/hongsnet:20201220_v1"
5mtd5wiql2cqnh5088p8036by * TB2-DOCKER Ready Active Leader 20.10.2 Normal Pulled 8m13s kubelet Successfully pulled image "registry.hongsnet.net/joohan.hong/docker/hongsnet:20201220_v1" in 585.920698ms
m1rybwgn3facxoklcuj5j20tg TB3 Ready Active Reachable 20.10.2 Image: registry.hongsnet.net/joohan.hong/docker/hongsnet:20201220_v1
t3zbiuhkpam480yfqgc78tzgn TB3-DOCKER Ready Active 20.10.2 Normal Pulling 8m4s kubelet Pulling image "registry.hongsnet.net/joohan.hong/docker/hongsnet:20201220_v1"
Normal Pulled 8m2s kubelet Successfully pulled image "registry.hongsnet.net/joohan.hong/docker/hongsnet:20201220_v1" in 2.254472117s
Image: registry.hongsnet.net/joohan.hong/docker/hongsnet:20201220_v1
Normal Pulled 7m52s kubelet Container image "registry.hongsnet.net/joohan.hong/docker/hongsnet:20201220_v1" already present on machine
Image: registry.hongsnet.net/joohan.hong/docker/hongsnet:20201220_v1
Normal Pulling 8m9s kubelet Pulling image "registry.hongsnet.net/joohan.hong/docker/hongsnet:20201220_v1"
Normal Pulled 8m8s kubelet Successfully pulled image "registry.hongsnet.net/joohan.hong/docker/hongsnet:20201220_v1" in 543.885153ms
Image: registry.hongsnet.net/joohan.hong/docker/hongsnet:20201220_v1
Normal Pulled 7m56s kubelet Container image "registry.hongsnet.net/joohan.hong/docker/hongsnet:20201220_v1" already present on machine
``` ```
Swarm 서비스의 상태는 다음과 같다. - **K8s Dashboard 확인**
```bash ![container_dev](./images/k8s-dashboard-ci_cd.png)
# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
xodct3yxupq6 monitor_alertmanager global 1/1 prom/alertmanager:latest *:9093->9093/tcp
zlay4qoq8gg7 monitor_cadvisor global 4/4 google/cadvisor:latest *:8080->8080/tcp
pfljlqixrepi monitor_grafana global 1/1 grafana/grafana:latest *:3000->3000/tcp
1kakkg4asokp monitor_prometheus global 1/1 prom/prometheus:latest *:9090->9090/tcp
hjsvav9409zy web_hongsnet global 3/3 registry.hongsnet.net/joohan.hong/docker/hongsnet:latest *:80->80/tcp
```
> **web_hongsnet** 이 서비스에 대한 컨테이너 이다.
...@@ -25,9 +25,9 @@ Runner는 yaml을 파일을 수행한다. 특정 프로젝트에 국한되거나 ...@@ -25,9 +25,9 @@ Runner는 yaml을 파일을 수행한다. 특정 프로젝트에 국한되거나
> 사전에 devel 브랜치로 checkout을 수행한다. > 사전에 devel 브랜치로 checkout을 수행한다.
- **STEP 2** : STAG 시스템에서 검증이 완료되면, 다음과 같이 두 가지 Stage가 수행된다. - **STEP 2** : STAG 시스템에서 검증이 완료되면, 다음과 같이 두 개의 Stage가 수행된다.
- First : **push** stag는 GitLAB의 Container Registry에 Container Image를 PUSH 한다. - **push** : GitLAB의 Container Registry에 Container Image를 PUSH 한다.
- Second : **deploy** stag는 Docker Swarm Manager 서버에 Image 배포를 명령한다. 단, 모든 WORKER Node가 한 번에 업데이트되는 것이 아니라 한 대씩(**--update-parallelism 1**) 업데이트를 수행하게 된다. - **deploy** : Docker Swarm Manager 서버에 Image 배포를 명령한다. 단, 모든 WORKER Node가 한 번에 업데이트되는 것이 아니라 한 대씩(**--update-parallelism 1**) 업데이트를 수행하게 된다.
## www.hongsnet.net **Dockerfile** ## www.hongsnet.net **Dockerfile**
...@@ -110,6 +110,7 @@ variables: ...@@ -110,6 +110,7 @@ variables:
GIT_SSL_NO_VERIFY: "1" GIT_SSL_NO_VERIFY: "1"
GITLAB_TOKEN: "XXXXXX" GITLAB_TOKEN: "XXXXXX"
BUILD_IMAGE: ${CI_PROJECT_DIR}/hongsnet BUILD_IMAGE: ${CI_PROJECT_DIR}/hongsnet
BUILD_SHA: ${CI_COMMIT_SHA}
before_script: before_script:
#- export RELEASE_DATE=`date +"%Y%m%d"` #- export RELEASE_DATE=`date +"%Y%m%d"`
...@@ -120,7 +121,7 @@ push: ...@@ -120,7 +121,7 @@ push:
- deploy - deploy
script: script:
- docker login -u juhanida21@nate.com -p $GITLAB_TOKEN registry.hongsnet.net - docker login -u juhanida21@nate.com -p $GITLAB_TOKEN registry.hongsnet.net
- /usr/bin/docker tag hongsnet-dev:init registry.hongsnet.net/joohan.hong/docker/hongsnet:latest - /usr/bin/docker tag hongsnet-dev:$BUILD_SHA registry.hongsnet.net/joohan.hong/docker/hongsnet:latest
- /usr/bin/docker push registry.hongsnet.net/joohan.hong/docker/hongsnet:latest - /usr/bin/docker push registry.hongsnet.net/joohan.hong/docker/hongsnet:latest
tags: tags:
- deploy - deploy
...@@ -142,10 +143,10 @@ build: ...@@ -142,10 +143,10 @@ build:
script: script:
- cd /DATA/DOCKERS/hongsnet-dev; docker-compose down - cd /DATA/DOCKERS/hongsnet-dev; docker-compose down
- cd ${BUILD_IMAGE} - cd ${BUILD_IMAGE}
- docker build --rm -t hongsnet-dev:${CI_COMMIT_SHA} . - docker build --rm -t hongsnet-dev:$BUILD_SHA .
- (if [[ `docker images -f "dangling=true" -q` != "" ]]; then docker rmi $(docker images -f "dangling=true" -q); fi); - (if [[ `docker images -f "dangling=true" -q` != "" ]]; then docker rmi $(docker images -f "dangling=true" -q); fi);
- (rm -rf /DATA/DOCKERS/hongsnet-dev/docker-compose.yml; cp -rf /DATA/DOCKERS/hongsnet-dev/docker-compose.yml_init /DATA/DOCKERS/hongsnet-dev/docker-compose.yml); - (rm -rf /DATA/DOCKERS/hongsnet-dev/docker-compose.yml; cp -rf /DATA/DOCKERS/hongsnet-dev/docker-compose.yml_init /DATA/DOCKERS/hongsnet-dev/docker-compose.yml);
- (sed 's/init/${CI_COMMIT_SHA}/g' -i /DATA/DOCKERS/hongsnet-dev/docker-compose.yml); - (sed 's/init/$BUILD_SHA/g' -i /DATA/DOCKERS/hongsnet-dev/docker-compose.yml);
- cd /DATA/DOCKERS/hongsnet-dev; docker-compose up -d - cd /DATA/DOCKERS/hongsnet-dev; docker-compose up -d
tags: tags:
- devel - devel
...@@ -175,13 +176,13 @@ docker service update --image registry.hongsnet.net/joohan.hong/docker/hongsnet: ...@@ -175,13 +176,13 @@ docker service update --image registry.hongsnet.net/joohan.hong/docker/hongsnet:
> Working... > Working...
컨테이너 이미지 생성 시 **Git의 Commit SHA 값으로 컨테이너의 Tagging을 지정**한다. 컨테이너 이미지 생성 시 **Git의 Commit SHA(BUILD_SHA 변수) 값으로 컨테이너의 Tagging을 지정**한다.
```python ```python
(rm -rf /DATA/DOCKERS/hongsnet-dev/docker-compose.yml; cp -rf /DATA/DOCKERS/hongsnet-dev/docker-compose.yml_init /DATA/DOCKERS/hongsnet-dev/docker-compose.yml); (rm -rf /DATA/DOCKERS/hongsnet-dev/docker-compose.yml; cp -rf /DATA/DOCKERS/hongsnet-dev/docker-compose.yml_init /DATA/DOCKERS/hongsnet-dev/docker-compose.yml);
``` ```
**docker-compose.yml** 파일내역은 다음과 같다. 수행된 **docker-compose.yml** 파일내역은 다음과 같다.
```bash ```bash
# cat docker-compose.yml_init # cat docker-compose.yml_init
...@@ -191,12 +192,7 @@ services: ...@@ -191,12 +192,7 @@ services:
image: hongsnet-dev:init image: hongsnet-dev:init
hostname: 'dev.hongsnet.net' hostname: 'dev.hongsnet.net'
volumes: volumes:
- "/DATA/SERVICE/passwd:/etc/passwd"
- "/DATA/SERVICE/group:/etc/group"
- "/DATA/SERVICE/shadow:/etc/shadow"
- "/DATA/SERVICE:/home" - "/DATA/SERVICE:/home"
- "/DATA/SERVICE/logs:/usr/local/apache/logs"
- "/DATA/DOCKERS/hongsnet-dev/ssl:/etc/letsencrypt"
- "/WEB_DATA/EDU/Data:/home/edu/public_html/HongsBoard/Data" - "/WEB_DATA/EDU/Data:/home/edu/public_html/HongsBoard/Data"
- "/WEB_DATA/EDU/Web_editor/EDU:/home/edu/public_html/HongsBoard/Web_editor/EDU" - "/WEB_DATA/EDU/Web_editor/EDU:/home/edu/public_html/HongsBoard/Web_editor/EDU"
- "/WEB_DATA/EDU/Web_editor/FILE:/home/edu/public_html/HongsBoard/Web_editor/FILE" - "/WEB_DATA/EDU/Web_editor/FILE:/home/edu/public_html/HongsBoard/Web_editor/FILE"
...@@ -209,13 +205,13 @@ services: ...@@ -209,13 +205,13 @@ services:
``` ```
**!참고** **!참고**
.gitlab-ci.yml 파일에 정의된 내역을 보면 다음과 같이 **Git Commit SHA 값**으로 변경하는 명령이 존재한다. .gitlab-ci.yml 파일에 정의된 내역을 보면 다음과 같이 **Git Commit SHA(BUILD_SHA) 값**으로 변경하는 명령이 존재한다.
```python ```python
- (sed 's/init/${CI_COMMIT_SHA}/g' -i /DATA/DOCKERS/hongsnet-dev/docker-compose.yml); - (sed 's/init/$BUILD_SHA/g' -i /DATA/DOCKERS/hongsnet-dev/docker-compose.yml);
``` ```
이는 `Commit 된 SHA 값`을 향후 **참조하기 위한 용도**로 사용된다. 이는 `Commit 된 SHA(BUILD_SHA) 값`을 향후 **참조하기 위한 용도**로 사용된다.
![container_dev](./images/gitlab_ci_cd_container.png) ![container_dev](./images/gitlab_ci_cd_container.png)
...@@ -240,7 +236,7 @@ Switched to branch 'deploy' ...@@ -240,7 +236,7 @@ Switched to branch 'deploy'
``` ```
**!중요** **!중요**
Stag 과정 중에 Commit 된 ${CI_COMMIT_SHA} 변수를 /root/release_image 파일에 업데이트함으로써 증적을 기록한다. Stag 과정 중에 Commit 된 $BUILD_SHA 변수를 /root/release_image 파일에 업데이트함으로써 증적을 기록한다.
```bash ```bash
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment