【问题标题】:jenkins pipeline after run unit test karma script do not stop运行单元测试业力脚本后的詹金斯管道不会停止
【发布时间】:2017-08-31 09:18:34
【问题描述】:

我创建了 un jenkins 管道,它运行带有 nodeJs、karma 和 xvfb 的 docker 容器来运行单元测试。 测试成功通过,但即使在 karma 配置中使用 captureTimeout: 60000 和 singleRun: true 脚本也不会停止

我错了

[33m05 04 2017 16:01:54.227:WARN [karma]: [39mNo captured browser, open http://localhost:9876/
[32m05 04 2017 16:01:54.260:INFO [karma]: [39mKarma v1.3.0 server started at http://localhost:9876/
[32m05 04 2017 16:01:54.262:INFO [launcher]: [39mLaunching browser Chrome with unlimited concurrency
[32m05 04 2017 16:01:54.282:INFO [launcher]: [39mStarting browser Chrome
[32m05 04 2017 16:01:59.120:INFO [Chrome 57.0.2987 (Linux 0.0.0)]: [39mConnected on socket /#0Rk4DaJRdDHKCHNvAAAA with id 66659056
Chrome 57.0.2987 (Linux 0.0.0): Executed 0 of 2 SUCCESS (0 secs / 0 secs)
[1A[2KChrome 57.0.2987 (Linux 0.0.0): Executed 1 of 2 SUCCESS (0 secs / 0.99 secs)
[1A[2KLOG: 'MAIN'
Chrome 57.0.2987 (Linux 0.0.0): Executed 1 of 2 SUCCESS (0 secs / 0.99 secs)
[1A[2KChrome 57.0.2987 (Linux 0.0.0): Executed 2 of 2 SUCCESS (0 secs / 1.269 secs)
[1A[2KChrome 57.0.2987 (Linux 0.0.0): Executed 2 of 2 SUCCESS (1.319 secs / 1.269 secs)

管道:

        def karma = docker.image('trion/ng-cli-karma')
        karma.pull()

        try {

            karma.run(' -u $(id -u) -v ${WORKSPACE}:/app trion/ng-cli-karma ')
            karma.inside {
                sh 'npm install'

                try {
                    sh('ng test')
                }catch(err) {
                    sh 'echo TEST FAILED'
                    step([$class: 'JUnitResultArchiver', testResults: 'report/*.xml', healthScaleFactor: 1.0])
                    throw err
                }
                sh 'echo DO SOMETHING ELSE AFTER TEST'
            }
            sh 'ls -al '
        } catch(err) {
            sh 'echo RUN DOCKER FAILED'
            throw err
        }

因果报应:

module.exports = function (config) {
    config.set({
        mime: { 'text/x-typescript': ['ts','tsx'] },
        basePath: '',
        frameworks: ['jasmine', 'angular-cli'],
        plugins: [
            require('karma-jasmine'),
            require('karma-chrome-launcher'),
            require('karma-remap-istanbul'),
            require('angular-cli/plugins/karma'),
            require('karma-junit-reporter')
        ],
        files: [
            { pattern: './src/test.ts', watched: false }
        ],
        preprocessors: {
            './src/test.ts': ['angular-cli']
        },
        remapIstanbulReporter: {
            reports: {
                html: 'coverage',
                lcovonly: './coverage/coverage.lcov'
            }
        },
        angularCli: {
            config: './angular-cli.json',
            environment: 'dev'
        },
        reporters: config.angularCli && config.angularCli.codeCoverage
            ? ['progress', 'karma-remap-istanbul']
            : ['progress'],
        port: 9876,
        colors: true,
        logLevel: config.LOG_INFO,
        autoWatch: true,
        browsers: ['Chrome'],
        customLaunchers: {
            Chrome_without_sandbox: {
                base: 'Chrome',
                flags: ['--no-sandbox'] // with sandbox it fails under Docker
            }
        },
        junitReporter: {
            outputDir: './report', // results will be saved as $outputDir/$browserName.xml
            outputFile: 'report.xml', // if included, results will be saved as $outputDir/$browserName/$outputFile
            suite: '', // suite will become the package name attribute in xml testsuite element
            useBrowserName: false, // add browser name to report and classes names
            nameFormatter: undefined, // function (browser, result) to customize the name attribute in xml testcase element
            classNameFormatter: undefined, // function (browser, result) to customize the classname attribute in xml testcase element
            properties: {} // key value pair of properties to add to the <properties> section of the report
        },
        reporters: config.angularCli && config.angularCli.codeCoverage
            ? ['progress', 'karma-remap-istanbul', 'junit']
            : ['progress', 'junit'],
        captureTimeout: 60000,
        singleRun: true
    });
};

编辑时间:2017 年 7 月 4 日 没有人可以帮助我,或者我不清楚,我的问题是当我运行我的詹金斯管道'运行单元测试'步骤从未完成(cf screenshot)并且我无法检查我的测试是否通过或不启动下一步。我需要帮助来了解如何在业力测试完成后使用命令行或其他方式停止它。

我尝试使用业力配置(captureTimeout:60000,singleRun:true)但什么也没发生

【问题讨论】:

    标签: docker jenkins karma-jasmine angular-cli jenkins-pipeline


    【解决方案1】:

    我假设 karma 正在观察对开发机器有利但对 CI 构建不利的更改。如果您想避免更改业力配置,可以将--watch false 作为参数传递给ng test。 (虽然你有singleRun: true 我不确定autoWatch: true 是否会有更高的优先级。)

    我建议您使用 docker 容器来执行完整的构建,而不是使用单个 docker-run 命令。 Jenkins 提供了一个很好的抽象来在 docker 容器中运行命令:

    docker.image('trion/ng-cli-karma').inside {
            stage ('load npm dependencies') {
                echo 'Load npm dependencies'
                sh 'npm install'
            }
            stage ('build') {
                echo "building"
                sh 'npm run build'
            }
            stage ('unit test') {
              sh 'ng test --progress false --watch false'
              echo 'generate test report **/dist/test-reports/*.xml'
              junit allowEmptyResults: false, testResults: '**/test-results.xml'
              echo 'end test & coverage'
            }
       ...
    

    【讨论】:

      【解决方案2】:

      我解决了这个问题,之前在我的 Jenkinsfile 中,我使用命令 sh('ng test') 来运行测试,但并不知道后台发生了什么。

      所以我直接使用了业力命令

      sh ('./node_modules/karma/bin/karma start karma.conf.js')
      

      【讨论】:

        猜你喜欢
        • 2020-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多