用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的运行先后顺序和并行(相当于一个流程引擎)。