在功能開發完成,要準備部署到下一個環境時,目前都需要『人工記錄』異動了什麼項目,好讓功能在下一個環境發生問題時,可以快速追朔釋出那些功能所造成;為了讓開發人員專注在開發,我這邊用了Power Shell ,做了一個自動化腳本 在產生 Git tag ,並產生Release Note。
透過 git tag 去 trigger Cicd 主動去Build
b-3.0.1 => b-3.0.2
b為beta 環境,3.0為大版號,最後的數字則是小版號。
git log --pretty="%s (%h - %an)" "b-0.0.1..b-0.0.2" | grep -i -E '(bug|feature|support|study|task|design) #[0-9]+ '
P.S.後面可以加篩選條件,去找出相對應的log
git describe --tags --abbrev=0 --match "b-[0-9]*
git config --global core.quotepath false git config --global gui.encoding big5 git config --global i18n.commit.encoding big5 git config --global i18n.logoutputencoding big5
P.S. 也可以透過 chcp 950 指令來測試作業系統,是不是支援 big5 編碼
執行時,顯示上一版的 Beta 版號,並要求輸入此次進 Beta 的版號
執行完成
成果 會將 Git log commit message ,自動附加在Release Note 的最上方
在過程開發過程中,我原先用了 DOS 指令去撰寫,真的寫的有點太痛苦,後來聽同事的建議採用 Power Shell,確實程式碼簡潔的很多,也節省了很多時間及力氣。
git config --global core.quotepath false git config --global gui.encoding big5 git config --global i18n.commit.encoding big5 git config --global i18n.logoutputencoding big5 $OutputEncoding = New-Object -typename System.Text.UTF8Encoding $lastVersion = git describe --tags --abbrev=0 --match "b-[0-9]*" Write-Host "Last Version $lastVersion" $newTag = Read-Host 'Please Enter New Git Tag Name. EX:b-3.0.48 ' # $lastVersion = Read-Host 'Please Enter lastVersion ' # $newTag= "b-3.0.1" # $lastVersion = git describe --tags --abbrev=0 --match "b-[0-9]*" Write-Host "$lastVersion " git tag -f $newTag $fullVersionNo = $newTag.Split("-")[1] $versionCharArray =$fullVersionNo.Split(".") $bigVersion = ($versionCharArray[0],$versionCharArray[1]) -join "." Write-Host $bigVersion [string[]]$lines = git log --pretty="%n|%h|%ai|%s" "$lastVersion..$newTag" $datetimeNow = Get-Date -Format "dddd MM/dd/yyyy HH:mm K" $owner = git config user.name $newReleaseNote = New-Object System.Collections.ArrayList # $newReleaseNote.Add("$lastVersion - $newTag") $newReleaseNote.Add("Date: $datetimeNow") $newReleaseNote.Add("Version: $fullVersionNo") $newReleaseNote.Add("Owner: $owner") $newReleaseNote.Add("") $newReleaseNote.Add("Feature:") foreach ($line in $lines) { $line = $line.Trim() # $newReleaseNote.Add("$line") if ([String]::IsNullOrEmpty($line)) { continue } else { $Matches = $line.Split("|") $hash = $Matches[1] $datetime = $Matches[2] $subject = $Matches[3] $newReleaseNote.Add("$datetime : $subject") Write-Host "$hash / $datetime / $subject" } } $newReleaseNote.Add("") $newReleaseNote.Add("===================================") @($newReleaseNote) + (Get-Content -Encoding utf8 "./ReleaseNote/ChangeLog/$bigVersion.txt") | Set-Content -Encoding utf8 "./ReleaseNote/ChangeLog/$bigVersion.txt" Write-Host "ReleaseNote 產生成功" git config --global gui.encoding utf8 git config --global i18n.commit.encoding utf8 git config --global i18n.logoutputencoding utf8