通過 Jenkins 定期自動給老闆提供 Git 倉庫的多維度代碼分析報告

上一篇( ),我已經給老闆提供了他想看的所有倉庫的 Git 提交歷史分析報告了,並且把報告都部署到了一臺虛擬機的 tomcat 上了,老闆可以通過網址訪問直接查看每個倉庫的分析報告了,看看誰的貢獻大,誰活躍,誰偷懶了,誰週末寫代碼了(這裡不鼓勵 996)。

最近老闆提需求了。

老闆:你弄個這個網址的數據咋不更新呢?報告上咋沒見你們提交代碼呢?

小開:老闆兒,您看到這些一個個倉庫的數據都是小開我人肉手動生成的,要不您給我點時間,我來做個自動化任務吧。

我這麼積極主動,不是我奉承老闆,我心裡也知道老闆如果覺得 Git Stats 這個工具好用,肯定希望看到的分析報告是最新的。既然老闆先提了,那我就別磨蹭了,趕緊幹吧。

不過用啥實現呢?肯定是 Jenkins 了。一來我已經在 Jenkins 上做了很多的自動化任務了,輕車熟路;二來使用同一套系統不但可以減少繁多的系統入口,降低學習成本,也提高 Jenkins 服務器的利用率。

設身處地的考慮了下老闆的使用需求,他肯定不希望自己去 Jenkins 服務器上去運行 Job 來生成這個Git 倉庫的多維度代碼分析報告,那麼,如果我是老闆,我希望:

  1. 這個 Jenkins 任務要定期執行,不需要太頻繁,一週更新一次就行;
  2. 另外還要支持對單獨倉庫的單獨執行,一旦老闆要立即馬上查看某個倉庫的的分析報告呢。

最後實現的效果如下:

手動執行

老闆可以勾選他最關心的代碼倉庫進行更新

通過 Jenkins 定期自動給老闆提供 Git 倉庫的多維度代碼分析報告

手動執行,支持勾選

每週末定時執行

老闆在週一上班就能看到最新的分析數據了,可以看到這個任務 Started by timer

通過 Jenkins 定期自動給老闆提供 Git 倉庫的多維度代碼分析報告

自動執行效果圖

Talk is cheap, show you the code.

以下是 Jenkinsfile 的代碼,供你參考。

<code>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{
// 總給是執行者分送郵件通知,不論是否成功都會對工作空間進行清理

/> def email = load "vars/email.groovy"
email.build(currentBuild.result, '')
}
cleanWs()
}
}
}/<code>

最後

如果你是測試、DevOps或是從事研發效能方面的工作,那麼利用好開源工具,比如 Jenkins 和 Git Stats 就可以快速幫助老闆或是你自己提供一個 Git 倉庫的多維度代碼分析報告,有助於更加了解產品的代碼情況。


分享到:


相關文章: