【问题标题】:How to configure Jenkins Cobertura plugin to monitor specific packages?如何配置 Jenkins Cobertura 插件来监控特定的包?
【发布时间】:2012-05-30 09:24:27
【问题描述】:

我的项目有许多包(“模型”、“控制器”等)。我已经使用 Cobertura 插件设置了 Jenkins 以生成覆盖率报告,这很棒。如果覆盖率低于某个阈值,我想将构建标记为不稳定,但仅限于某些包(例如,“控制器”,而不是“模型”)。但是,我在配置 UI 中没有看到明显的方法来执行此操作 - 看起来阈值是全局的。

有没有办法做到这一点?

【问题讨论】:

    标签: jenkins jenkins-plugins


    【解决方案1】:

    (在这里回答我自己的问题)

    据我所知,这是不可能的 - 经过几天的观察,我什么也没看到。我写了一个简单的脚本来做我想做的事——获取覆盖输出,解析它,如果特定包的覆盖不满足某些阈值,则构建失败。它很脏,可以清理/扩展,但基本思想就在这里。欢迎评论。

    #!/usr/bin/env python
    
    '''
    Jenkins' Cobertura plugin doesn't allow marking a build as successful or
    failed based on coverage of individual packages -- only the project as a
    whole. This script will parse the coverage.xml file and fail if the coverage of
    specified packages doesn't meet the thresholds given
    
    '''
    
    import sys
    
    from lxml import etree
    
    PACKAGES_XPATH = etree.XPath('/coverage/packages/package')
    
    
    def main(argv):
        filename = argv[0]
        package_args = argv[1:] if len(argv) > 1 else []
        # format is package_name:coverage_threshold
        package_coverage = {package: int(coverage) for
            package, coverage in [x.split(':') for x in package_args]}
    
        xml = open(filename, 'r').read()
        root = etree.fromstring(xml)
    
        packages = PACKAGES_XPATH(root)
    
        failed = False
        for package in packages:
            name = package.get('name')
            if name in package_coverage:
                # We care about this one
                print 'Checking package {} -- need {}% coverage'.format(
                    name, package_coverage[name])
                coverage = float(package.get('line-rate', '0.0')) * 100
                if coverage < package_coverage[name]:
                    print ('FAILED - Coverage for package {} is {}% -- '
                           'minimum is {}%'.format(
                            name, coverage, package_coverage[name]))
                    failed = True
                else:
                    print "PASS"
    
        if failed:
            sys.exit(1)
    
    if __name__ == '__main__':
        main(sys.argv[1:])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多