用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的運行先後順序和並行(相當於一個流程引擎)。

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