Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- JSON Web Token
- element.style
- 패스파라미터
- Winston
- 포트번호
- JWT 쓰는 방법
- 게시글 이미지
- 부트캠프
- 메뉴바
- 스테이지어스
- 쿼리스트링
- JWT
- 3계층구조
- JWT 쓰는이유
- .env
- 이미지가 포함된 게시글
- 레포지토리
- 알림생성모듈
- N+1문제
- 토큰
- 네비게이션 한번에
- unnest
- 환경변수
- route 53
- 메뉴바 한번에
- 알림생성
- N+1
- 게시글 이미지 업로드
- secret코드
- getComputedStyle
Archives
- Today
- Total
기주
[CI/CD] 컨테이너 환경에서 CI/CD 구축하기(+code deploy 적용) 본문
컨테이너 환경에서 CI/CD 구축하기(+code deploy 적용)
code deploy 적용 시 장점 / 단점 / 언제 적용하면 좋은지?
[CI/CD] github-actions를 이용한 CI/CD구축-3 (+AWS code deploy)
github-actions를 이용한 CI/CD구축-3 (+AWS code deploy) code deploy를 사용하는이유 (장점)code deploy는 여러대의 ec2 서버에 자동 배포를 쉽게 구축할 수 있다쉽게 무중단 배포를 적용할 수 있다.그외 장점(둘
kiju.pro
적용
1. Github Actions 코드 수정
codedeploy를 적용함으로써 기존 SSH로 EC2에 직접 접속하는 로직이 사라지고, 새롭게 code deploy에 필요한 <appspec.yml, /scripts>를 압축하여 S3에 업로드하고, EC2가 이를 다운받아 배포하도록 하는 로직이 추가되었다
.github/workflows/deploy.yml
name: Deploy To EC2
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Github Repository 파일 불러오기
uses: actions/checkout@v4
- name: Node 설치
uses: actions/setup-node@v4
with:
node-version: "20"
- name: 의존성(라이브러리) 설치
run: npm ci
- name: .env 파일 만들기
run: |
touch .env
echo '${{ secrets.ENV }}' >> .env
- name: 테스트 코드 실행
run: npm run test
- name: AWS Resource에 접근할 수 있게 AWS credentials 설정
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ap-northeast-2
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- name: ECR에 로그인하기
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2
- name: Docker 이미지 생성
run: docker build -t docker-cicd-practice .
- name: Docker 이미지에 Tag 붙이기
run: docker tag docker-cicd-practice ${{ steps.login-ecr.outputs.registry }}/docker-cicd-practice:latest
- name: ECR에 Docker 이미지 Push하기
run: docker push ${{ steps.login-ecr.outputs.registry }}/docker-cicd-practice:latest
#code deploy에 필요한 로직
- name: 압축하기
run: tar -czvf $GITHUB_SHA.tar.gz appspec.yml scripts
- name: S3에 프로젝트 폴더 업로드하기
run: aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.tar.gz s3://docker-cicd-practice/$GITHUB_SHA.tar.gz
- name: Code Deploy를 활용해 EC2에 프로젝트 코드 배포
run: aws deploy create-deployment
--application-name docker-cicd-practice
--deployment-config-name CodeDeployDefault.AllAtOnce
--deployment-group-name Production
--s3-location bucket=docker-cicd-practice,bundleType=tgz,key=$GITHUB_SHA.tar.gz
appspec.yml파일은 로직 유지
appspec.yml
version: 0.0
os: linux
files:
# CodeDeploy가 S3로부터 가져온 파일 중 destination으로 이동시킬 대상을 지정한다.
# / 이라고 지정하면 S3로부터 가져온 전체 파일을 뜻한다.
- source: /
# CodeDeploy가 S3로부터 가져온 파일을 EC2의 어떤 경로에 저장할 지 지정한다.
destination: /home/ubuntu/docker-cicd-practice
permissions:
- object: /
owner: ubuntu
group: ubuntu
hooks:
ApplicationStart:
- location: scripts/start-server.sh
timeout: 60
runas: ubuntu
scripts/start-server.sh
#!/bin/bash
echo "--------------- 서버 배포 시작 -----------------"
docker stop instagram-server || true
docker rm instagram-server || true
docker pull {ECR Repository 주소}/instagram-server:latest
docker run -d --name instagram-server -p 3000:3000 {ECR Repository 주소}/instagram-server:latest
echo "--------------- 서버 배포 끝 ------------------"
'devops > CICD' 카테고리의 다른 글
[CI/CD] 컨테이너 환경에서 CI/CD 구축하기 (0) | 2024.12.13 |
---|---|
[CI/CD] github-actions를 이용한 CI/CD구축-3 (+AWS code deploy) (0) | 2024.12.04 |
[CI/CD] Github-Actions로 CI/CD 구축하기-2 개선 (0) | 2024.12.04 |
[CI/CD] Github-Actions로 CI/CD 구축하기-1 (0) | 2024.12.04 |
[Github-Actions] Github-Actions와 CI/CD 알아보기 (0) | 2024.12.04 |