Как добавить рабочий каталог к ​​развертыванию в действиях GitHub - PullRequest
0 голосов
/ 12 октября 2019

Я недавно перешел к действиям GitHub, поэтому я пытаюсь разместить свой проект реагирования в firebase, когда завершится push. И я использовал действия GitHub для этого процесса CI / CD. И это main.yml, который у меня сейчас есть.

name: Build and Deploy
on:
  push:
    branches:
      - master

jobs:
  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repo
        uses: actions/checkout@master
      - name: Install Dependencies
        working-directory: ./my-app
        run: npm install
      - name: Build
        working-directory: ./my-app
        run: npm run build

  deploy:
    name: Deploy
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repo
        uses: actions/checkout@master      
      - name: Deploy to Firebase
        uses: w9jds/firebase-action@master
        with:
          args: deploy --only hosting
        env:
          FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}

И мне как-то удается настроить рабочий каталог при установке npm и сборке проекта. Но при развертывании я получаю эту ошибку,

enter image description here

Итак, я понял, что эта ошибка возникает из-за проблемы с рабочим каталогом. Итак, моя текущая структура проекта выглядит следующим образом.

. (root of my GitHub repository)
└── my-app
    ├── firebase.json   <-- Git Hub action must point to this sub-dir
└── my-app-mobile
    ├── packages.json

Итак, как мне это сделать в процессе развертывания Firebase? Если я ошибаюсь в проблеме, в чем будет проблема и ответ? Кажется, я не могу использовать working-directory: ./my-app с uses:

1 Ответ

1 голос
/ 12 октября 2019

Я посмотрел документацию для CLI firebase и не нашел способа установить путь к вашему firebase.json через параметр CLI. Однако существует переменная среды, в которой хранится корневой каталог. Это в контексте хуков predeploy и postdeploy, поэтому я не уверен, будет ли CLI это соблюдать.

$ PROJECT_DIR - корневой каталог, содержащий firebase.json

https://firebase.google.com/docs/cli#environment_variables

Используемый вами w9jds/firebase-action является просто оболочкой для CLI. Я не уверен, что это будет работать, но вы можете попробовать установить каталог проекта следующим образом. Причина, по которой переменная установлена ​​на отдельном шаге, заключается в том, что вы не можете вычислять выражения в env разделах. См. этот ответ для более подробной информации. Контейнерные действия, такие как w9jds/firebase-action, будут иметь доступ к переменной, не передавая ее напрямую через env.

      - name: Set project dir environment var
        run: echo ::set-env name=PROJECT_DIR::"$GITHUB_WORKSPACE/my-app"
      - name: Deploy to Firebase
        uses: w9jds/firebase-action@master
        with:
          args: deploy --only hosting
        env:
          FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}

Если это не сработает, альтернативой будет форк w9jds/firebase-action и добавление PROJECT_PATH параметр для сценария entrypoint.sh здесь: https://github.com/w9jds/firebase-action/blob/master/entrypoint.sh

Обновление: Я поднял PR , чтобы добавить параметр PROJECT_PATH к w9jds/firebase-action. Теперь вы можете использовать действие следующим образом.

      - name: Deploy to Firebase
        uses: w9jds/firebase-action@master
        with:
          args: deploy --only hosting
        env:
          FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
          PROJECT_PATH: ./my-app
...