資料庫密碼失敗Bug事件
今天的事件
發生在CI/CD替換config時
所發生的詭異錯誤
以為對Gitlab和CI/CD架輕就熟的我
在這邊翻了一大跤
一般來說
密碼或是連線字串這種敏感資訊
不會直接放在專案裡面
而是使用cofig搭配CI/CD
針對不同環境去做設置
比較方便也比較安全
那天要開一個新的後端專案
資料庫可以說是後端專案的靈魂
所以專案建起來的第一步
就是設定資料庫連線拿資料
公司的專案都大同小異
資料庫連線所需要的token
統一放在Gitlab的變數中
在跑CI Job時
替換appsetting中的內容
填寫Jira申請單
取得PO批准
跟DBA拿到token之後
開開心心的貼到Gitlab變數中
重新跑一次CI
自信滿滿地打開頁面
沒想到一個大大的Error
顯示資料庫連線失敗
一開始以為又犯老毛病
打錯字
但是和同事4 Eyes仔細檢查後
Gitlab變數的設定的確錯
老狗變不出新把戲
還是只能搬出印log大法
把appsetting的值印出來
印出來之後
發現跟DBA給的不一樣
亂碼的最後
少了一些字元
真的是見鬼了
難道我跟同事眼睛業障重
複製貼上都能貼錯的嗎
再看一次Gitlab
的的確確就是DBA給的token
但是和log印出來的就是不一樣
看了一下.gitlab-ci的ym設定
也就是簡單的sed指令做取代
還是其他專案複製過來的
也不太可能出錯
既然在toke在程式啟動時就錯了
我就試著在CI的pipeline中
用個簡單的echo
把變數印出來
一跑Job,才發現事情真的不對勁
印出來的變數還是錯的
所以跟程式沒有關係
而是CI/CD有問題
比對一下兩個token
赫然發現兩個字串的差異
在一個錢字號之後
至此我才恍然大悟
因為字串帶有$
導致$字號後面的內容
被sed指令當作變數
所以就變成空白了
結果就是$字號之後的東西都不見了
解決辦法也很簡單
請DBA再產生一個沒有錢字號的token
替換過後,一次OK
然後在文件註明這個大坑
結論: 還是得靠log阿
下回預告
Local好端端的Html
上到測試環境後
某個element就憑空消失了
兇手到底會是誰?