在pipeline中使用 Replace tokens
啥是Replace tokens?
為何要在Pipeline中使用Replace tokens?
Replace tokens是一個DevOps的Pipeline設計中,我相當常被問到的需求。客戶常常會問我:『如何在Pipeline中,把檔案(程式碼)裡面的某些字換掉。』
我第一次被這樣問的時候,覺得有點怪,客戶為何要這樣做?
後來發現,原來是因為,同仁把敏感的資料(例如帳號密碼、token、連線字串…etc.)寫在設定檔(其實也不好)或程式碼(萬萬不可)裏面,然後就這樣commit到repo中。
全世界都嘛知道,不應該在repo中存放正式機的連線字串帳密或正式token,所以一般來說,開發人員commit的程式碼中,是不會放正式帳密的。然而,我們的Pipeline採全自動化佈署,需要一口氣自動建置、佈署到正式機,那能不能在Pipeline中,安全地把這些位於程式碼或設定檔中的機密資料換掉,換成正式機的帳密呢?
當然可以。
使用的就是Replace tokens。
舉例來說,底下這個設定檔內容,原本JSON裡面放的是帳號密碼,或是token之類的機密資訊,你可以把它改成這樣:
以 #{…}# 框起來,裡面放變數的名稱。把這樣的設定檔commit/push到正式repo的主要分支。
接著,在Pipeline的build之前,使用Replace tokens這個task:
它可以將特定檔案中,具有#{…}# 框起來的文字,都換成Pipeline中的環境變數。
所以,別忘了你還要設定相對應名稱的環境變數,例如,我們為Pipeline設定底下這樣的變數:
如此一來,上面程式碼中的 #{token}# 就會被換掉:
{
"token": "#{token}#", //會被換掉
"tempNote": "#{tempNote}#" //會被換掉
}
在build之前,它就會被換成Pipeline中Variables中的值,然後才進行build的動作。
如此一來,就可以在設計Pipeline的時候,把正式機的帳密等機密資料,塞入build好的artifact中,填入正式環境之中。
這樣可以達到開發人員無需經手正式環境帳密的效果。
總的來說,Replace tokens幾乎是正式一點的production build Pipeline必備的功能。
留言