web-dev-qa-db-fra.com

"ChromeHeadless n'a pas capturé en 60000 ms, tuant." se produisant uniquement dans le pipeline CI / CD hébergé par Gitlab

Lors de l'exécution d'un pipeline CI/CD sur Gitlab, mes tests Karma expirent avec l'erreur:

ℹ 「wdm」: Compiled successfully.
05 08 2019 22:25:31.483:INFO [karma-server]: Karma v4.2.0 server started at http://0.0.0.0:9222/
05 08 2019 22:25:31.485:INFO [launcher]: Launching browsers ChromeHeadlessNoSandbox with concurrency 1
05 08 2019 22:25:31.488:INFO [launcher]: Starting browser ChromeHeadless
05 08 2019 22:26:31.506:WARN [launcher]: ChromeHeadless have not captured in 60000 ms, killing.
05 08 2019 22:26:31.529:INFO [launcher]: Trying to start ChromeHeadless again (1/2).
05 08 2019 22:27:31.580:WARN [launcher]: ChromeHeadless have not captured in 60000 ms, killing.
05 08 2019 22:27:31.600:INFO [launcher]: Trying to start ChromeHeadless again (2/2).
05 08 2019 22:28:31.659:WARN [launcher]: ChromeHeadless have not captured in 60000 ms, killing.
05 08 2019 22:28:31.689:ERROR [launcher]: ChromeHeadless failed 2 times (timeout). Giving up.



npm ERR! Test failed.  See above for more details.

Ce problème ne se produit pas lors de l'exécution de tests localement, et il ne se produit pas lors de l'exécution de tests à l'aide de l'image Docker même avec Gitlab Runner localement.

J'ai l'impression d'avoir essayé toutes les configurations possibles avec karma.conf.js. J'ai cherché sur Google ce problème sans relâche et j'ai essayé toutes les suggestions des serveurs proxy, des variables d'environnement, des drapeaux ... mais hélas, pas de chance. J'ai essayé plusieurs images Docker car cela échouait initialement sur Gitlab Runner local mais j'ai trouvé que l'image Docker Selenium/standalone-chrome:latest fonctionne bien dans Gitlab Runner local.

Voici mon karma.conf.js fichier:

const process = require('process');
process.env.CHROME_BIN = require('puppeteer').executablePath();

module.exports = function(config) {
  config.set({

    // base path that will be used to resolve all patterns (eg. files, exclude)
    basePath: '',

    // frameworks to use
    frameworks: [ 'jasmine' ],

    // list of files / patterns to load in the browser
    files: [
      'src/**/*.spec.js'
    ],

    // list of files / patterns to exclude
    exclude: [],

    // preprocess matching files before serving them to the browser
    preprocessors: {
      'src/**/*.spec.js': [ 'webpack' ]
    },

    webpack: {
      // webpack configuration
      mode: 'development',
      module: {
        rules: [
          {
            test: /\.js$/,
            loader: 'babel-loader',
            exclude: /node_modules/,
            query: {
              presets: ['env']
            }
          }
        ]
      },
      stats: {
        colors: true
      }
    },


    // test results reporter to use
    reporters: [ 'spec' ],

    // web server port
    port: 9222,

    // enable / disable colors in the output (reporters and logs)
    colors: true,

    // level of logging
    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
    logLevel: config.LOG_INFO,

    // enable / disable watching file and executing tests whenever any file changes
    autoWatch: true,

    // plugins for karma
    plugins: [
      'karma-chrome-launcher',
      'karma-webpack',
      'karma-jasmine',
      'karma-spec-reporter'
    ],

    // start these browsers
    browsers: ['ChromeHeadlessNoSandbox'],
    customLaunchers: {
      ChromeHeadlessNoSandbox: {
        base: 'ChromeHeadless',
        flags: [
          '--headless',
          '--no-sandbox',
          '--disable-gpu'
        ]
      }
    },
    captureTimeout: 60000,
    browserDisconnectTolerance: 5,
    browserDisconnectTimeout : 30000,
    browserNoActivityTimeout : 30000,

    // Continuous Integration mode
    // if true, Karma captures browsers, runs the tests and exits
    singleRun: true,

    // Concurrency level
    // how many browser should be started simultaneous
    concurrency: 1
  })
}

Et voici mon fichier .gitlab-ci.yml:

.prereq_scripts: &prereq_scripts |
  Sudo apt -y update && Sudo curl -sL https://deb.nodesource.com/setup_10.x | Sudo bash && Sudo apt -y install nodejs

image: 'Selenium/standalone-chrome:latest'

stages:
- test

test:
  stage: test
  script:
  - *prereq_scripts
  - npm install
  - npm test

Je m'attends à ce que les tests s'exécutent avec succès dans les trois instances (npm local, Gitlab Runner local et pipeline Gitlab CI/CD distant). Actuellement, il ne fonctionne qu'avec succès dans les deux premiers.

4
nevardreik

essayez l'image docker avec chromeheadless

par exemple, utilisez l'image docker de angular/ngcontainer. Cela a toutes les configurations, y compris chromeheadless pour tester les applications d'interface utilisateur.

  image: 'angular/ngcontainer:latest'

https://hub.docker.com/r/angular/ngcontainer

0
Anulal S