티스토리 뷰

마지막으로 CodeDeploy를 사용하여 s3에 있는 zip 파일을 ec2인스턴스에 이관하고 쉘 스크립트 파일을 생성하고

배포 자동화를 하는 법에 대해서 포스팅을 해보도록하자  ->  이전포스팅

 

1. start.sh 스크립트 파일 추가

프로젝트의 루트 경로에 scrpits 파일을 생성하고 start.sh 쉘 스크립트 파일을 생성하여 아래의 코드를 추가한다

#!/usr/bin/env bash

REPOSITORY=/home/ec2-user/app/deploy
PROJECT_NAME=AZ-Server

echo "> Build 파일 복사"

cp $REPOSITORY/*.jar $REPOSITORY/zip

echo "> 구동중인 애플리케이션 pid가 있다면 죽입니다"
fuser -k -n tcp 8080

echo "> 새 애플리케이션 배포"

JAR_NAME=$(ls -tr $REPOSITORY/zip/*.jar | tail -n 1)

echo "> JAR Name: $JAR_NAME"

echo "> $JAR_NAME 에 실행권한 추가"

chmod +x $JAR_NAME

echo "> $JAR_NAME 실행"

nohup java -jar -Dspring.config.location=/home/ec2-user/app/application-real-db.properties $JAR_NAME > $REPOSITORY/zip/nohup.out 2>&1 &

간단하게 설명을 하자면 8080포트로 구동 중인 프로젝트가 있다면 죽이고 새로 받은 jar 파일을 실행하라는 내용이다

 

 

2. CodeDeploy 설정

AWS에 들어가서 CodeDeploy 페이지로 들어가 애플리케이션과 배포 그룹을 생성하여준다

애플리케이션을 생성할 때 연동해 줄 EC2를 선택하는 것을 잊지말자

 

 

3. 역할 만들기 

EC2에서 CodeDeploy를 사용하기 위해서는 역할이라는 것이 필요하다. S3를 사용할 때 사용자를 생성하였듯 역할이라는 것을 생성하는데 사용자는 AWS 외부의 접근을 허가하기 위함이라면 역할은 EC2와 CodeDeploy 같이 AWS 내에서의 접근을 허가하기 위하여 필요한 것이다.

 

그럼 먼저 EC2에게 필요한 역할을 생성하고 설정을 하여주자

ec2-deploy라는 역할을 생성하고 AmazonEc2RoleforAWSCodeDeploy권한을 부여하였다

그럼 이제 생성한 역할을 EC2 인스턴스에 연결하여주자

 

인스턴스 설정 -> IAM 역할 연결/바꾸기 -> 생성한 권한 선택을 하고 재부팅 하여준다

 

두번째로 CodeDeploy에게도 권한을 추가하여준다

마찬가지로 앞서 역할을 생성했던 방식과 동일한 방식으로 역할을 설정하여준다 CodeDeploy 사용을 위한 권한은 한가지 뿐이므로 선택하면된다 그리고 CodeDeploy 편집에 들어가 생성한 권한을 연결하여준다

 

4. EC2에 CodeDeploy Agent 설치하기

터미널에 접속하여 다음 명령어를 입력하여 CodeDeploy Agent를 설치하여준다

aws s3 cp s3://aws-codedeploy-ap-northeast-2/latest/install . --region ap-northeast-2

chmod +x ./install

sudo ./install auto

sudo service codedeploy-agent status

The AWS CodeDeploy agent is running as PID **** 이러한 메세지가 출력된다면 정상적으로 설치가 완료된 것이다

 

 

5. appspec.yml 파일 생성하기

다시 프로젝트로 가서 루트경로에 appspec.yml 파일을 생성한다 이 파일을 CodeDeploy가 읽어서 zip파일을 ec2에 이관 그리고 start.sh 파일을 실행해준다

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ec2-user/app/deploy

permissions:
  - object: /
    pattern: "**"
    owner: ec2-user
    group: ec2-user

hooks:
  AfterInstall:
    - location: start.sh
      timeout: 60
      runas: ec2-user

destination에 적혀있는 경로에 파일을 이관하고 그 후 start.sh 파일을 실행하라는 내용이다

 

 

6. deploy.yml 파일 수정

추가된 내용을 바탕으로 workflow를 수정한다

  - name: Copy appspec
        run: cp appspec.yml code-deploy-youtugo-application

      - name: Copy shell
        run: cp ./scripts/* code-deploy-youtugo-application

      - name: Make zip file
        run: zip -r -j code-deploy-youtugo-application.zip code-deploy-youtugo-application/*

      - name: Deliver to AWS S3
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        run: |
          aws s3 cp \
          --region ap-northeast-2 \
          --acl private \
          code-deploy-youtugo-application.zip s3://az-deploy/

      - name: Deploy
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        run: |
          aws deploy create-deployment \
          --application-name az-deploy \
          --deployment-group-name az-deploy-group \
          --file-exists-behavior OVERWRITE \
          --s3-location bucket=az-deploy,bundleType=zip,key=code-deploy-youtugo-application.zip \
          --region ap-northeast-2

appspec.yml , start.sh 파일을 포함하여 zip 파일로 만든후 s3에 이관 그리고 codedeploy 애플리케이션의 배포 그룹에 이관하여 배포하는 것 까지 작성하였다

 

여기까지 완료하였다면 코딩후 push를 하면 자동으로 배포가 실행되어 브라우저에 실행되는 것을 확인 할 수 있다!!

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함