在pipeline中使用 Replace tokens

enter image description here

啥是Replace tokens?
為何要在Pipeline中使用Replace tokens?

Replace tokens是一個DevOps的Pipeline設計中,我相當常被問到的需求。客戶常常會問我:『如何在Pipeline中,把檔案(程式碼)裡面的某些字換掉。
我第一次被這樣問的時候,覺得有點怪,客戶為何要這樣做?

後來發現,原來是因為,同仁把敏感的資料(例如帳號密碼、token、連線字串…etc.)寫在設定檔(其實也不好)或程式碼(萬萬不可)裏面,然後就這樣commit到repo中。

全世界都嘛知道,不應該在repo中存放正式機的連線字串帳密或正式token,所以一般來說,開發人員commit的程式碼中,是不會放正式帳密的。然而,我們的Pipeline採全自動化佈署,需要一口氣自動建置、佈署到正式機,那能不能在Pipeline中,安全地把這些位於程式碼或設定檔中的機密資料換掉,換成正式機的帳密呢?

當然可以。
使用的就是Replace tokens。

舉例來說,底下這個設定檔內容,原本JSON裡面放的是帳號密碼,或是token之類的機密資訊,你可以把它改成這樣:
enter image description here

以 #{…}# 框起來,裡面放變數的名稱。把這樣的設定檔commit/push到正式repo的主要分支。

接著,在Pipeline的build之前,使用Replace tokens這個task:
enter image description here

它可以將特定檔案中,具有#{…}# 框起來的文字,都換成Pipeline中的環境變數。

所以,別忘了你還要設定相對應名稱的環境變數,例如,我們為Pipeline設定底下這樣的變數:
enter image description here

如此一來,上面程式碼中的 #{token}# 就會被換掉:

{
  "token": "#{token}#", //會被換掉
  "tempNote": "#{tempNote}#" //會被換掉
}

在build之前,它就會被換成Pipeline中Variables中的值,然後才進行build的動作。

如此一來,就可以在設計Pipeline的時候,把正式機的帳密等機密資料,塞入build好的artifact中,填入正式環境之中。

這樣可以達到開發人員無需經手正式環境帳密的效果。

總的來說,Replace tokens幾乎是正式一點的production build Pipeline必備的功能。

留言

這個網誌中的熱門文章

在POC或迷你專案中使用 LiteDB

使用Qdrant向量資料庫實作語意相似度比對

專業的價值...

讓 LINE Bot 對談機器人顯示 "Loading..." 動畫

使用 Airtable 在小型需求上取代傳統資料庫