Git Action으로 CI/CD 구성하기
Git Action으로 CI/CD 구성하기
May 20, 2023

code depoly 설치하기EC2 IAM 설정EC2에 권한 부여 하기code deploy 설정IAM 사용자 추가Access Key Secret Key생성된 유저에 정책 연결Github 설정github에서 s3로 올리기S3 생성EC2 등록.github/workflows/deploy.ymls3에서 리액트 애플리케이션 웹서버로 배포하기appspec.ymldeploy.sh트러블 슈팅 Missing credentials - please check if this instance was started with an IAM instance profile
code depoly 설치하기
- code depoly 다운받기
sudo apt update
sudo apt install ruby-full
sudo apt install wget
wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
chmod +x ./install
- Ubuntu 20.04에서 최신 버전의 CodeDeploy 에이전트를 설치하려면 다음을 수행합니다.
sudo ./install auto > /tmp/logfile

EC2 IAM 설정






EC2에 권한 부여 하기


CodeDeploy가 S3에서 파일을 받아서 EC2에 올려야 하기 때문에 해당 작업을 위한 권한 설정이 필요하다.





code deploy 설정









IAM 사용자 추가
- S3에 푸시할수 있는 권한을 가진 사용자를 생성한다.





Access Key Secret Key





생성된 유저에 정책 연결
s3FullAccess
권한과CodeDeployFullAccess
권한이 필요하다.
- 없을 시 권한 추가 -
직접 정책 연결
- 찾아서 추가

Github 설정


- 세개 전부 환경변수로 설정 완료
- AWS_ACCESS_KEY:
access-key
- AWS_SECRET_ACCESS_KEY:
secret-key
- AWS_REGION:
ap-northeast-2

github에서 s3로 올리기
S3 생성
EC2 등록
sudo apt update sudo apt install awscli
aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: ap-northeast-2 Default output format [None]:
- 깃헙의 업데이트 내용을 s3로 올리는 명령어 작성
- s3에 올린 내용을 CodeDeploy를 통해 EC2로 업로드 하는 명령어 작성
.github/workflows/deploy.yml
name: Deploy # Workflow 이름
on: # Event 감지
push:
branches:
- main # 해당 브랜치의 푸쉬가 일어날 때 CI/CD를 진행하겠다는 뜻
env:
S3_BUCKET_NAME: s3-cuping-fe # S3 버킷 이름
CODE_DEPLOY_APPLICATION_NAME: cuping-cicd-fe # codedeploy에서 만든 어플리케이션 이름
CODE_DEPLOY_DEPLOYMENT_GROUP_NAME: dg-cuping-fe # codedeploy 만든 배포 그룹 세부 정보
jobs:
build:
runs-on: ubuntu-22.04
steps:
- name: Checkout source code.
uses: actions/checkout@v2
- name: Check Node v # 노드 버전 확인
run: node -v
- name: Install Dependencies
run: yarn
- name: Build # 빌드
run: yarn build
env:
CI: ""
- name: zip create
# zip 파일을 만듭니다(파일명은 자유, 대신 아래 workflow에 적을 파일명과 동일하게 맞춰주세요).
run: zip -qq -r ./dist.zip .
shell: bash
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- name: Upload to S3 # Upload build file to S3
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
run: |
aws s3 cp --region ap-northeast-2 ./dist.zip s3://${{env.S3_BUCKET_NAME}}/dist.zip
- name: Deploy # Deploy to EC2
run: aws deploy create-deployment
--deployment-config-name CodeDeployDefault.AllAtOnce
--application-name ${{env.CODE_DEPLOY_APPLICATION_NAME}}
--deployment-group-name ${{env.CODE_DEPLOY_DEPLOYMENT_GROUP_NAME}}
--s3-location bucket=${{env.S3_BUCKET_NAME}},key=dist.zip,bundleType=zip
빌드 된것을 확인

s3에서 리액트 애플리케이션 웹서버로 배포하기
appspec.yml
version: 0.0
os: linux
files:
- source: /
destination: /home/ubuntu/gitaction-react # 리액트 디렉터리
overwrite: yes
permissions:
- object: /home/ubuntu/gitaction-react # 리액트 디렉터리
owner: ubuntu
group: ubuntu
mode: 755
hooks:
AfterInstall:
- location: deploy.sh
timeout: 60
runas: root
deploy.sh
#!/usr/bin/env bash
echo "> FE 배포"
트러블 슈팅
트러블 슈팅은 해당 명령어로 할수 있다. codedeploy 로그를 볼수 있으므로 상황에 맞게 트러블 슈팅을 하자
tail -f /var/log/aws/codedeploy-agent/codedeploy-agent.log
Missing credentials - please check if this instance was started with an IAM instance profile
해당 에러는 IAM 인증되기 전에 code deploy agent가 실행되어서 그렇다. 다시 code deploy agent를 실행 시켜주면 된다.
sudo service codedeploy-agent restart
Share article