【DevOps】jenkinsfile结合jacoco生成单元测试报告

jenkinsfile结合jacoco生成单元测试报告

一、Jenkinsfile编写

  1. Jacoco 插件配置jacoco部分的配置中,你使用了多个thresholds字段的参数来设定覆盖率的阈值,确保这些阈值配置符合你的实际需求。

  2. HTML 报告路径和文件名:你在publishHTML部分中使用了reportDir: '/',这可能会导致无法找到报告文件,因为reportDir应该指定报告文件的相对目录。

  3. HTML 报告文件reportFiles 应该是测试生成的报告的文件名。如果 index.html 是你的报告文件的确切名称,那么保持不变,否则应根据实际生成的文件名来调整。

Jenkinsfile 示例:

pipeline {
    agent any

    stages {
        stage('Build and Test') {
            steps {
                // 运行单元测试并生成报告
                sh "mvn clean verify -Dmaven.test.failure.ignore=true"
                
                // 生成 Jacoco 报告
                jacoco execPattern: '**/target/*.exec', 
                       classPattern: '**/target/classes', 
                       sourcePattern: '**/src/main/java', 
                       excludes: '**/dto/**,**/dao/**,**/vo/**,**/enum/**,**/constant/**,**/log/**,**/enums/**,**/constants/**',
                       changeBuildStatus: true,
                       thresholds: [
                           lineCoverage: '60', 
                           branchCoverage: '80',
                           methodCoverage: '90',
                           classCoverage: '90'
                       ]
                
                // 发布HTML单元测试报告
                publishHTML([allowMissing: true, 
                             alwaysLinkToLastBuild: true, 
                             includes: '**/*.html,**/*.css', 
                             keepAll: true, 
                             reportDir: 'target/site', // 这是默认的maven-surefire-plugin生成报告的目录
                             reportFiles: 'index.html', 
                             reportName: 'Unit Test Report'])
            }
        }
    }
}

关键点解释:

  1. reportDir: 'target/site': maven-surefire-pluginmaven-failsafe-plugin 通常会在 target/site 目录下生成 HTML 报告。请确认你的 Maven 配置是否将报告生成在这个目录下。

  2. thresholds 设定thresholds 是 Jacoco 插件的一部分,用于设置不同类型的代码覆盖率阈值。如果你只需要最低/最高的覆盖率标准,可以删除其他部分以保持代码简洁。

  3. publishHTML 配置reportFiles 应该指向 HTML 报告的文件名。如果 index.html 不是默认的报告文件名,请根据你的实际情况进行调整。

运行注意事项:

  • 确保你的 Jenkins 环境已经正确安装了 Jacoco 和 HTML Publisher 插件。
  • 在 Jenkins 中查看构建日志,以确保 publishHTML 插件能够正确找到并显示生成的测试报告。

这样修改后,你的单元测试报告应该能够正常显示在 Jenkins 的构建页面中。

二、将 Jenkins 中 publishHTML 生成的 index.html 页面展示到第三方平台页面上

要将 Jenkins 中 publishHTML 生成的 index.html 页面展示到第三方平台页面上,可以通过以下几种方式来实现:

1. 使用 Jenkins 构建后的 URL 直接访问

Jenkins 中的 publishHTML 插件生成的报告通常可以通过 Jenkins 的 Web 界面访问。如果第三方平台允许嵌入外部链接,你可以直接嵌入 Jenkins 中的报告 URL。

步骤:

  1. 确保 Jenkins 是公开可访问的,或者确保第三方平台可以访问 Jenkins 的 URL。
  2. 找到 Jenkins 构建页面中生成的报告的 URL,通常形式类似于:
    http://your-jenkins-server/job/your-job-name/lastBuild/HTML_Report/
    
  3. 在第三方平台中使用 <iframe> 标签嵌入这个 URL:
    <iframe src="http://your-jenkins-server/job/your-job-name/lastBuild/HTML_Report/" width="100%" height="600px"></iframe>
    

2. 将生成的 HTML 报告上传到第三方平台

如果第三方平台支持上传 HTML 文件,你可以将 Jenkins 中生成的 index.html 及其相关资源(如 CSS、JS 文件)下载并上传到第三方平台。

步骤:

  1. 在 Jenkins 中找到生成的 index.html 和相关的资源文件。
  2. 下载这些文件到本地。
  3. 登录第三方平台,将这些文件上传到该平台的文件系统中。
  4. 确保所有资源文件(如 CSS 和 JS)都与 index.html 文件路径保持一致。

