【发布时间】:2020-05-07 02:07:57
【问题描述】:
TL;DR:有人知道如何制作有效的 stencil.js docker 映像来运行 stencil 构建和测试吗?
长格式:
要在 Google Cloud Build 上运行 stencil.js e2e 测试,您需要一个 custom build step 作为 docker 映像。
这是一个示例 Dockerfile:
# THESE STEPS GET STENCIL BUILD WORKING & SHOULD HAVE GOT TESTING WORKING
FROM node:10-jessie-slim
WORKDIR /
RUN npm init stencil app stencil
WORKDIR /stencil
COPY package*.json ./
RUN npm install
WORKDIR /stencil/node_modules/puppeteer
RUN npm install
WORKDIR /stencil
# STEPS ADDED BASED ON https://github.com/puppeteer/puppeteer/blob/master/docs/troubleshooting.md#running-puppeteer-in-docker
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates curl wget && rm -rf /var/lib/apt/lists/*
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
&& sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
&& apt-get update \
&& apt-get install -y google-chrome-unstable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/*
RUN npm i puppeteer \
# Add user so we don't need --no-sandbox.
# same layer as npm install to keep re-chowned files from using up several hundred MBs more space
&& groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser \
&& mkdir -p /stencil/home/pptruser/Downloads \
&& chown -R pptruser:pptruser /stencil/home/pptruser \
&& chown -R pptruser:pptruser /stencil/node_modules
ENTRYPOINT ["npm"]
现在您将其插入到云 build.yaml 文件中:
steps:
#1 Build stencil project
- name: 'gcr.io/$PROJECT_ID/stencil'
args: ['run','build']
#2 Test stencil project
- name: 'gcr.io/$PROJECT_ID/stencil'
args: ['test']
在此构建文件中,第 1 步有效,验证模板安装。但是,步骤 #2 失败并显示错误消息:
[ 错误 ] 未下载 Chromium 修订版。运行“npm install”或“yarn 第 2 步:安装”错误:未下载 Chromium 修订版。运行“npm 步骤#2:在 Launcher.launch 安装”或“yarn install” 第 2 步:(/workspace/node_modules/puppeteer/lib/Launcher.js:120:15)
上面的错误是关于 puppeteer 没有找到 chromium(即使安装了本地版本),我已经在 puppeteer 上运行了 npm install 并验证了本地 chromium 已安装。但是Puppeteer documentation 确实提到在 Docker 中运行 puppeteer 很棘手,并提供了一个解决方案,但他们的解决方案是专门用于 Puppeteer 的 docker 容器。
有谁知道如何使用有效的 puppeteer 设置创建有效的 stencil.js docker 映像?
【问题讨论】:
-
对于 CircleCI,我使用了一个名为
circleci/node:8-browsers的 docker 镜像。也许您需要这样的节点 + 浏览器图像来构建谷歌云? -
感谢您的建议。然而,云构建没有任何地方有这样的 docker 镜像。他们确实列出了一组官方构建步骤 (github.com/GoogleCloudPlatform/cloud-builders) 和社区贡献的步骤 (github.com/GoogleCloudPlatform/cloud-builders-community),但这些步骤都没有浏览器或模板
标签: docker google-cloud-build stenciljs