Network

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

kyunge_ev 2023. 1. 8. 21:00

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