使用docker映像时缺少已安装的依赖项

时间:2019-10-23 05:44:33

标签: docker continuous-integration dockerfile continuous-deployment github-actions

这是我的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

2 个答案:

答案 0 :(得分:2)

这是一个棘手的问题!这是对我有用的解决方案。我会在下面解释原因。

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/rootbluebase 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

解决方案

我尝试的一种解决方案是将插件安装在Docker映像中的/github/home而非/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目录,以避免目录被挂载破坏。这些都不起作用。

因此,唯一的解决方案似乎是将$HOME改回/root。这应该在工作流中永久完成,因为GitHub Actions依靠HOME=/github/home才能正常工作。因此解决方案是为每个命令临时设置它。

HOME=/root bluebase web:build --help

外卖

主要的收获是,在$HOME语法中使用的,jobs.<container_id>.container指向特定位置的依赖于容器的任何预先构建的工具都可能无法正常工作。

答案 1 :(得分:1)

我认为映像不存在问题,很容易在本地映像上进行确认,您会看到该插件在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这行没有意义,我认为应该是 runs-on:ashimsohail/bluebase-image