前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过 Jenkins 定期自动给老板提供 Git 仓库的多维度代码分析报告

通过 Jenkins 定期自动给老板提供 Git 仓库的多维度代码分析报告

作者头像
Peter Shen
发布2020-06-12 15:41:57
7450
发布2020-06-12 15:41:57
举报
文章被收录于专栏:持续集成持续集成持续集成

在上一篇里 GitStats - Git 历史统计信息工具,我已经给老板提供了他想看的所有仓库的 Git 提交历史分析报告了,并且把报告都部署到了一台虚拟机的 tomcat 上了,老板可以通过网址访问直接查看每个仓库的分析报告了,看看谁的贡献大,谁活跃,谁偷懒了,谁周末写代码了(这里不鼓励 996)。

最近老板提需求了。

老板:你弄个这个网址的数据咋不更新呢?报告上咋没见你们提交代码呢? 小沈:老板,您看到这些一个个仓库的数据都是我人肉手动生成的,要不您给我点时间,我来做个自动化任务吧。

我这么积极主动,不是我奉承老板,我心里也知道老板如果觉得 Git Stats 这个工具好用,肯定希望看到的分析报告是最新的。既然老板先提了,那我就别磨蹭了,赶紧干吧。

不过用啥实现呢?肯定是 Jenkins 了。一来我已经在 Jenkins 上做了很多的自动化任务了,轻车熟路;二来使用同一套系统不但可以减少繁多的系统入口,降低学习成本,也提高 Jenkins 服务器的利用率。

设身处地的考虑了下老板的使用需求,他肯定不希望自己去 Jenkins 服务器上去运行 Job 来生成这个 Git 仓库的多维度代码分析报告,那么,如果我是老板,我希望:

  1. 这个 Jenkins 任务要定期执行,不需要太频繁,一周更新一次就行;
  2. 另外还要支持对单独仓库的单独执行,一旦老板要立即更新某个仓库的的分析报告。

最后实现的效果如下:

手动执行

老板可以勾选他最关心的代码仓库进行更新

每周末定时执行

老板在周一上班就能看到最新的分析数据了,可以看到这个任务 Started by timer

示例代码供参考

pipeline{
  agent{
    node {
      label 'main-slave'
      customWorkspace "/workspace/gitstats"
    }
  }

  environment {
    USER_CRE = credentials("d1cbab74-823d-41aa-abb7")
    webapproot = "/workspace/apache-tomcat-7.0.99/webapps/gitstats"
  }

  parameters {
    booleanParam(defaultValue: true, name: 'repo1', description: 'uncheck to disable [repo1]')
    booleanParam(defaultValue: true, name: 'repo2', description: 'uncheck to disable [repo2]')
  }

  triggers {
    cron '0 3 * * 7'    # 每周日早上进行定时运行,因此此时机器是空闲的。
  }

  options {
    buildDiscarder(logRotator(numToKeepStr:'10'))
  }

  stages{
    stage("Checkout gitstats"){
      steps{
        # 准备存放 html 报告目录
        sh "mkdir -p html"
        # 下载 gitstats 代码
        sh "rm -rf gitstats && git clone https://github.com/hoxu/gitstats.git"
      }
    }
    stage("Under statistics") {
      parallel {
        stage("reop1") {
          when {
            expression { return params.repo1 }  # 判断是否勾选了
          }
          steps {
            # 下载要进行分析的仓库 repo1
            sh 'git clone -b master https://$USER_CRE_USR:"$USER_CRE_PSW"@git.software.com/scm/repo1.git'
            # 进行仓库 repo1 的历史记录分析
            sh "cd gitstats && ./gitstats ../repo1 ../html/repo1"
          }
          post {
            success {
              # 如果分析成功,则将分析结果放到 apache-tomcat-7.0.99/webapps/gitstats 目录下
              sh 'rm -rf ${webapproot}/repo1 && mv html/repo1 ${webapproot}'
              # 然后删掉 repo1 的代码和 html 报告,以免不及时清理造成磁盘空间的过度占用
              sh "rm -rf repo1"
              sh "rm -rf html/repo1"
            }
          }
        }
      }
      stage("repo2") {
          when {
            expression { return params.repo2 }
          }
          steps {
            sh 'git clone -b master https://$USER_CRE_USR:"$USER_CRE_PSW"@git.software.com/scm/repo2.git'
            sh "cd gitstats && ./gitstats ../repo2 ../html/repo2"
          }
          post {
            success {
              sh 'rm -rf ${webapproot}/repo2 && mv html/repo2 ${webapproot}'
              sh "rm -rf repo2"
              sh "rm -rf html/repo2"
            }
          }
        }
      }
    }
  }
  post{
    always{
      # 总是给执行者分送邮件通知,不论是否成功都会对工作空间进行清理
      script {
        def email = load "vars/email.groovy"
        email.build(currentBuild.result, '')                      
      }
      cleanWs()
    }
  }
}

最后

如果你是测试、DevOps或是从事研发效能方面的工作,那么利用好开源工具,比如 Jenkins 和 Git Stats 就可以快速帮助老板或是你自己提供一个 Git 仓库的多维度代码分析报告,有助于更加了解产品的代码情况。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps攻城狮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 手动执行
  • 每周末定时执行
  • 示例代码供参考
  • 最后
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档