
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