完美軟體版本號設計方案

姜志民 2022/10/16 17:10:27
1577

 

一、說明

筆者在每次測試程式時都無法100%確定測試的程式是最新的版本,或是剛上版最新的程式,過沒多久又被別的同事換成舊版本程式,這樣讓我有時候很困擾我到底是測試那一個版本的程式。

google許多資料有關實作版本號的做法都不是理想,最常看到是人工手動命名版本號、或是IDE工具編譯發佈程式時版本號自動+1

來說說這些做法的缺點,用人工的作法就一定會改錯版本號的時候或是忘記改版本號。至於IDE工具版本號自動+1,只要有發佈就會累積+1就算是發佈舊程式也是+1,這樣無法看出來程式版本是最新的或是舊的。還有另一個缺點就是無法從版本號來得知是否已經有包含修改過的程式。

筆者發現可以拿Git commit ID (SHA-1)來當作軟體版本號,優點是可以用commit ID對照Git Commit History確認有包含那些程式、不是人工手動產生的所以不會出錯。

為了確保不是由人工介入處理會有可能出錯的機會,所以要搭配Jenkins來做CICD

 

二、Git commit ID (SHA-1)說明

下圖的左圈起來的就是Git commit ID (SHA-1)、右圈是tag,會用拿來當版本號。

 

三、git describe指令 + 版本號定義說明

使用git describe指令就可以產生Git commit ID (SHA-1)來當版本號,如下圖。

上圖中的v1.1-2-g6ee8874就是版本號,版本號說明如下:

一、v1.1是自訂定義的tag名稱。

二、2表示自從tag v1.1以來有2次的commit提交。

三、gGit的縮寫

四、6ee8874是最新commit提交的commit ID

 

四、git describe + Jenkins整合Pipeline

pipeline {
    agent any
    
	stages{
	    
        stage('git'){
            steps {
                // Git Pull
                git branch: 'develop', credentialsId: '1446fd94b8fec4a5f8', url: 'http://8.30.10.8/test.git'
            }
        }
        
        stage('version'){
             steps {
                dir("build") {
                    script {
                        //使用git describe指令,產生版本號
                        sh "git describe"
                        
                        //取得版本號之後,可以自行運用,例如
                        //將「版本號」寫入applications檔案、將執行程式檔名換成「版本號」...等方式,就看讀者的應用。
                    }
                }
             }
        }
	}
}

 

五、操作影片

目前部門研發的digiRunner就是採用此設計方式,在版本管理上方便許多。

 

 

姜志民