Github Actions로 배포 자동화 등을 진행하다 보면 cli 명령어를 루트 디렉토리가 아닌 하위 디렉토리에서 수행해야 하는 경우가 있습니다. 본 글에서는 레포지토리의 루트가 아닌 하위 폴더에서 패키지를 설치하고 빌드하여 배포하는 과정을 소개합니다.
본 글은 S3 설정에 대해서 다루지는 않습니다 🦔
Github Actions와 S3를 이용한 배포 자동화가 궁금하다면 Github Actions으로 배포 자동화하기 글을 참고하세요!
작업한 레포지토리 구조는 yarn install
과 yarn build
를 프로젝트 루트가 아닌 내부 디렉토리에서 실행해야 하는 형태였습니다.
작성한 전체 코드는 아래와 같습니다.
name: Auto Deployment to S3 bucket
on:
push:
branches: [ master ]
jobs:
deploy:
name: Build, Deploy to S3 Bucket
runs-on: [ubuntu-latest]
env:
working-directory: ./website
strategy:
matrix:
node-version: [12.16.x]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: yarn install
run: yarn install
working-directory: ${{ env.working-directory }}
- name: Build
run: yarn build
working-directory: ${{ env.working-directory }}
- name: Transfer to S3 for serving static
uses: jakejarvis/s3-sync-action@master
with:
args: --acl public-read --follow-symlinks --delete
env:
AWS_S3_BUCKET: !!YOUR_BUCKET!!
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_IAM_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_ACCESS_KEY }}
AWS_REGION: 'us-west-1'
SOURCE_DIR: 'website/build/' + !!YOUR_PROJECT!!
코드의 구조를 간단하게 설명하면 아래와 같습니다.
uses
구문의 경우 디렉토리를 지정할 필요가 없으므로 기존과 같이 작성합니다.AWS_IAM_KEY_ID 등의 설정에 관해서는 Github Actions으로 배포 자동화하기 를 참고하세용 🥁
두 번 보신 것 같다면 기분탓입니다.
working-directory
프로퍼티는 명령을 실행할 때 마다 수행해 주어야 합니다. 터미널처럼 한번 경로를 이동한다고 상태가 남는 것이 아니라 매번 새로 실행하기 때문입니다.
번거로운 경우, 리눅스 명령어 &&
등을 통해서 단축하는 것은 가능합니다.
로그를 살펴보면 따로 바인딩하지 않았음에도 jakejarvis(S3 deploy) 단계에서 env.working-directory가 설정되어 있는 것을 확인할 수 있습니다. 하지만 기대한 것 처럼 동작하지 않습니다. 즉, working-directory가 하위 폴더로 설정 된 경우라 하더라도 맨 마지막 SOURCE_DIR
디렉토리에는 루트로부터의 전체 주소를 작성하여야 합니다.
이외에는 위에 링크한 이전 글의 방식(S3에 IAM으로 배포하기)과 완전히 동일합니다. 디렉토리 설정 이외의 코드들에 대해서는 해당 포스트를 참고하세요!
좋은 글 감사합니다.
참고로 필요한 경우 jobs의 기본경로를 설정하여 경로설정의 중복을 줄일 수 있는 방법이 doc에 안내되어 링크 첨부합니다.
https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions#jobsjob_iddefaultsrun