일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- python subprocess
- snmp
- regex_search
- c3 step graph
- c3 초
- InfluxDB
- 1697
- 정규식 문자열 출력
- 백준
- 정규식 컴파일
- gcc 업데이트
- semanage
- influxdb 설치
- c++ 정규식
- grafana dashboard
- c3 축 없애기
- selinux port 등록
- python os
- CentOS7
- centos pyhon 설치
- python popen
- g++ 업데이트
- telegraf
- subporcess path
- c3 축 가리기
- c3 second
- gcc regex
- 정규식 활용
- linux시간으로 변경
- snmp test
- Today
- Total
리셋 되지 말자
[CSAPI] develop branch를 이용한 CI 파이프라인 구성 본문
현재 상태
아래 그림과 같이 Nginx 컨테이너가 443 port를 통해 외부로 통신하고 있는 상태다. gitlab-runner는 컨테이너 형태가 아닌 local에 설치했기에 이처럼 그림으로 표시했다.
80포트를 443포트로 redirect
현재 http 즉 80 포트를 이용해 도메인으로 접속하면 아래 그림과 같이 접속할 수가 없다. (443 포트 접속은 가능)
보통 여러 웹사이트를 검색해서 들어가면, 분명 80포트로 접속했는데 https로 자동으로 접속되는걸 경험했었는데 이것을 해본다.
이 과정을 develop branch를 따로 두어, CI 파이프라인을 통해 업데이트 되도록 해본다.
develop branch 작업
develop branch를 만들고, develop branch에서 작업을 시작한다.
git branch
* develop
main
1. Dockerfile, default.conf, certificate.crt, private.key 파일 추가
이전 게시글(링크)에서 https를 적용한 Nginx 실행을 위해 사용한 파일들을 추가한다.
ls
certificate.crt default.conf Dockerfile private.key README.md
2. default.conf 파일 수정
원래는 443 port만 listen 상태였는데, 80 port로 요청이 들어오면 443 port로 redirect하도록 수정한다.
- 수정 전
server {
listen 443 ssl;
ssl on;
ssl_certificate /etc/ssl/certificate.crt;
ssl_certificate_key /etc/ssl/private.key;
server_name test.csapi.kro.kr/;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
- 수정 후
server {
listen 80;
server_name test.csapi.kro.kr;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
ssl on;
ssl_certificate /etc/ssl/certificate.crt;
ssl_certificate_key /etc/ssl/private.key;
server_name test.csapi.kro.kr;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
3. nginx 디렉토리 생성
git의 루트디렉토리에 있으면, 정리가 어려우므로 nginx 전용 디렉토리를 생성하여, 현재까지 작업한 파일들을 이동
.
├── nginx
│ ├── certificate.crt
│ ├── default.conf
│ ├── Dockerfile
│ └── private.key
└── README.md
docker-compose.yml 파일 작성
여러 컨테이너 서비스가 추가될 것을 대비하여, 편리하게 여러 컨테이너를 연결시켜 주는 docker-compose를 사용하기 위해 .yml 파일 작성. build 할 때, docker image 의 이름이 csapi-nginx:test 가 되도록 설정
- docker-compose.yml
version: "3"
services:
nginx:
build: ./nginx
image: csapi-nginx:test
ports:
- "80:80"
- "443:443"
기존의 nginx 종료
port가 중복되는 컨테이너는 실행할 수 없으므로 443 포트로 실행 중이던 컨테이너는 종료한다.
CI 파이프라인 구성
.gitlab-ci.yml 파일을 수정하여 test 파이프라인을 구성한다.
1. yml 파일 작성 후 테스트
- .gitlab-ci.yml
stages:
- build
- test
- deploy
image-build:
stage: build
services:
before_script:
- docker info
script:
- docker-compose build
tags:
- csapi-runner
only:
- develop
test:
stage: test
before_script:
- echo 'Clear containers...'
- docker-compose down -v
script:
- docker-compose up
- echo 'testing....'
after_script:
- docker-compose down -v
tags:
- csapi-runner
only:
- develop
test-server-deploy:
stage: deploy
before_script:
- docker info
script:
- echo 'Test Server Deploying...'
- docker-compose up
tags:
- csapi-runner
only:
- develop
2. 테스트 결과
첫 CI 단게인 image-build 단계에서 에러 발생.
3. 에러 해결을 위한 gitlab runner executor 수정
gitlab-runner 의 executor 가 현재 docker 이므로, 이를 shell로 변경하여 다시 등록 후, 다시 devlop branch CI를 실행. 그리고 gitlab-runner user를 docker group에 추가하여 docker 명령어 사용이 가능하도록 함.
- test 단계 화면
docker-compose up 을 백그라운드로 실행시켰어야 했는데, 포그라운드로 실행시켜 pending 된 상태
4. .gitlab-ci.yml 파일 수정 후, CI 파이프라인 테스트
docker-compose up 을 -d 옵션을 추가하여 수정했다.
- .gitlab-ci.yml
stages:
- build
- test
- deploy
image-build:
stage: build
services:
before_script:
- docker info
script:
- docker-compose build
tags:
- csapi-runner
only:
- develop
test:
stage: test
before_script:
- echo 'Clear containers...'
- docker-compose down -v
script:
- docker-compose up -d
- echo 'testing....'
after_script:
- docker-compose down -v
tags:
- csapi-runner
only:
- develop
test-server-deploy:
stage: deploy
before_script:
- docker info
script:
- echo 'Test Server Deploying...'
- docker-compose up -d
tags:
- csapi-runner
only:
- develop
5. 수정된 CI 파이프라인 수행 결과
build, test, deploy 단계를 모두 통과했다.
6. nginx redirect가 동작하는지 확인
http로 접속하면, https로 자동으로 redirect 하는걸 확인했다. nginx의 default.conf 파일을 수정하고, gitlab 프로젝트에 수정된 내용을 develop branch 에 push 했을 때 자동으로 수정 사항이 적용되어 test server에서 동작하는걸 확인할 수 있다.
후기
아직 django 컨테이너를 추가하지 않았기에 test 단계에서 수행하는 테스트 작업이 없다. 또한, 파이프라인을 구성하다 보니 고려해야할 게 몇 가지 있다.
1. docker-compose up -d 명령어 진행 후, 바로 다음 shell 명령어가 수행되는데 docker-compose 에 묶여있는 컨테이너들이 아직 실행이 안됐을 경우.
health check 방식과 같이 몇 초 간격으로 1분 동안 curl 같이 요청을 보내고 응답을 받을 수 있도록 하면 임시적으로 해결 가능할 것으로 생각됨.
2. docker image 의 버전별로 관리를 어떻게 할 것인가?
현재 nginx의 경우, 무조건 csapi-nginx:test 라는 이름으로 image가 build 되는 상태다. 이를 중간에 docker image registry에 업로드를 해야한다 (롤백 등의 이유로 인해). 이또한 추가할 예정. 물론 AWS의 ECR을 사용할 것 같다.
처음 구성은 어렵지만, 구성해 놓으면 편하다. 편하다는 얘기이지 수정할 필요가 없다는 건 아니다. 조금 더 세밀하게 살펴보자.
- 현재까지 구성
'프로젝트' 카테고리의 다른 글
[CSAPI] 구성 변경 (0) | 2021.10.01 |
---|---|
[CSAPI] nodejs, mongodb 컨테이너 추가 (0) | 2021.09.22 |
[CSAPI] gitlab runner와 project 연동 (0) | 2021.09.19 |
[CSAPI] GitLab Private 프로젝트 설정 (0) | 2021.09.19 |
[CSAPI] Lightsail https 적용 (0) | 2021.09.17 |