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