개요
이번 part3는 part2 에서 테스트한 스크립트를 활용하여 만든 워크플로우에 대해 소개하는 part 입니다.
워크플로우 테스트
스크립트 수정하며 featrue/CICD-test 브랜치에 push 하기
- 워크플로우에 테스트할 브랜치가 변경 될 때 마다 워크플로우가 실행되게 하였습니다.
- LIME 프로젝트에서는 feature/CICD-test 브랜치 사용
- 이 후 원하는 결과가 나올 때 까지 워크플로우를 수정하고 돌립니다.
- 기타 문법 오류가 많이 나기 때문에 main에 merge하기 전에 테스트를 합니다.
- 개인적으로 30번 워크플로우에서 테스트 하였습니다.
적용한 워크 플로우 설명
전체 워크 플로우 코드는 다음과 같습니다.
CI/CD 전체 이미지
repository - Actions - 워크플로우 경로로 들어가면 보이는 화면 입니다.

화면에 보이는 빨간색 박스 각각이 Job 입니다.

- 각 job은 왼쪽에서 오른쪽 순서로 실행됩니다.
A가 B를 의존하면 B가 완료될 때 까지 job들은 기다립니다.

- 위 화면에서 각 박스는 왼쪽에 있는 박스를 의존합니다.
- 파란 박스는 빨간 박스를 의존합니다.
- 노란 박스는 파란 박스를 의존합니다.
- 보라 박스는 노란 박스를 의존합니다.
아래 이미지를 기준으로 job에 대해 설명하겠습니다.

빨간 박스 설명

- 두개의 Job은 병렬로 실행 됩니다.
- set-variable Job은 역할
- Nginx 설정 파일에 접근하여 상태가 Blue 인지 Green인지 읽어 옵니다.
- Blue 이면 is_blue_env = ‘true’로 설정 됩니다.
- build-docker-image Job 역할
- build-docker-image는 소스코드를 jar 파일로 build 합니다.
- 이 후 빌드된 jar를 도커 이미지로 만들고 docker-hub에 업로드 합니다.
파란 박스 설명

- 파란 박스 안에 있는 Job도 병렬로 처리 됩니다.
- 이전에 빨간 박스에 있는 Job이 완료 되어야 실행 됩니다.
- 각각 Job 이름은 아래와 같습니다.
- run-docker-image-on-server-1, run-docker-image-on-server-2
- run-docker-image-on-server-1, run-docker-image-on-server-2 Job 역할
- 이전 단계에서 docker-hub에 올린 이미지를 pull 합니다.
- pull 한 도커 이미지를 실행 합니다.
- is_blue_env = true 인 경우
- GREEN_PORT로 이미지를 실행 합니다.
- is_blue_env = true 가 아니면
- BLUE_PORT로 이미지를 실행 합니다.
- 5초에 한번씩 총 24번 localhost:${PORT}/actuator 로 신호를 보냅니다.
- 만약 신호를 받는 다면 정상 신호로 체크하고 pass = ‘true’로 설정합니다.
- pass = ‘true’ 가 아니면 2번에서 실행한 컨테이너를 종료 합니다.
노란 박스 설명

- 노란 박스는 환경을 변경 합니다.
- 이전 단계에 있던 Job 2개(run-docker-image-on-server-1, run-docker-image-on-server-2 ) 에서 모두 pass = ‘true’ 이면 (모두 테스트 성공) 이면 환경을 변경 합니다.
- 그렇지 않다면 이 단계와 이후 모든 단계를 무시 합니다.
보라 박스 설명

- stop-exist-container-in-was-1 & stop-exist-container-in-was-2
- 각각의 Job은 (run-docker-image-on-server-1, run-docker-image-on-server-2 ) 에서 얻은 pass가 모두 true (모두 테스트 성공) 이면 기존에 있던 port로 열어둔 이미지를 종료합니다.
- 그렇지 않다면 이 단계는 실행하지 않습니다.
결과 확인
다음 상태를 확인 한 결과 정상 작동 하였습니다.
- Nginx상태가 Blue인 경우 테스트
- GREEN Port로 변경되고 기존에 있던 BLUE Port는 종료 됩니다.