Это была сложная проблема! Вот решение, которое сработало для меня. Я постараюсь объяснить, почему ниже.
jobs:
web-deploy:
container:
image: hashimsohail/bluebase-image
name: Deploy Web
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Check BlueBase
run: bluebase
- name: Check BlueBase Plugins
run: HOME=/root bluebase plugins
- name: Check web plugin
run: HOME=/root bluebase web:build --help
Фон
Во-первых, изображение Docker. Команда bluebase plugins:add
кажется очень зависимой от переменной окружения $HOME
. Ваш образ Docker создан как пользователь root
, поэтому $HOME
равен /root
. Команда bluebase plugins:add
устанавливает зависимости плагинов на $HOME/.cache/@bluebase
, поэтому они заканчиваются на /root/.cache/@bluebase
.
Теперь функция jobs.<id>.container
. Когда ваш контейнер запущен, происходит довольно сложная Docker-сеть и монтирование томов. Один из тех монтировок -v "/home/runner/work/_temp/_github_home":"/github/home"
. Это монтирует локальные файлы с хоста, включая копию вашего извлеченного репозитория, в контейнер. Затем он меняет $HOME
, указывая на /github/home
.
Проблема
Причина, по которой bluebase plugins
не работает, заключается в том, что она зависит от указания $HOME
на /root
, но теперь GitHub Actions изменил его на /github/home
.
Решения
Решением, которое я пытался, было установить плагины на /github/home
вместо/root
в образе Docker.
FROM node:10
RUN apt-get -qq update && apt-get -qq -y install bzip2
RUN mkdir -p /github/home
ENV HOME /github/home
RUN yarn global add @bluebase/cli && bluebase plugins:add @bluebase/cli-expo && bluebase plugins:add @bluebase/cli-web
RUN bluebase plugins
Проблема заключается в том, что монтирование тома, создаваемое GitHub Actions, перезаписывает каталог /github/home
. Затем я попробовал несколько трюков, таких как символические ссылки или перемещение каталога .cache/@bluebase
, чтобы избежать его заделывания при монтировании. Ничего из этого не сработало.
Так что, похоже, единственным решением было изменение $HOME
обратно на /root
. Это НЕ должно выполняться постоянно в рабочем процессе, потому что действия GitHub зависят от HOME=/github/home
для правильной работы. Таким образом, решение состоит в том, чтобы установить его временно для каждой команды.
HOME=/root bluebase web:build --help
Еда на вынос
Основной вывод из этого заключается в том, что любой инструмент, предварительно встроенный в контейнер, которыйполагается на $HOME
, указывающая на определенное местоположение, может работать неправильно при использовании в синтаксисе jobs.<container_id>.container
.