在建置自動化測試時,當任務結束,通常會希望能夠發郵件通知開發者或是相關的夥伴們
Jenkins 內建提供了 Mail 套件讓使用者能直接在 Job Configuration 中做設置
後來發現套件提供的變化不夠我使用,所以就研究了下該如何自訂義更細節的內容
基本設置
先從基本的設置開始,先假設你或是你的 Jenkins 管理員已經 include Mail 套件
在要設置的 Jenkins Job 的 Configuration 中,在最下面的 “Add post-build action” 的 toggle menu 中找到 “Email Notification”
加入後就能夠開始設置簡單的 mail 通知
Recipients 是放入要接收 mail 的收件人信箱
Apply 後,每當任務完成就會送出 mail 到指定的信箱
但郵件內容很單純,就是成功或失敗,可以執行任務測試看看
如果要有更進階的資訊就需要另一個 mail 相關的區塊設置
Editable mail notification
一樣在 “Add post-build action” 找到設定加入
會看到以下預設設置
主要會用到的大概是
- Project Recipient List: 收件人區塊
- Content Type: 決定你的郵件內容格式是什麼,Plain text/HTML
- Default Subject: 郵件標題
- Default Content: 郵件內容
- Attach Build Log
$
符號變數代表的是 Jenkins 內部支援的環境變數
在 Build 區塊的 Execute bash command 上也有 Link 能參閱
所以我們可以利用環境變數來讓郵件內容有更多變化
比如郵件標題可以設為
1 | [$JOB_BASE_NAME] - $BUILD_STATUS |
郵件內容可以放
1 | Build url: $BUILD_URL |
如果更美化內容可以搭配將 Content Type 改成 HTML 的形式
1 | <div> |
但這樣還是限制於得用支援的環境變數,或是你事先設置好的環境變數,有時候我們會想要在程式進行的過程中就把一些重要資訊儲存下來,這時候要怎麼放到 Jenkins 上呢
Load File as content
在 Default Content 內可以放入以下指令將指定的 html 檔案讀入變成郵件內容
1 | ${FILE, path="<your-file-path>/<your-file>.html"} |
file path
在 Configuration 中檔案 Root 位置就是 Jenkins Job 的 %WORKSAPCE%
假設你的 html 檔案放在 workspace 內的資料夾叫做 mail
,那麼 path 就是 mail/<your-file>.html
由此可知,需要在 script 完成的時候輸出一個 html 檔案,讓 Jenkins 能讀入
透過這種方式就能自訂很多細部資訊,像是成功的話是何種狀態,或是失敗的話又是何種狀態的失敗,通常如果郵件是設給開發者群接收,都會比較想知道更多細節
Python template
直接在 Python 內直接建構 html 字串,然後打開檔案寫入字串,雖然可行,但會使程式碼變得很凌亂,會有太多 html codes 夾雜在內
可以考慮用 template 的方式,在 run time 傳入數值,動態改變指定檔案的數值
在想要動態改變的數值加上 {}
命名,然後讀檔近來,使用 format
做賦值
Example
phoneList.txt
1 | <div> |
Code snippets
1 | with open('/phoneList.txt', 'r+') as f: |
由於打雜的關係最近微微的接觸了些自動化的工作,一開始滿不上手的,因為沒弄過,而處理 Jenkins server 的同事還分處印度美國
嚴格來說算是被一個在 infra team 中的印度人雷了,最後我自己要到 Job & Machine 的權限搞通了 Jenkins,往好處想也算是學到了一點新技能,壞處就是因此滑了幾天的時間,中間都在等待他
這一點算是學到教訓了,假如你感覺到對方其實不太幫你,而你也盡力 push 甚至一起討論怎麼做,但過了兩三天還是無果,就該 assign 給那個 team 的其他人,而不是自己先扛幫他做了他該做的工作,畢竟這是職場,不需要害怕或同情別人,就事論事才對