semantic-release整合Gitlab自動管理release版本

·

1 min read

前言

專案分支越來越多,用source tree, fork工具又很難一眼看出上次發布了那些功能。由於專案已經導入commitlint 工具,剛好網路上很多人用 semantic-release 來發布版本號,因此有空就來嘗試看看。

semantic-release 概述

他能輕易各種 CI 流程整合再一起,支援各種git server 像是: Gitlab, Github, Bitbucket等等。經由 commit 的訊息內容自動產生版本號碼與 git tag 並 push 回 master branch。版本號依循 samvar 規則。 實際發布後結果如下圖:
image.png

安裝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 複製起來,等等會用到。
image.png

完成後,導航至需要使用 semantic-release 的專案,至 setting > CI/CD > Variables 裡面,將剛才再上面設定的 value 貼到這邊來。就能完成設定了! 完成後如下圖
image.png

實測

當程式推上 master branch 之後,就會觸發 CI/CD 流程,設定完成後會發現再流程中多了一個 Release_note 的job再執行。

image.png

成功後,可以到 Repository > Tags 裡面看發布的版本與內容
image.png

最後,提醒大家 semantic-release 預設是使用 Angular 的 commit 格式,附上參考連結:github.com/angular/angular/blob/master/CONT..