3. 自动上传 Jenkins 生成的 HTML 报告到第三方服务器

你可以通过 Jenkins Pipeline 在构建完成后,使用脚本将生成的 HTML 报告自动上传到第三方服务器(如 SFTP、Web 服务器等)。

步骤:

  1. 在 Jenkins Pipeline 中添加一个步骤,通过 scprsync 命令将 HTML 报告文件上传到目标服务器。
    pipeline {
        agent any
        stages {
            stage('Build and Test') {
                steps {
                    // 运行单元测试并生成报告
                    sh "mvn clean verify -Dmaven.test.failure.ignore=true"
                    
                    // 生成 Jacoco 报告
                    jacoco execPattern: '**/target/*.exec', 
                           classPattern: '**/target/classes', 
                           sourcePattern: '**/src/main/java', 
                           excludes: '**/dto/**,**/dao/**,**/vo/**,**/enum/**,**/constant/**,**/log/**,**/enums/**,**/constants/**',
                           changeBuildStatus: true,
                           thresholds: [
                               lineCoverage: '60', 
                               branchCoverage: '80',
                               methodCoverage: '90',
                               classCoverage: '90'
                           ]
                    
                    // 上传生成的HTML报告到第三方服务器
                    sh """
                    scp -r target/site/* user@your-server:/path/to/your/directory/
                    """
                }
            }
        }
    }
    
  2. 在第三方平台配置一个链接或页面来访问上传后的 HTML 报告。

4. 使用 Jenkins 插件发布到第三方平台

一些第三方平台可能有 Jenkins 插件,可以自动将 Jenkins 的构建报告发布到这些平台上。查找并配置相应的 Jenkins 插件以实现自动发布。

总结:

  • 简单嵌入:如果第三方平台允许嵌入外部链接,直接嵌入 Jenkins 生成的 URL 是最简单的方式。
  • 手动上传:如果需要将文件上传到第三方平台,则可以手动下载并上传,或通过脚本自动化。
  • 自动化发布:通过 Jenkins Pipeline 自动上传报告文件到第三方服务器或存储平台。

选择适合你需求的方式来实现报告的展示。

三、使用 scp 命令将 Jenkins 生成的 HTML 报告文件上传到服务器

使用 scp 命令将 Jenkins 生成的 HTML 报告文件上传到服务器后,您需要确保这些文件在服务器上能够通过 Web 服务器进行访问。以下是如何在前台展示这些文件的步骤:

1. 确认 Web 服务器配置

首先,确保您的目标服务器上配置了 Web 服务器(如 Apache、Nginx、或其他 HTTP 服务器)。这些服务器可以将您上传的 HTML 文件作为静态网页展示。

2. 上传报告文件

假设您已经使用 scp 命令将 Jenkins 生成的 HTML 文件上传到了目标服务器的某个目录,例如 /path/to/your/directory/

3. 配置 Web 服务器指向目标目录

配置您的 Web 服务器,使其能够通过 URL 访问到您上传的目录。例如:

对于 Nginx:
  1. 打开 Nginx 配置文件(通常在 /etc/nginx/sites-available/default/etc/nginx/nginx.conf 中)。
  2. 添加一个新的 server 块或在现有块中配置 location 指令:
server {
    listen 80;
    server_name your-domain.com;

    location /report/ {
        alias /path/to/your/directory/;
        index index.html;
    }
}

这会使得您上传的 HTML 文件可以通过 http://your-domain.com/report/ 访问到。

  1. 重新加载 Nginx 配置:
sudo systemctl reload nginx
对于 Apache:
  1. 打开 Apache 配置文件(通常在 /etc/apache2/sites-available/000-default.conf 中)。
  2. 修改或添加 DocumentRootAlias 以指向您上传的目录:
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /path/to/your/directory/

    <Directory /path/to/your/directory/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
  1. 重新启动 Apache:
sudo systemctl restart apache2

4. 访问上传的报告

配置好 Web 服务器后,您可以通过 Web 浏览器访问上传的报告。例如,如果您的域名是 your-domain.com,并且您将报告放在 /path/to/your/directory/,那么可以通过以下 URL 访问:

http://your-domain.com/report/index.html

5. 集成到第三方平台

现在,您可以将这个 URL 集成到您的第三方平台。例如:

  • 嵌入链接:在第三方平台的页面上直接添加一个指向该 URL 的链接。
  • 嵌入 iframe:如果第三方平台支持,您可以使用 <iframe> 标签嵌入报告页面:
    <iframe src="http://your-domain.com/report/index.html" width="100%" height="600px"></iframe>
    

