AWS

[AWS CI/CD] deploy.yml 수정 및 해결

운덩하는 개발자 2022. 12. 6.
반응형

스크립트 추가하기


 마지막으로 프로젝트에서 스크립트를 몇 가지 추가해야한다

 

먼저 프로젝트의 최상단에 appspec.yml을 생성한다.appspec.yml은 CodeDeploy Agent가 참조하면서 배포를 진행하는 명세서같은 느낌이다.

기본적인 appspec.yml을 다음과 같이 작성
다음 단계인 Nginx 적용 단계에서 스크립트를 추가적으로 작성

# appspec.yml

version: 0.0
os: linux
files:
  - source: / #전부
    destination: /home/ec2-user/Board/ #인스턴스에서 파일이 복사되어야 하는 위치 식별
    overwrite: yes #선택 값으로, 동일한 파일이 있을 경우 덮어쓰기 여부

#정의한 파일이 인스턴스에 복사된 후 해당 파일에 권한이 어떻게 적용되어야 하는 지를 지정
permissions:
  - object: / #문자열을 사용하여 대상을 지정합니다. /는 전부
    pattern: "**" #권한을 적용할 패턴을 지정합니다. 특수 문자"**"를 사용하여 지정하면 권한이 type에 따라 일치하는 모든 파일에 적용됩니다.
    owner: ec2-user # object의 소유자 이름, 지정하지 않으면 원본 파일에 적용된 기존의 모든 소유자가 복사 작업 후에도 아무것도 변경되지 않습니다.
    group: ec2-user # object의 그룹 이름, 지정하지 않으면 원본 파일에 적용된 기존의 모든 소유자가 복사 작업 후에도 아무것도 변경되지 않습니다.
  • files.destination
    • S3에서 받아온 프로젝트의 위치를 지정

그리고 Github Actions의 스크립트에도 마지막 단계를 업데이트

# deploy.yml

name: deploy-action

on:
  workflow_dispatch:

env:
  S3_BUCKET_NAME: longstone

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 11

      - name: Grant execute permission for gradlew
        run: chmod +x gradlew
        shell: bash

      - name: Build with Gradle
        run: ./gradlew build
        shell: bash

      - name: Make zip file
        run: zip -r ./$GITHUB_SHA.zip .
        shell: bash

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ secrets.AWS_REGION }}

      - name: Upload to S3
        run: aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.zip s3://$S3_BUCKET_NAME/$PROJECT_NAME/$GITHUB_SHA.zip

      ### 새로 추가한 부분 ###
      - name: Code Deploy
        run: aws deploy create-deployment --application-name GoldenHour_code_deploy --deployment-config-name CodeDeployDefault.AllAtOnce --deployment-group-name develop --s3-location bucket=$S3_BUCKET_NAME,bundleType=zip,key=$PROJECT_NAME/$GITHUB_SHA.zip
  • application-name
    • CodeDeploy 애플리케이션의 이름을 지정
  • deployment-config-name
    • 배포 그룹 설정에서 선택했던 배포 방식을 지정
  • deployment-group-name
    • 배포 그룹의 이름
  • s3-location
    • jar를 S3에서 가지고 오기 위해 차례로 bucket 이름, 파일 타입, 파일 경로를 입력

 

 

계속해서 Gradlew를 찾지 못한다는 에러가 나온다.

정말 많은 서칭을 하였으나 원하는 답변을 얻지 못하였다.

application.properties도 yaml형식으로 바꿔 주었으며

서버 파일 최상단에 appspec.yaml도 추가해주었다. 

팀장에게 예전에 CI를 구현해놓아서 관련해서 물으니 아래로 경로 지정을 했던것이 있는데 한번 해보겠느냐고 하여 해보았더니 해결되었다.

    defaults:
      run:
       working-directory: "./server/Board"

 

 

 

Github Action에서 성공적으로 빌드가 완료되었다고 나온다

 

s3버킷에도 파일이 잘 압축되어 온 것을 확인할 수 있다.

반응형

'AWS' 카테고리의 다른 글

[AWS CI/CD] Appspec.yml  (0) 2022.12.07
[AWS CI/CD]CodeDeploy 실패 오류  (0) 2022.12.07
[AWS CI/CD] deploy.yaml 분석  (0) 2022.12.06
[AWS CI/CD] CodeDeploy 생성 및 설정  (0) 2022.12.06
[AWS CI/CD] S3 생성 및 설정  (0) 2022.12.05

댓글