[廚餘回收] Jenkins 的 Git Plugin 設定 Polling ignores commits in certain paths 套用在中文檔名上失效?

幾天前同事回報,他 merge 完 push 之後 Jenkins 為何沒有建置? 我目前所在的公司所有原始碼是湊在一起的,但是每一個建置作業又只需要建置某一個專案及其相依的專案,所以除了使用 Sparse Checkout paths 之外還搭配 Polling ignores commits in certain paths 來讓建置作業能夠控制在需要建置時建置,所以這問題肯定出在這兩個地方。

Sparse Checkout paths 旨在控制需要 pull 哪些路徑下來,所以如果它不 work 的話應該連原始碼檔案都看不到,所以問題轉向 Polling ignores commits in certain paths。

經過交叉測試,發現簽入的檔案之中,雖然符合 Included Regions 的 Pattern,但是在有中文檔名的檔案被簽入時就是無法觸發建置作業。

直接將 commit log 印出來看一下,發現中文檔名的檔案路徑有被用雙引號(") 括起來,英文的則沒有,這兩個雙引號該不會是造成問題的原因吧?

我去追查 Git Plugin 在處理 Polling ignores commits in certain paths 檔案路徑比對的 Source Code,發現它用到了 Matcher.matches() 方法,意思就是說我們下的 Pattern 必須能夠完整地 Match 檔案路徑,部分 Match 是不行的。

我們可以透過 Java Regular Expression Tester 來測試就可以知道,雖然 Pattern 有 Match 到,但是 .matches() 方法回傳是 false。

知道問題在哪裡就解決一半了,調整 Included Regions 的 Pattern 讓它可以完整 Match 有雙引號的情境就可以了。

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學