[英]Setting Jenkins to email a build notification to the BitBucket user who pushed a branch
項目存儲庫已使用BitBucket 插件成功連接到 Jenkins 服務器,並且項目設置為:
**
)只需按照插件中的說明和一些快速的 Google 搜索,即可輕松設置其中的每一個。 但是,我現在遇到了一個問題,這可能更多是想要以非常規方式運行而不是其他任何問題。
使用普通的 emailer 插件或 Email-ext 插件,可以設置電子郵件以發送給參與構建創建的人員。 例如,Email-ext 插件允許選擇:
所遵循的開發過程涉及由一個開發人員在命名分支中處理的每個項目,例如userA/projectB
。 顯然,其他開發人員可以檢查出來並推動進行更改,但這是不受歡迎的。 即使在這種情況下,也應該通知將更改推送到 BitBucket 的用戶。
當前的設置都不支持這一點。 Requester是最接近的,但這僅適用於手動構建。 觸發構建的推送到 SCM 應該通知推送的用戶似乎是一個非常簡單的要求,但這沒有記錄在任何容易找到的地方。
經過大量搜索,似乎唯一的方法是使用Pre-send script 。 這被添加到Email-ext post-build 步驟的Advanced設置中,並采用用Java 擴展Groovy編寫的代碼形式。
該腳本可以利用環境變量,但很難測試,因為無法在這些變量就位的情況下運行腳本。 您可以從Home -> Manage Jenkins -> Script console
測試簡單的 Groovy 腳本。
環境變量的一個重要“問題”是它們“包含”在腳本中,而不是變量或常量。 例如,在腳本編譯和運行之前,變量的內容被粘貼到它的$NAME
。 在下面的示例中,多行字符串語法用於包含 BitBicket 有效負載,而可能預期def payload = $BITBUCKET_PAYLOAD
會簡單地工作。
import javax.mail.Message.RecipientType
import javax.mail.Address
import javax.mail.internet.InternetAddress
import javax.mail.internet.MimeMessage
import groovy.json.JsonSlurper
def jsonSlurper = new JsonSlurper()
def bitbucket = jsonSlurper.parseText('''
$BITBUCKET_PAYLOAD'''
)
switch (bitbucket.actor.username){
case "userA":
msg.setRecipients(MimeMessage.RecipientType.TO, InternetAddress.parse("user.a@domain.com"));
break;
case "userB":
msg.setRecipients(MimeMessage.RecipientType.TO, InternetAddress.parse("user.b@domain.com"));
break;
}
setRecipients
命令覆蓋任何現有的收件人。 因此,如果用戶未被識別,則應將收件人列表或其他電子郵件配置設置為備用。 此外,如果沒有人選擇向其發送電子郵件,則腳本根本不會運行。 添加調試時,在正文中包含用戶名可能會有所幫助。
如果腳本失敗,堆棧跟蹤應該打印到測試的控制台日志輸出,並且構建通過/失敗不應該受到影響,但將使用正常的電子郵件地址設置。 在堆棧跟蹤中查找其中包含Script()
行,因為這是評估 Groovy 腳本的容器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.