Skip to main content

Command Palette

Search for a command to run...

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

Published
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 格式,附上參考連結:https://github.com/angular/angular/blob/master/CONTRIBUTING.md#commit

More from this blog

如何於Microsoft Teams建立Gitlab repository行為推播機器人

Microsoft Teams 是近年來在商務上知名的產品。越來越多公司廢棄 Skype 轉而使用Teams。改用 Teams 後發現他提供了很多工具,能幫助工程師在完成專案的過程中更方便的管理專案與工作。今天要來跟大家簡單分享如何將gitlab的專案行為利用Teams提供的第三方工具來建置自動推播機器人。 於 Teams 建立 Gitlab通知團隊 我會特別建一個團隊專門放置gitlab的行為通知,因為當多人在同個repo上開發,大家commit很頻繁的時候如果使用專案用的頻道容易造成洗版。建...

Aug 7, 20211 min read

資深工程師一定要學的三件事

在軟體業打滾一陣子之後,多少都想知道有什麼條件才能稱得上資深工程師。由於去年也終於晉升為資深工程師,回首這些年的經驗,我統整出了三個必學的技能,希望給還在這條路上的你一些幫助。 1. 解決問題有自己的一套思路 當你在產業中打滾了幾年,會發現除了接案公司之外只有少數公司會剛好有新的專案讓你有從0到1建置的機會。絕大多數以產品為主的工作都是優化舊有系統或是在系統上加入新的功能。因此在遇到系統bug的時候,要如何分析問題變得更加重要。因為你可能還沒時間了解整個專案的架構,但已經需要開始修改程式以證明你...

Jun 14, 20211 min read

JoanneWu's Blog

4 posts