본문 바로가기
Server

CICD란? crontab 사용하여 자동 배포해보기(CD)

by gyeongee 2023. 1. 8.

CICD란?

애플리케이션 개발 단계를 자동화하여 애플리케이션을 더욱 짧은 주기로 고객에게 제공하는 방법

기본 개념은 지속적인 통합, 지속적인 서비스 제공, 지속적인 배포

새로운 코드 통합으로 인해 개발 및 운영팀에 발생하는 문제를 해결하기 위한 솔루션

CI (Continuous Integration : 지속적인 통합)

- 빌드, 테스트 자동화 과정

- 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되므로 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결 할 수 있음

CD (Continuous Deployment : 지속적인 배포)

- Continuous Delivery : 지속적인 서비스 제공

- 배포 자동화 과정

- 코드 변경이 빌드, 테스트 단계를 성공적으로 통과하면 개발자의 수동 개입 없이 해당 변경 사항이 프로덕션에 자동으로 배포됨 👉 품질 저하 없이 최대한 빨리 사용자에게 새로운 기능을 제공할 수 있음

CI / CD 의 종류

- Jenkins

- GitLab

- etc...


crontab이란?

- 리눅스에서 일정주기, 특정시간 명령을 실행할 때 사용하는 것

crontab 명령어

crontab -e
# crontab 작성
# 처음 작성 시 편집기 선택 화면이 나옴 -> [2] vim 사용하면됨([1]~[4] 편집도구를 선택할 수 있음)

$ crontab -l
# crontab 작업 리스트 보기

$ crontab -r
# crontab 모든 작업 삭제

# 출력결과를 파일에 저장하기 '>'
# 최근 1건만 출력 -> 덮어쓰기됨

# 출력결과를 파일에 저장하기 '>>'
# 모든 기록이 출력됨 -> 이어쓰기

$ docker ps > dps.log

$ docker ps >> dps.log

crontab 작성

$ * * * * * command
# 매분 test.sh 을 수행
$ * * * * * /home/user/test.sh

# 매일 21시 30분에 수행
$ 30 21 * * * /home/user/test.sh

# 매주 일요일 21시 30분에 수행
$ 30 21 * * 7 /home/user/test.sh

# 매월 2일 11시 11분에 수행
$ 11 11 2 * * /home/user/test.sh

- 분(0-59)

- 시(0-23)

- 일(1-31)

- 월(1-12)

- 요일(0-7 : 0 / 7 일요일, 1 월요일 ...)

👉 실행 주기를 정한 다음 수행할 명령어(command)를 입력 

실습)

- 매분마다 hello를 찍는 crontab 작성

1. crontab -e 로 crontab 작성(저장하고 나오기 :wq! )

2.  crontab -l 로 작성한 crontab 보기

3. hello가 매분마다 찍히는지 확인하기 위해 .log 파일을 만들어 출력여부 확인하기

/home/ubuntu 위치에 echo.log 파일 생성하고 해당 파일에 hello를 출력하기(>, 덮어쓰기는 >>)

4. 출력 결과 확인을 위해 파일 내용 보기

# cat [파일경로][파일명]
cat /home/ubuntu/echo.log

그 외 명령어

시스템 시간 변경(sudo 권한 필요)

$ ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

현재 시간 정보 확인

$ date