인프라/CICD

Github Actions 에서 working-directory 설정하기

minhan2 2022. 8. 26. 13:19
728x90
반응형

githubactions에서 dockerfile build 할떄 주의사항

github actions 에서의 step 작업은 항상 루트 파일로 이동한다.

따라서 각각의 스텝마다
작업을 할 공간으로 이동하거나, working-directory를 지정해주어야 한다.

name: React CICD

on:
  push:
    branches: ["develop"]

jobs:
  working-directory-test:
    runs-on: ubuntu-18.04
    env:
      working-directory: ./packages/app
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: 'Create env file111'
        run: |
          pwd
          ls -al
          cd ./packages/app
          touch .env.production
          echo REACT_APP_LOCAL111=${{ secrets.REACT_APP_LOCAL }} >> .env.production
          cat .env.production

      - name: 'Create env file222'
        run: |
          pwd
          ls -al
          cd ./packages/app
          echo REACT_APP_LOCAL222=${{ secrets.REACT_APP_LOCAL }} >> .env.production
          cat .env.production

      - name: 'Create env file333'
        working-directory: /packages/app
        run: |
          pwd
          ls -al
          echo REACT_APP_LOCAL333=${{ secrets.REACT_APP_LOCAL }} >> .env.production
          cat .env.production

설정을 해석해보자면,
develop 브런치에서 push이벤트가 발생하면,
ubuntu-18.04 환경에서 github actions 가 작동하게 됩니다.
env파일로 미리 working-directory 를 선언해줍니다.
Checkout actions를 사용하여 나의 레포지토리를 가져와 줍니다.

첫번째 step에서
현재 작업 위치를 확인하고 ./packages/app 폴더로 이동합니다.
.env.production 파일을 생성하여 github actions secrets의 변수를 입력해 주고,
작업 위치의 폴더와 파일들을 확인후, .env.productnio을 읽어줍니다.

- name: 'Create env file111'
  run: |
    pwd
    cd ./packages/app
    touch .env.production
    echo REACT_APP_LOCAL111=${{ secrets.REACT_APP_LOCAL }} >> .env.production
    pwd
    ls -al
    cat .env.production

아래가 작업 내용입니다.

/home/runner/work/MY_TEST_REPO/MY_TEST_REPO
/home/runner/work/MY_TEST_REPO/MY_TEST_REPO/packages/app
total 40
drwxr-xr-x 4 runner docker 4096 Aug 26 03:58 .
drwxr-xr-x 4 runner docker 4096 Aug 26 03:58 ..
-rw-r--r-- 1 runner docker   42 Aug 26 03:58 .env.production
-rw-r--r-- 1 runner docker  271 Aug 26 03:58 .gitignore
-rw-r--r-- 1 runner docker 1807 Aug 26 03:58 craco.config.ts
-rw-r--r-- 1 runner docker 2025 Aug 26 03:58 package.json
drwxr-xr-x 2 runner docker 4096 Aug 26 03:58 public
drwxr-xr-x 5 runner docker 4096 Aug 26 03:58 src
-rw-r--r-- 1 runner docker  544 Aug 26 03:58 tsconfig.json
-rw-r--r-- 1 runner docker  249 Aug 26 03:58 tsconfig.paths.json
REACT_APP_LOCAL111=***

두번째도 같은 작업이되, 변수명만 다르게 하여 .env.production에 넣어줍니다.

- name: 'Create env file222'
  run: |
    pwd
    cd ./packages/app
    touch .env.production
    echo REACT_APP_LOCAL222=${{ secrets.REACT_APP_LOCAL }} >> .env.production
    pwd
    ls -al
    cat .env.production
/home/runner/work/MY_TEST_REPO/MY_TEST_REPO
/home/runner/work/MY_TEST_REPO/MY_TEST_REPO/packages/app
total 40
drwxr-xr-x 4 runner docker 4096 Aug 26 03:58 .
drwxr-xr-x 4 runner docker 4096 Aug 26 03:58 ..
-rw-r--r-- 1 runner docker   84 Aug 26 03:58 .env.production
-rw-r--r-- 1 runner docker  271 Aug 26 03:58 .gitignore
-rw-r--r-- 1 runner docker 1807 Aug 26 03:58 craco.config.ts
-rw-r--r-- 1 runner docker 2025 Aug 26 03:58 package.json
drwxr-xr-x 2 runner docker 4096 Aug 26 03:58 public
drwxr-xr-x 5 runner docker 4096 Aug 26 03:58 src
-rw-r--r-- 1 runner docker  544 Aug 26 03:58 tsconfig.json
-rw-r--r-- 1 runner docker  249 Aug 26 03:58 tsconfig.paths.json
REACT_APP_LOCAL111=***
REACT_APP_LOCAL222=***

분명히 첫번째 step에서 cd ./packages/app 으로 폴더를 이동하였음에도 불구하고,
또 다시 이동하여서 작업을 해야 하는것 을 알수있습니다.

깜빡 할수도있고, 생각처럼 작동하지 않아서 이게 왜 이러지 싶을수가 있습니다.
그럴땐 진작에 working-directory를 설정해주면 마음이 편해집니다.

- name: 'Create env file333'
  working-directory: ${{ env.working-directory }}
  run: |
    echo  env.working-directory=${{ env.working-directory }}
    pwd
    ls -al
    echo REACT_APP_LOCAL333=${{ secrets.REACT_APP_LOCAL }} >> .env.production
    cat .env.production
env.working-directory=./packages/app
/home/runner/work/MY_TEST_REPO/MY_TEST_REPO/packages/app
total 40
drwxr-xr-x 4 runner docker 4096 Aug 26 03:58 .
drwxr-xr-x 4 runner docker 4096 Aug 26 03:58 ..
-rw-r--r-- 1 runner docker   84 Aug 26 03:58 .env.production
-rw-r--r-- 1 runner docker  271 Aug 26 03:58 .gitignore
-rw-r--r-- 1 runner docker 1807 Aug 26 03:58 craco.config.ts
-rw-r--r-- 1 runner docker 2025 Aug 26 03:58 package.json
drwxr-xr-x 2 runner docker 4096 Aug 26 03:58 public
drwxr-xr-x 5 runner docker 4096 Aug 26 03:58 src
-rw-r--r-- 1 runner docker  544 Aug 26 03:58 tsconfig.json
-rw-r--r-- 1 runner docker  249 Aug 26 03:58 tsconfig.paths.json
REACT_APP_LOCAL111=***
REACT_APP_LOCAL222=***
REACT_APP_LOCAL333=***

step마다 working-directory를 설정하는것이 불편하다면
default로 전체로 설정해주거나

name: Node.js CI

on:
  push:
    branches: [ frontend-develop ]

defaults:
  run:
    working-directory: ./app

jobs:
  working-directory-test:
    defaults:
      run:
        working-directory: ./app
    steps:
      - uses: actions/checkout@v1

각각의 job에 설정해줄수 있습니다.

name: CI

on: [push]

jobs:
  working-directory-test:
    defaults:
      run:
        working-directory: ./app
    steps:
      - uses: actions/checkout@v1
728x90
반응형