semantic-release整合Gitlab自動管理release版本
前言
專案分支越來越多,用source tree, fork工具又很難一眼看出上次發布了那些功能。由於專案已經導入commitlint 工具,剛好網路上很多人用 semantic-release 來發布版本號,因此有空就來嘗試看看。
semantic-release 概述
他能輕易各種 CI 流程整合再一起,支援各種git server 像是: Gitlab, Github, Bitbucket等等。經由 commit 的訊息內容自動產生版本號碼與 git tag 並 push 回 master branch。版本號依循 samvar 規則。
實際發布後結果如下圖:
安裝semantic-release
安裝之前,可以先參考官方文件 以下提供我安裝的套件與版本號:
"@semantic-release/changelog": "^5.0.1",
"@semantic-release/git": "^9.0.0",
"@semantic-release/gitlab": "6.0.4",
"@semantic-release/gitlab-config": "^8.0.0",
package.json 設定
首先需要再檔案中加上 release
項目並使用以下設定,讓套件再release的過程中觸發
如果不想寫在 package.json ,也可以另外創建 .releaserc
檔案來設定。
"release": {
"branches": [
"master"
],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
[
"@semantic-release/changelog",
{
"changelogFile": "./CHANGELOG.md"
}
],
[
"@semantic-release/git",
{
"assets": [],
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
}
],
[
"@semantic-release/gitlab",
{
"gitlabUrl": "http://tpaoccgitvu01.corpnet.asus:8080",
"assets": []
}
]
],
"extends": "@semantic-release/gitlab-config"
},
於script
中設定套件執行script,這樣在server上才能順利執行
"scripts": {
"semantic-release": "semantic-release"
},
gitlab-ci.yml設定
- stage: job的名稱
- script: 執行的指令
- only: 執行時機(指定branch)
- dependencies: 在哪個事件之後執行
semantic-release:
stage: release_note
script:
- cd frontend
- npm install
- npm run semantic-release
only:
- master
except:
- tags
dependencies:
- prod-deploy
tags:
- win-aocc-powershell-runner
gitlab 設定
在gitlab上,需要對semantic-release進行授權,否則gitlab會認為套件沒有權限在master branch做push tag 這個行為。詳細設定可以參考官方文件
以下以圖來說明設定方法
首先先到 右上方大頭照點選 setting,再進到 access tokens 畫面。如下圖所示
建立一個 name 為GITLAB_TOKEN
,scope 為 api 的 token
先將value 複製起來,等等會用到。
完成後,導航至需要使用 semantic-release 的專案,至 setting > CI/CD > Variables 裡面,將剛才再上面設定的 value 貼到這邊來。就能完成設定了! 完成後如下圖
實測
當程式推上 master branch 之後,就會觸發 CI/CD 流程,設定完成後會發現再流程中多了一個 Release_note 的job再執行。
成功後,可以到 Repository > Tags 裡面看發布的版本與內容
最後,提醒大家 semantic-release 預設是使用 Angular 的 commit 格式,附上參考連結:github.com/angular/angular/blob/master/CONT..