使用 docker 图像时缺少已安装的依赖项
Missing installed dependencies when docker image is used
这是我的 Dockerfile
FROM node:10
RUN apt-get -qq update && apt-get -qq -y install bzip2
RUN yarn global add @bluebase/cli && bluebase plugins:add @bluebase/cli-expo && bluebase plugins:add @bluebase/cli-web
RUN bluebase plugins
构建 docker 文件时,它会安装所有依赖项,最后一个命令 RUN bluebase plugins
会输出已安装插件的列表。但是当此图像被推送并用于 github 操作时,bluebase
全局可用但未安装插件。我做错了什么?
Github 工作流程
name: Development CI
on:
push:
# Sequence of patterns matched against refs/heads
branches:
- '*' # Push events on all branchs
- '*/*'
- '!master' # Exclude master
- '!next' # Exclude next
- '!alpha' # Exclude alpha
- '!beta' # Exclude beta
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 #Outputs list of comamnds available with bluebase
- name: Check BlueBase Plugins
run: bluebase plugins #Outputs no plugins installed
我不认为图像有问题,在本地图像上很容易确认,你会看到插件在 Docker 图像中可用。
试试运行
docker build -t plugintest .
#then run the image on local system to verify plugin
docker run -it --rm --entrypoint "/bin/sh" plugintest -c "bluebase plugins"
您的 YML 配置文件似乎有问题。
image: hashimsohail/bluebase-image
name: Deploy Web
runs-on: ubuntu-latest
这一行runs-on: ubuntu-latest
make没有意义,我觉得应该是
runs-on:ashimsohail/bluebase-image
。
这是一个棘手的问题!这是对我有用的解决方案。我将在下面尝试解释原因。
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
而不是 Docker 映像中的 /root
。
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
目录以避免它被挂载破坏。 None 的工作人员。
所以唯一的解决办法似乎是将 $HOME
改回 /root
。这应该 NOT 在工作流程中永久完成,因为 GitHub 操作依赖于 HOME=/github/home
才能正常工作。所以解决办法就是每个命令临时设置一下。
HOME=/root bluebase web:build --help
外卖
从中得出的主要结论是,在 jobs.<container_id>.container
语法中使用时,依赖于指向特定位置的 $HOME
的容器中预构建的任何工具可能无法正常工作。
这是我的 Dockerfile
FROM node:10
RUN apt-get -qq update && apt-get -qq -y install bzip2
RUN yarn global add @bluebase/cli && bluebase plugins:add @bluebase/cli-expo && bluebase plugins:add @bluebase/cli-web
RUN bluebase plugins
构建 docker 文件时,它会安装所有依赖项,最后一个命令 RUN bluebase plugins
会输出已安装插件的列表。但是当此图像被推送并用于 github 操作时,bluebase
全局可用但未安装插件。我做错了什么?
Github 工作流程
name: Development CI
on:
push:
# Sequence of patterns matched against refs/heads
branches:
- '*' # Push events on all branchs
- '*/*'
- '!master' # Exclude master
- '!next' # Exclude next
- '!alpha' # Exclude alpha
- '!beta' # Exclude beta
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 #Outputs list of comamnds available with bluebase
- name: Check BlueBase Plugins
run: bluebase plugins #Outputs no plugins installed
我不认为图像有问题,在本地图像上很容易确认,你会看到插件在 Docker 图像中可用。
试试运行
docker build -t plugintest .
#then run the image on local system to verify plugin
docker run -it --rm --entrypoint "/bin/sh" plugintest -c "bluebase plugins"
您的 YML 配置文件似乎有问题。
image: hashimsohail/bluebase-image
name: Deploy Web
runs-on: ubuntu-latest
这一行runs-on: ubuntu-latest
make没有意义,我觉得应该是
runs-on:ashimsohail/bluebase-image
。
这是一个棘手的问题!这是对我有用的解决方案。我将在下面尝试解释原因。
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
而不是 Docker 映像中的 /root
。
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
目录以避免它被挂载破坏。 None 的工作人员。
所以唯一的解决办法似乎是将 $HOME
改回 /root
。这应该 NOT 在工作流程中永久完成,因为 GitHub 操作依赖于 HOME=/github/home
才能正常工作。所以解决办法就是每个命令临时设置一下。
HOME=/root bluebase web:build --help
外卖
从中得出的主要结论是,在 jobs.<container_id>.container
语法中使用时,依赖于指向特定位置的 $HOME
的容器中预构建的任何工具可能无法正常工作。