git

[Github Action] 프론트 AWS S3+네이버 클라우드(ncloud) 연동 배포

rachel_13 2022. 11. 14. 12:00

Github Action 을 이용해서 프론트 레포지토리의 main에 push가 되면, build 후 build된 파일을 통째로 s3 버켓에 올리는 작업이다.

이를 네이버 클라우드에 연동된 S3 버켓에 올리는 작업을 진행한다.

 

네이버클라우드에 연동하는 방법은 아래 글에 자세히 잘 나와있다.

https://deokisys.github.io/%EA%B8%B0%ED%83%80%EA%B0%9C%EB%B0%9C/2021/12/21/github-action%EA%B3%BC-ncloud.html

 

몇 가지 수정한 것만 정리해보자면

  • private 레포지토리여서 github token을 추가
  • aws access key 관련 정보는 github > security > deploy keys에서 설정 후 secret.를 이용해 불러옴

 

배포 중 에러가 발생하였다.

[에러1]

<botocore.awsrequest.AWSRequest object at 0x7f37ea551278>
##[error]Process completed with exit code 255.

 

[해결1]

sudo apt-get install python3-setuptools
python3 -m pip install --user awscli

참고 : https://github.com/aws/aws-cli/issues/5262

위 이슈에 나와있는 것처럼 pip를 이용해서 awscli를 설치하는 스크립트를 action에 추가한다.

      - name: Install Python dependencies
        run: |
          sudo apt-get install python3-setuptools
          python3 -m pip install --user awscli

(작성방법 참고 : https://github.com/ynezz/openwrt-ucentral-schema/actions/runs/732324263/workflow)

 

[에러2]

Run aws s3 --endpoint-url=https://kr.object.ncloudstorage.com cp ./build/ s3://front/ --recursive

The user-provided path ./build/ does not exist.
Error: Process completed with exit code 255.

에러가 바뀌었다..!

build 파일을 찾을 수 없다는 의미. 따라서 pwd, ls -al 를 사용해서 build 파일의 위치를 찾아볼 것이다.

 

[해결2]

npm run build 이후working directory print step 추가.

      - name: Print working directory
        run: pwd
      - name: List All files
        run: ls -al

확인해보니.. vite로 설정한 프로젝트 때문에, ./build 디렉토리에 저장되지 않고 있었다..

[해결3]

build 디렉토리 명 변경 및 artifacts 추가

      - uses: actions/upload-artifact@v3
        with:
          name: artifact
          path: public
      - name: Copy Build Dir
        run: cp -a dist/. public/

(dist를 public에 복사)

 

이랬더니 정상 빌드 및 버켓에 잘 올라간다.

 

[Github Action 전문 보기]

name: Deployment
on:
  push:
    branches:
      - main
jobs:
  deploy:
    runs-on: ubuntu-18.04
    strategy:
      matrix:
        node-version: [16.x]
    steps:
      - uses: actions/checkout@v1
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node-version }}
      - uses: actions/upload-artifact@v3
        with:
          name: artifact
          path: public
      - name: Install Packages
        run: npm install
      - name: Build page
        run: npm run build
      - name: Copy Build Dir
        run: cp -a dist/. public/
      - name: Print working directory
        run: pwd
      - name: List All files
        run: ls -al
      - name: Install Python dependencies
        run: |
          sudo apt-get install python3-setuptools
          python3 -m pip install --user awscli
      - name: Upload to S3
        env:
          AWS_ACCESS_KEY_ID: ${{secrets.AWS_ACCESS_KEY_ID}}
          AWS_SECRET_ACCESS_KEY: ${{secrets.AWS_SECRET_ACCESS_KEY}}
        run: |
          aws s3 --endpoint-url=https://kr.object.ncloudstorage.com cp ./public/ s3://my-frontend/ --recursive
      - name: Deploy to gh-pages
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./public