管理套件的版本更新或許是許多開發者眼中最頭痛的問題之一,將版本鎖上 latest
可能會導致不同套件之間的相容問題,但是定期檢查套件的更新又是一件很煩人的事情。Renovate 就是為了解決這個問題而生!
Renovate 是一個可以自動偵測套件更新並發送 Merge Request (Pull Request) 的服務,本文會介紹如何在 GitLab 專案中使用 Renovate,定時發 MR 來更新 npm 套件。
Renovate 所需的 access token 分為兩個:
接下來會分兩部分介紹。
在想要自動更新的目標專案中,進到 Settings > Access Tokens,新增一個包含 api
、read_api
和 write_repository
權限的 token 並取名為 renovate_token,新增後記下此 token。
在隨便一個 GitHub 帳號中,進到 Settings > Developer settings > Personal access tokens > Tokens (classic) 中,新增一個 token,其中包含幾項 read 權限:read:packages
、read:org
、read:project
,新增後一樣要記下此 token。
首先我們需要先建立一個新的 repo 來 host Renovate Bot,並在專案中設定 Renovate 的執行步驟。
在 GitLab 上建立一個新的 repo 並取名 renovate-bot
,在這個 repo 中只需要簡單的 node 環境和安裝好 Renovate 即可
首先我們需要將剛剛生成的兩個 access token 加入到 GitLab 的 CI/CD Variables 中
進到 renovate-bot
專案中的 Settings > CI/CD > Variables,新增兩個變數:
RENOVATE_TOKEN
:剛剛生成的 GitLab Project Access tokenGITHUB_COM_TOKEN
:剛剛生成的 GitHub Personal Access token接著在專案中建立 .gitlab-ci.yml
檔案,並運用以上兩個 CI/CD Variables 來設定 Renovate 的執行步驟
如果專案中沒有 check-dependencies
的 script,記得先將該 script 加入 package.json
中!
接下來就是最客製化的一步了!Renovate 官方提供很多設定選項,可以依照專案的需求來設定,只要在專案下的 config.js
中加入想要的設定即可。
在以下的 config.js
中,我設定了在 your-target-repo
中禁止更新 major 版本,並且開啟了 GitLab 的自動合併功能。
要直接使用這個範例的設定,只要修改 endpoint
和 repositories
的值就可以了。
在這邊可以只做基本的設定,這個設定會套用到所有被指定的 repo 中,如果想要針對不同的 repo 做不同的設定,待會在個別 repo 中我們也可以再做單獨的設定。
在這個步驟的最後,我們回到 GitLab 設定定期執行的 pipeline,進到 renovate-bot
專案中的 Build > Pipeline Schedules,新增一個 schedule。
以我下圖的設定為例,我使用 cron expression 設定每週一、三的早上 10 點執行任務,renovate-bot
這個專案會在指定時間開始執行 .gitlab-ci.yml
中的 job。
等到第一次 pipeline 執行,Renovate 會在目標專案中發第一個 onboarding MR,這就代表有成功串通 Renovate 的機制了,但是還需要在目標專案做一些設定才行。
我們將這個分支 pull 下來看看,會看到 renovate_token
生了一個 commit 出來,裡面新增了 renovate.json
這個檔案,我們可以直接在這個分支中修改它。
像我就修改成了以下的設定,限制 Renovate 每小時只發 3 個 MR,並且指定了 assignee 等等。如果這時候不修改檔案,就會直接套用剛剛在 renovate-bot
中設定的 config.js
。
將新的設定 push 上 GitLab 並 merge 這個 onboarding MR,就算完成 Renovate 在這個專案的設定啦!之後每到設定好執行的時間點,就可以看到自動發出的 MR 躺在你的 MR 列表中!
Renovate 不只支援 npm 套件的更新,在官方文件中還有寫到其他語言的支援,像是 Python、Ruby、Golang 等等。
除此之外,Renovate 對於自動更新套件的機制也有很多設定可以選擇,趕快導入 Renovate,減輕對於套件更新的煩惱吧!