总结

通过 scp 上传报告文件后,确保服务器上有适当的 Web 服务器配置,将这些文件目录暴露为一个 URL 访问路径,然后通过 URL 将其展示在前台。这样,您就可以在第三方平台上通过链接或嵌入的方式展示 Jenkins 生成的报告。

四、在第三方平台页面上正常展示 Jenkins 生成的 HTML 报告,并且支持继续点击链接以浏览其他页面(即保持目录结构和资源链接的完整性)

要在第三方平台页面上正常展示 Jenkins 生成的 HTML 报告,并且支持继续点击链接以浏览其他页面(即保持目录结构和资源链接的完整性),需要确保以下几点:

  1. 完整上传目录结构:必须将 target/site/ 目录下的所有文件和子目录完整地上传到服务器上。这样可以确保 index.html 中的所有资源链接(如 CSS、JS 文件)和其他 HTML 文件都能被正确访问。

  2. Web 服务器配置支持子目录和相对路径:确保您的 Web 服务器配置能够正确处理 target/site/ 目录中的相对路径和子目录结构。这意味着 Web 服务器应该能够递归地提供所有相关文件的访问。

实现步骤:

假设您已经通过 scp 命令将 target/site/ 目录完整地上传到了目标服务器的 /path/to/your/directory/ 目录中。

1. 确保 Web 服务器配置正确

确保 Web 服务器配置能正确处理并提供 /path/to/your/directory/ 下所有文件和子目录的访问。

对于 Nginx:
server {
    listen 80;
    server_name your-domain.com;

    location /report/ {
        alias /path/to/your/directory/;
        index index.html;
        autoindex on;  # 启用目录浏览,如果需要的话
    }
}

alias 指令将 /report/ 路径映射到您上传的目录。autoindex on; 允许您在没有 index.html 文件的子目录中浏览文件列表。

对于 Apache:
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /path/to/your/directory/

    <Directory /path/to/your/directory/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

这确保了 Apache 会递归处理 /path/to/your/directory/ 目录中的所有文件和子目录。

2. 验证 Web 服务器配置

上传文件后,访问:

http://your-domain.com/report/index.html

验证 index.html 是否能够正确加载,并且页面中的所有链接是否都能正常访问。

3. 集成到第三方平台

确认上述 URL 可以正常访问后,您可以将这个 URL 嵌入到第三方平台页面中。例如:

  • 直接嵌入链接
    <a href="http://your-domain.com/report/index.html" target="_blank">查看测试报告</a>
    
  • 使用 iframe
    <iframe src="http://your-domain.com/report/index.html" width="100%" height="600px"></iframe>
    

通过这种方式,您可以在第三方平台页面上嵌入完整的 Jenkins 生成的 HTML 报告,用户可以继续点击报告中的链接以查看相关的子页面和资源。这种方法能确保所有的报告页面和链接在第三方平台上都能正常工作。

五、第三方平台的用户无需登录即可直接访问 Jenkins 生成的 HTML 报告页面

要让第三方平台的用户无需登录即可直接访问 Jenkins 生成的 HTML 报告页面,有几个方法可以实现这一点:

方法 1: 将报告托管在公开访问的服务器上

将生成的 HTML 报告文件上传到一个公开访问的 Web 服务器上,而不需要用户登录。按照我之前提到的步骤,配置好 Web 服务器后,任何人都可以通过 URL 直接访问这些报告。

方法 2: 配置 Jenkins 允许匿名访问

如果你希望直接从 Jenkins 服务器上公开访问报告,可以调整 Jenkins 的安全设置,允许匿名用户访问特定的报告页面。

