Трубопроводы Bitbucket и кукловод без головы? - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь запустить куколку без головы для тестирования расширения chrome в конвейерах.

Когда я захожу в Google по этой теме, я вижу довольно много людей, которые могут заставить кукловода без головы работать на конвейерах, нопо какой-то причине я не могу заставить его работать с не-безголовым.

Документы по устранению неполадок Puppeteer говорят, что это возможно для TravisCI, поэтому это должно быть возможно и для конвейеров, нет?

У меня естьперепробовал много разных образов докера, но ни один из них, похоже, не работает.Это мои текущие настройки:

image: node:9

pipelines:
  branches:
    staging:
      - step:
        script:
          - node -v
          - yarn -v
          - yarn install
          - apt update && apt install -yq gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
          - apt-get install -y xvfb
          - export DISPLAY=:99.0
          - Xvfb :99 -ac &
          - yarn start build.staging
          - yarn start test.unit
          - yarn start test.e2e.staging

Когда я пытаюсь это сделать:

export const loadBrowser = async () => {
  browser = await puppeteer.launch({
    headless: false,
    args: [
    `--disable-extensions-except=${absDistPath}`,
    `--load-extension=${absDistPath}`,
    "--user-agent=PuppeteerAgent",
    "--no-sandbox",
    "--disable-setuid-sandbox"
  ]
});

Я получаю ошибку:

TimeoutError: Тайм-аут после 30000мс при попытке подключения к Chrome!Единственная гарантированная версия Chrome - r594312

Кому-нибудь удалось заставить Puppeteer без головы действительно работать на Bitbucket Pipelines?

1 Ответ

0 голосов
/ 26 октября 2018

Люди в кружке создали хороший образ докера, который помогает с безголовым кукловодом.Я использовал это для тестирования как circlCI, так и конвейера битбакета.

Моя тестовая установка:

Очень простой тестовый файл mocha / chai, я не настраивал никаких аргументов кукловода для теста circlCI и битбакетного конвейера.

// index.js
module.exports = {
  async getLocation(page) {
    return page.evaluate(() => window.location.href);
  },
};

// test.js
const { expect, assert } = require('chai');
const puppeteer = require('puppeteer');
const example = require('./index');

describe('Puppeteer', () => {
  before(async function () {
    this.browser = await puppeteer.launch();
    this.page = await this.browser.newPage();
  });

  after(async function () {
    await this.browser.close();
    process.exit(0);
  });

  describe('Startup', () => {
    it('should start', async function () {
      assert.equal('object', typeof this.browser);
    });
  });

  describe('In Browser', () => {
    it('url should be blank', async function () {
      const url = await example.getLocation(this.page);
      expect(url).to.include('about:blank');
    });

    it('url should have example.com', async function () {
      await this.page.goto('http://example.com');
      const url = await example.getLocation(this.page);
      expect(url).to.include('example.com');
    });
  });
});

Файл конвейера:

image: circleci/node:8.12.0-browsers

pipelines:
  default:
    - step:
        caches:
          - node
        script: 
          - yarn install
          - yarn run lint
          - yarn run test

Результат для битбакета и окружностей:

enter image description here

Ресурсы:

  • Изображение для использования circleci/node:8.12.0-browsers, их Dockerfile .
  • Также проверены аналогичные настройки с dockerfile, предоставленными для этого ответа .

Примечания:

  • CirclCI потребовалось меньше времени для извлечения изображений, почти 1-2 секунды в кеше.Всего ~ 13 секунд для полного запуска.
  • Bitbucket потребовалось больше времени для извлечения изображений, первое извлечение заняло 2 минуты, в следующий раз - 10 ~ 30 секунд для кэша.Всего ~ 45 секунд, чтобы выполнить весь прогон.
  • Возможно, это связано с тем, что ресурсы, выделенные для бесплатной версии, которую я использовал для своих тестов.

Режим заголовка

К счастью, Xvfb предоставляется в обоих докер-файлах, о которых я упоминал выше.Вам просто нужно использовать их.Код также должен иметь аргументы песочницы, чтобы это работало.

Добавьте аргументы:

this.browser = await puppeteer.launch({
      headless: false,
      args: [
        '--no-sandbox',
        '--disable-setuid-sandbox',
      ],
})

Замените строку теста следующей,

xvfb-run -a --server-args="-screen 0 1024x768x24" yarn run test

Результат:

...