7. CI/CD – GitHub Actions
workflow가 참조 중인 브랜치가
release일 때만 job실행
release 브랜치로 checkout
현재 사용중인 node 버전 출력
Node_modules 디렉코리를 캐싱
yarn.lock의 해시 값이 변경될 때만 새로운 캐시를 재생성
소스코드를 build-api.zip 압축
node_modules는 제외
8. CI/CD – S3 Upload
AWS 자격 증명 설정
GitHub Secrets 환경변수에서 값 추출
aws s3 cp 명령어 실행하여 업로드 수행
${AWS_REGION}으로 ######.zip을
s3://####/… 경로로 복사
9. CI/CD – Code Deploy
#사전에 EC2 서버에 AWS 자격증명 설정 및 aws deploy 설치 필요
aws deploy create-deployment 명령어로 EC2에 배포 수행
--CodeDeploy에 미리 생성된 애플리케이션 정보 기입
“#######” 배포 전략 = 모든 EC2 인스턴스 그룹에 동시 배포
이전에 S3에 업로드 했던 build파일을 복사
각 EC2 인스턴스에 설치된 aws codedeploy가 실행되며,
######.zip 내부 appspec.yml의 설정에 따라 배포 작업 처리
10. CI/CD – 배포, appspec.yml
-배포된 디렉토리 권한지정
-읽기, 쓰기, 실행 권한
os 버전
배포할 파일 지정
-루트 디렉토리의 모든 파일
-배포될 디렉토리
-덮어쓰기
배포과정 중 실행할 작업 정의
배포 이후에 ####.sh수행
11. CI/CD – 배포, 쉘스크립트
####.sh
Blue과 green이라는 docker 컨테이너가 존재하는데,
Blue의 경우 #### -> ####으로, green의 경우 #### -> ####
.env 파일에 CURRENT 환경 변수를 조건에 따라 수정
docker 이미지 빌드
Os에 맞춰 아파치2 프록시 설정
GitHub Actions workflow는 GitHub에서 제공하는 자동화 도구 중 하나로, 코드 저장소에서 발생하는 이벤트에 응답하여 자동 작업을 수행하는 프로세스입니다.GitHub Actions을 사용하면 소프트웨어 개발 및 배포 프로세스를 자동화하고 CI/CD (지속적 통합/지속적 배포) 워크플로우를 설정할 수 있습니다.
이벤트 (Events): Workflow를 시작할 이벤트를 정의합니다. 예를 들어, 코드 푸시, 이슈 생성, 풀 리퀘스트 생성 등이 될 수 있습니다.
작업 (Jobs): Workflow 내에서 실행할 하나 이상의 작업을 정의합니다. 작업은 병렬 또는 순차적으로 실행될 수 있으며, 각 작업은 독립적으로 실행 가능한 단위입니다.
단계 (Steps): 작업은 단계로 구성됩니다. 각 단계는 명령어 또는 스크립트를 실행하거나 Docker 컨테이너 내에서 작업을 수행하는 등의 작업을 나타냅니다.
런너 (Runners): GitHub Actions는 GitHub의 런너에서 실행됩니다. 런너는 GitHub의 인프라에서 호스팅되는 가상 머신 또는 컨테이너 환경입니다.
환경 변수 (Environment Variables): Workflow에 전달되는 환경 변수를 정의하여 빌드 및 배포 과정에서 사용할 수 있습니다.
시크릿 (Secrets): 민감한 정보나 인증 토큰과 같은 보안 정보를 안전하게 저장하고 관리하기 위해 GitHub의 시크릿 스토어를 활용할 수 있습니다.
appspec.yml 파일은 AWS CodeDeploy를 사용하여 애플리케이션을 배포할 때 필요한 설정을 정의하는 파일입니다. 이 파일은 배포 대상 환경에서 어떤 파일을 배포할 것인지, 배포된 파일에 대한 권한 및 규칙을 어떻게 설정할 것인지, 배포 후 어떤 작업을 실행할 것인지 등을 정의합니다.
이러한 작업은 주로 블루/그린 배포와 같이 두 가지 버전의 애플리케이션을 번갈아가면서 사용하는 상황에서 사용됩니다. 컨테이너가 어떤 버전을 사용할지를 .env 파일의 "CURRENT" 환경 변수에 저장하고, 필요한 환경 변수를 설정하여 애플리케이션을 구성하게 됩니다.
source .env:
.env 파일을 source 명령을 사용하여 현재 셸 세션에 로드합니다. 이를 통해 이전에 .env 파일에 설정된 환경 변수들이 현재 셸 세션으로 가져와집니다. 이전에 .env 파일에서 설정한 환경 변수를 사용할 수 있게 됩니다.
이 코드는 sed 명령어를 사용하여 텍스트 파일에서 문자열을 치환하는 작업을 수행하는 부분입니다. 주로 설정 파일 등에서 특정 값을 변경하거나 치환할 때 사용됩니다. 두 개의 sed 명령어가 사용되었으며, 각각의 역할은 다음과 같습니다:
8080 포트로 연결된 컨테이너
8081포트로 다른 다른 버전의 컨테이너 띄우기
nginx.conf 수정후 reload (업스트립 8081 수정)
8080 컨테이너 제거
개념은 정말 간단합니다.
새로 배포할 때마다 새로운 컨테이너들을 띄우고
nginx 연결(upstream)을 새로 띄운 컨테이너 포트로 연결한 뒤
이전 컨테이너는 내립니다.
이러한 작업은 주로 블루/그린 배포와 같이 두 가지 버전의 애플리케이션을 번갈아가면서 사용하는 상황에서 사용됩니다. 컨테이너가 어떤 버전을 사용할지를 .env 파일의 "CURRENT" 환경 변수에 저장하고, 필요한 환경 변수를 설정하여 애플리케이션을 구성하게 됩니다.
source .env:
.env 파일을 source 명령을 사용하여 현재 셸 세션에 로드합니다. 이를 통해 이전에 .env 파일에 설정된 환경 변수들이 현재 셸 세션으로 가져와집니다. 이전에 .env 파일에서 설정한 환경 변수를 사용할 수 있게 됩니다.
이러한 작업은 주로 블루/그린 배포와 같이 두 가지 버전의 애플리케이션을 번갈아가면서 사용하는 상황에서 사용됩니다. 컨테이너가 어떤 버전을 사용할지를 .env 파일의 "CURRENT" 환경 변수에 저장하고, 필요한 환경 변수를 설정하여 애플리케이션을 구성하게 됩니다.
source .env:
.env 파일을 source 명령을 사용하여 현재 셸 세션에 로드합니다. 이를 통해 이전에 .env 파일에 설정된 환경 변수들이 현재 셸 세션으로 가져와집니다. 이전에 .env 파일에서 설정한 환경 변수를 사용할 수 있게 됩니다.