步骤:
  1. 访问 Jenkins 管理界面

    • 登录到 Jenkins,并进入管理界面(通常是 http://your-jenkins-server/manage)。
  2. 配置安全设置

    • 进入 Manage Jenkins -> Configure Global Security
    • Authorization 部分,选择 Matrix-based securityProject-based Matrix Authorization Strategy
    • Anonymous 用户赋予 Job -> ReadJob -> ViewStatus 的权限。
    • 保存设置。
  3. 确保报告可以匿名访问

    • 如果你的报告是通过 publishHTML 生成的,确保生成的报告目录在 Jenkins 中是公开的。
  4. 访问 URL

    • 现在,用户可以通过类似 http://your-jenkins-server/job/your-job-name/lastBuild/HTML_Report/ 的 URL 访问报告页面,无需登录。

方法 3: 将报告上传到静态网站托管服务

你也可以使用静态网站托管服务(如 GitHub Pages、Netlify、AWS S3 + CloudFront)来托管这些报告。通过这些服务,你可以很容易地将 HTML 报告文件上传,并获得一个公开访问的 URL。

例如,使用 GitHub Pages:
  1. 将 Jenkins 生成的报告文件上传到 GitHub 仓库的 gh-pages 分支。
  2. 访问 https://your-username.github.io/your-repo-name/index.html,即可公开查看报告。

总结

通过上述方法,您可以确保报告页面在第三方平台上无需登录即可直接访问。推荐的做法是将报告上传到一个公开的 Web 服务器或使用静态网站托管服务,这样可以避免直接暴露 Jenkins 的安全设置,并确保用户可以轻松访问报告内容。

六、通过配置 Web 服务器(如 Nginx 或 Apache)托管报告文件

通过配置 Web 服务器(如 Nginx 或 Apache)托管报告文件后,如果配置正确并且没有设置额外的访问控制,那么点击这个 <a href="http://your-domain.com/report/index.html" target="_blank">查看测试报告</a> 链接时,用户可以无需登录账号密码,直接查看报告页面。

关键条件:

  1. Web 服务器配置公开访问:您托管报告文件的 Web 服务器必须配置为允许公开访问。没有设置访问控制或身份验证,这样任何拥有链接的人都可以直接访问页面。

  2. 文件权限正确:服务器上的文件和目录权限设置必须允许 Web 服务器读取并提供这些文件给访问者。

  3. 没有额外的访问控制:确保没有额外的访问控制措施,比如 IP 限制、HTTP 基本认证或其他需要输入用户名和密码的机制。

如何确认:

  • 在配置好 Web 服务器后,打开一个新的浏览器窗口或隐身模式(以确保没有使用缓存或已登录的凭据),直接访问 http://your-domain.com/report/index.html
  • 如果页面正常加载,并且没有提示要求登录,那么说明配置正确,任何用户都可以通过该链接直接访问。

如果需要保护报告页面:

  • 添加基本认证:如果需要保护报告页面不被随意访问,可以在 Web 服务器配置中添加基本身份验证,要求用户在访问时输入用户名和密码。
  • 使用防火墙或 IP 限制:限制只有特定 IP 地址可以访问这些报告。
  • 临时公开:您也可以在需要时临时公开报告页面,并在检查完毕后重新限制访问。

但如果你希望用户无需登录即可查看报告,那么只需确保服务器配置允许公开访问,用户点击链接后即可直接查看报告内容。

七、在第三方页面上 动态加载index.html` 报告内容

要在第三方页面上直接展示 Jenkins 生成的 index.html 报告内容,而不通过点击 URL 的方式,你可以考虑以下几种方法:

1. 使用 JavaScript Fetch API 动态加载内容

你可以使用 JavaScript 的 fetch API 在第三方平台页面上动态加载 index.html 的内容,并将其嵌入到页面中。

示例代码:

假设你已经将 index.html 文件托管在一个公开访问的 Web 服务器上,可以通过以下方式动态加载并嵌入内容:

<div id="report-container"></div>

<script>
  fetch('http://your-domain.com/report/index.html')
    .then(response => response.text())
    .then(data => {
      document.getElementById('report-container').innerHTML = data;
    })
    .catch(error => console.error('Error loading the report:', error));
</script>

这个代码会将 index.html 的内容加载并嵌入到第三方页面上的 #report-container 这个 <div> 容器中,用户无需点击链接就可以直接看到报告内容。

2. 使用 iframe 自动加载内容

你也可以使用 iframe 标签直接将 index.html 嵌入到第三方平台页面中,这种方法会在页面加载时自动显示报告内容。

示例代码:
<iframe src="http://your-domain.com/report/index.html" width="100%" height="600px"></iframe>

3. 服务器端代理请求

如果你有服务器端控制权,可以设置一个服务器端代理来请求 index.html 的内容,并将其嵌入到第三方页面中。

服务器端代理示例(Node.js Express):
const express = require('express');
const axios = require('axios');
const app = express();

app.get('/report', async (req, res) => {
  try {
    const response = await axios.get('http://your-domain.com/report/index.html');
    res.send(response.data);
  } catch (error) {
    res.status(500).send('Error loading the report');
  }
});

app.listen(3000, () => {
  console.log('Server running on http://localhost:3000');
});

在你的第三方平台页面上,可以使用以下方式嵌入内容:

<iframe src="http://your-server.com/report" width="100%" height="600px"></iframe>

4. 直接在页面中嵌入报告内容

如果你能够提前获取到 index.html 的内容,也可以直接将其静态地嵌入到第三方页面中,而不依赖于动态加载或服务器端请求。

总结

  • JavaScript Fetch API 是一种动态加载内容的方法,适合直接从远程服务器获取 HTML 内容并嵌入页面。
  • iframe 是最简单的方法,可以直接在页面中嵌入整个报告。
  • 服务器端代理请求 可以用于更复杂的场景,如需要在服务器端进行内容处理或合并。
  • 直接嵌入静态内容 适用于内容不经常变化的场景。

这些方法都能实现将报告的内容直接嵌入到第三方平台页面中,用户无需点击链接即可查看报告内容。选择具体方法取决于你的项目需求和技术栈。

八、在第三方页面直接生成一个 ZIP 压缩包供用户下载

如果你希望在第三方页面直接生成一个 ZIP 压缩包供用户下载,以下是实现的步骤和方法:

1. 准备压缩包

首先,你需要将 Jenkins 生成的报告文件(例如 target/site/ 目录下的所有文件)打包成一个 ZIP 文件。

生成 ZIP 文件的步骤:
  • 手动打包:在 Jenkins 构建完成后,可以手动或通过 Jenkins 自动打包报告文件。

    zip -r report.zip target/site/
    
  • 自动化打包(Jenkins Pipeline 示例)
    在 Jenkins Pipeline 中,你可以添加一个步骤,在构建完成后自动打包报告文件:

    pipeline {
        agent any
    
        stages {
            stage('Build and Test') {
                steps {
                    sh "mvn clean verify -Dmaven.test.failure.ignore=true"
                    
                    jacoco execPattern: '**/target/*.exec', 
                           classPattern: '**/target/classes', 
                           sourcePattern: '**/src/main/java', 
                           excludes: '**/dto/**,**/dao/**,**/vo/**,**/enum/**,**/constant/**,**/log/**,**/enums/**,**/constants/**',
                           changeBuildStatus: true,
                           thresholds: [
                               lineCoverage: '60', 
                               branchCoverage: '80',
                               methodCoverage: '90',
                               classCoverage: '90'
                           ]
                    
                    // 自动生成压缩包
                    sh "zip -r report.zip target/site/"
                }
            }
        }
        post {
            success {
                archiveArtifacts artifacts: 'report.zip', fingerprint: true
            }
        }
    }
    

    这段代码在构建成功后将报告文件打包成 report.zip 并存档。

2. 将 ZIP 文件上传到第三方服务器

将生成的 ZIP 文件上传到第三方服务器,确保用户可以通过一个公开的 URL 下载。

  • 使用 SCP 上传到第三方服务器

    scp report.zip user@your-server:/path/to/your/directory/
    
  • 通过 Jenkins 自动上传
    如果使用 Jenkins,可以在 Pipeline 中添加上传步骤,自动将 ZIP 文件上传到第三方服务器。

3. 在第三方页面提供下载链接

在第三方平台页面中,提供一个下载链接,用户可以点击链接直接下载 ZIP 文件。

示例代码:
<a href="http://your-domain.com/path/to/report.zip" download>下载测试报告</a>
  • download 属性<a> 标签中的 download 属性会提示浏览器直接下载文件,而不是在新窗口中打开它。

4. 自动触发下载(可选)

如果希望用户打开页面时自动触发下载,可以使用 JavaScript:

<script>
  window.onload = function() {
    window.location.href = 'http://your-domain.com/path/to/report.zip';
  };
</script>

这个脚本会在页面加载完成后自动跳转到 ZIP 文件的下载链接,触发文件下载。

总结

  • 手动或自动生成 ZIP 文件:可以通过手动打包或在 Jenkins 构建中自动生成报告的 ZIP 压缩包。
  • 上传到服务器:将生成的 ZIP 文件上传到第三方服务器,确保用户可以访问。
  • 提供下载链接:在第三方平台页面中添加下载链接,用户点击后可以直接下载 ZIP 文件。
  • 自动触发下载:使用 JavaScript 代码可以实现页面加载时自动触发文件下载。

通过以上方法,用户可以在第三方页面上直接下载 Jenkins 生成的报告压缩包,而无需逐个访问页面。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿寻寻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值