Мне наконец удалось заставить трафарет работать в контейнере, подходящем для Google Cloud Build. Основная проблема заключалась в том, что кукловод, который необходим для теста e2e, не работает как установленный, потому что у него нет установки chrome со всеми необходимыми зависимостями.
Чтобы исправить, вам нужно сделать три вещи:
- Установить Chrome отдельно
- Указать кукловода на установленный Chrome
- Изменить Конфигурация трафарета для запуска тестирования без изолированной программной среды
1 & 2 адресованы следующим Dockerfile:
# Need jessie to install dependencies
FROM node:10-jessie-slim
# Copy files from stencil project
WORKDIR /
COPY package*.json ./
COPY node_modules/ ./node_modules
# Install wget & dependencies needed to install Chrome (next step)
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates curl wget && rm -rf /var/lib/apt/lists/*
# Install Chromium dev & dependencies
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/*
# Point puppeteer to the Chromium just installed
ENV PUPPETEER_EXECUTABLE_PATH '/usr/bin/google-chrome-unstable'
# Set entry point
ENTRYPOINT ["npm"]
Обратите внимание, что этот Dockerfile должен быть помещен в тот же каталог, что и ваш трафарет. project --ie находится в том же месте, что и ваш stencil.config.ts и пакет. json.
Также обратите внимание, что это будет работать, только если вы уже выполнили свои тесты в своей локальной среде. Это гарантирует, что необходимые тестовые зависимости установлены.
3 исправляется путем изменения файла stencil.config.ts, как показано в документации по трафарету , поэтому chrome запускается без песочницы:
export const config: Config = {
namespace: 'Foo',
testing: {
// run chrome with no sandbox to have it work in a container
browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'],
},
outputTargets: [
{ type: 'dist' },
{
type: 'www',
},
],
};