用Mailgun方式在Drone pipeline中集成SMTP邮件通知

用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服务

  1. https://www.mailgun.com/ 上注册账号,需要提供信用卡信息,默认选择了免费套餐;
  2. 按照提示进行账号验证;
  3. 添加自定义域名,比如 xdevops.cn;
  4. 按照提示进行域名验证;
  5. 选择使用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-java8notifyci-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_recipientsemail_useremail_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上面的说明。

如果没有收到邮件,请检查是否被邮箱自动拦截,并放到垃圾箱了。

参见:

小结

与Jenkins相比,Drone的文档描述不够完整,刚开始接触时会走一些弯路。

但是Drone的云原生特性,pipeline as docker,plugin as docker,使得可以用Drone更加灵活方便。另外,Drone的pipeline语法更为简洁,除了支持一个pipeline中多个step,还支持一个项目多个pipeline;通过depends_on 可以灵活控制step和pipeline的运行先后顺序和并行(相当于一个流程引擎)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章