codecamp

Jenkins 记录测试结果和工件

虽然测试是良好的连续交付流程的关键部分,但大多数人不想筛选数千行控制台输出,以查找有关测试失败的信息。为了使这更容易,Jenkins可以记录和汇总测试结果,只要您的测试运行器可以输出测试结果文件。Jenkins通常捆绑在一起junit,但是如果您的测试运行器无法输出JUnit风格的XML报告,则还会有其他插件,可以处理任何广泛使用的测试报告格式。

要收集我们的测试结果和工件,我们将使用该post部分。

Jenkinsfile (Declarative Pipeline)
pipeline {
    agent any
    stages {
        stage('Test') {
            steps {
                sh './gradlew check'
            }
        }
    }
    post {
        always {
            junit 'build/reports/**/*.xml'
        }
    }
}

Toggle Scripted Pipeline (Advanced)

Jenkinsfile (Scripted Pipeline)
node {
    try{
        stage('Test') {
            sh './gradlew check'
        }
    finally {
        junit 'build/reports/**/*.xml'
    }
}

这将永远抓住测试结果,让Jenkins跟踪他们,计算趋势并对其进行报告。测试失败的Pipeline将被标记为“不稳定”,在Web UI中用黄色表示。这与“FAILED”状态不同,用红色表示。

当有测试失败时,从Jenkins抓住建造的文物进行本地分析和调查往往是有用的。Jenkins内置的支持存储“工件”,在Pipeline执行过程中生成的文件,实际上是这样。

这很容易通过archive步骤和文件集合表达式完成,如下面的示例所示:

Jenkinsfile (Declarative Pipeline)
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh './gradlew build'
            }
        }
        stage('Test') {
            steps {
                sh './gradlew check'
            }
        }
    }

    post {
        always {
            archive 'build/libs/**/*.jar'
            junit 'build/reports/**/*.xml'
        }
    }
}

Toggle Scripted Pipeline (Advanced)

Jenkinsfile (Scripted Pipeline)
node {
    try{
        stage('Test') {
            sh './gradlew check'
        }
    finally {
        archiveArtifacts artifacts: 'build/libs/**/*.jar', fingerprint: true
        junit 'build/reports/**/*.xml'
    }
}

记录Jenkins中的测试和工件对于快速轻松地向团队的各个成员发布信息非常有用。在下一节中,我们将讨论如何告诉团队成员什么在我们的Pipeline已经发生的事情。

Jenkins 使用环境变量
Jenkins 清理和通知
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Jenkins 使用

Jenkins使用案例

Pipeline操作

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }