用Mailgun方式在Drone pipeline中集成SMTP郵件通知
前言
一般地,集成SMTP郵件通知有3種方式:
- 方式一:使用公司SMTP Server,郵箱名通常爲
[email protected]
- 方式二:使用免費郵箱服務商提供的SMTP Server(比如QQ郵箱和163郵箱),郵箱名通常爲
[email protected]
或[email protected]
- 方式三:使用專門的SMTP Service (比如Mailgun),郵箱名通常爲
xxx@yourdomain
,此種方式適用於有自己的域名的情況,比如我的域名是 xdevops.cn
本文描述瞭如何通過Mailgun方式,使用我自己的域名xdevops.cn ,在Drone pipeline中集成SMTP郵件通知。
對使用方式二的情況,可以參考Jenkins 配置郵件通知來開啓SMTP服務
在Mailgun中開啓SMTP服務
- 在 https://www.mailgun.com/ 上註冊賬號,需要提供信用卡信息,默認選擇了免費套餐;
- 按照提示進行賬號驗證;
- 添加自定義域名,比如 xdevops.cn;
- 按照提示進行域名驗證;
- 選擇使用SMTP方式發送郵件,並記錄你的SMTP Username和Password。
Mailgun提供的SMTP服務配置:
- SMTP Server:
smtp.mailgun.org
- Port:
587
Mailgun在賬號驗證獲取短信驗證碼時有一個bug,需要先選擇國家(China),後輸入手機號碼,否則會出現“Internal error“的錯誤。
參見:
在Drone pipeline中集成郵件通知
下面是一個完整的Drone 1.0 Pipeline示例。
示例項目的.drone.yml
中包含了兩個pipeline:ci-java8
和notify
,ci-java8
流水線用來對一個Java項目進行Maven構建,而notify
流水線用來郵件通知整個項目的本次構建結果;
kind: pipeline
type: docker
name: ci-java8
volumes:
- name: maven_local_repo
host:
path: /mnt/data/maven_local_repo
steps:
- name: build
image: maven:3-jdk-8
volumes:
- name: maven_local_repo
path: /root/.m2
commands:
- mvn install -s settings.xml -B -U
---
kind: pipeline
type: docker
name: notify
clone:
disable: true
steps:
- name: email
image: drillster/drone-email
settings:
recipients_only: true
recipients:
from_secret: email_recipients
subject: "Drone build: [{{ build.status }}] {{ repo.name }} ({{ repo.branch }}) #{{ build.number }}"
host: smtp.mailgun.org
port: 587
from: [email protected]
username:
from_secret: email_user
password:
from_secret: email_password
trigger:
status: [success, failure]
depends_on: [ci-java8]
下面來說明郵件通知部分:
notify
流水線中不再需要clone
代碼倉庫;image: drillster/drone-email
:使用drillster/drone-email
插件(插件其實也是Docker鏡像)來發送郵件;recipients_only: true
:只發送給指定郵件收件人,不默認發送給流水線創建人;- 在Drone項目設置中,添加Secrets:
email_recipients
、email_user
和email_password
,用來保存郵件收件人、SMTP Username和SMTP Password; - 使用
from_secret
讀取Drone項目設置中的Secret; host
爲SMTP Server,port
爲SMTP端口,from
爲郵件發件人地址;- 可以自定義郵件標題
subject
,也可以使用默認標題。 - 使用
trigger
來設置無論項目構建是成功還是失敗,都要發郵件通知; - 使用
depends_on
來設置,在ci-java8
流水線運行完成(無論成功還是失敗)後才運行notify
流水線進行郵件通知。
drone-email 的官方文檔中缺乏對使用secret的描述,而Drone 1.0的流水線語法與之前版本有較大差異,需要綜合參考drone官方文檔和drone github上面的說明。
如果沒有收到郵件,請檢查是否被郵箱自動攔截,並放到垃圾箱了。
參見:
- drone-email官方文檔
- drone-email Github
- drone-email Github文檔
- 設置和使用drone secret官方文檔
- https://github.com/Drillster/drone-email/issues/27
- drone pipeline triggers
- drone pipeline depends_on
- drone pipeline clone
小結
與Jenkins相比,Drone的文檔描述不夠完整,剛開始接觸時會走一些彎路。
但是Drone的雲原生特性,pipeline as docker,plugin as docker,使得可以用Drone更加靈活方便。另外,Drone的pipeline語法更爲簡潔,除了支持一個pipeline中多個step,還支持一個項目多個pipeline;通過depends_on
可以靈活控制step和pipeline的運行先後順序和並行(相當於一個流程引擎)。