Bo-Yi Wu 2017.04.27
 聯發科技後端工程師  DevOps  Golang, PHP, Node.js ..  維護數個 Go 開源專案  Gitea  Gin  Drone Plugin  appleboy @GitHub  appleboy @twitter  appleboy @slideshare  appleboy46 @facebook
5 Develop Git Push Git Tag Develop Git Push Git Tag Testing Deploy Deploy Deploy Production Staging Production Testing Deploy Staging
Jenkins Drone Gitlab CI
 支援 Command Line Flag 參數功能  支援 Bot API WebHook 功能  支援 Https for WebHook Tunnel  支援自動更新 https 憑證功能 (Let’s Encrypt)  支援監控 WebHook 服務功能  支援多種訊息格式 (圖片, 影片, 表情符號 … 等)  支援跨平台編譯執行檔  支援透過 Docker 發送訊息  支援高並發 (處理大量發送訊息)
 支援 Command Line Flag 參數功能  支援 Bot API WebHook 功能  支援 Https for WebHook Tunnel  支援自動更新 https 憑證功能 (Let’s Encrypt)  支援監控 WebHook 服務功能  支援多種訊息格式 (圖片, 影片, 表情符號 … 等)  支援跨平台編譯執行檔  支援透過 Docker 發送訊息  支援高並發 (處理大量發送訊息)
import “flag” https://golang.org/pkg/flag/
不支援系統環境變數
 支援 Command Line Flag 參數功能  支援 Bot API WebHook 功能  支援 Https for WebHook Tunnel  支援自動更新 https 憑證功能 (Let’s Encrypt)  支援監控 WebHook 服務功能  支援多種訊息格式 (圖片, 影片, 表情符號 … 等)  支援跨平台編譯執行檔  支援透過 Docker 發送訊息  支援高並發 (處理大量發送訊息)
http.NewServeMux()
 支援 Command Line Flag 參數功能  支援 Bot API WebHook 功能  支援 Https for WebHook Tunnel  支援自動更新 https 憑證功能 (Let’s Encrypt)  支援監控 WebHook 服務功能  支援多種訊息格式 (圖片, 影片, 表情符號 … 等)  支援跨平台編譯執行檔  支援透過 Docker 發送訊息  支援高並發 (處理大量發送訊息)
firewall
https://ngrok.com/
drone-line –s secret –t token ––tunnel –port 2002 webhook https://localtunnel.github.io/www/
 支援 Command Line Flag 參數功能  支援 Bot API WebHook 功能  支援 Https for WebHook Tunnel  支援自動更新 https 憑證功能 (Let’s Encrypt)  支援監控 WebHook 服務功能  支援多種訊息格式 (圖片, 影片, 表情符號 … 等)  支援跨平台編譯執行檔  支援透過 Docker 發送訊息  支援高並發 (處理大量發送訊息)
不用擔心憑證過期
http.Serve(autocert.NewListener("example.com"), handler) http://bit.ly/one-line-autotls
drone-line –s secret –t token ––autotls –host foo.bar webhook
 支援 Command Line Flag 參數功能  支援 Bot API WebHook 功能  支援 Https for WebHook Tunnel  支援自動更新 https 憑證功能 (Let’s Encrypt)  支援監控 WebHook 服務功能  支援多種訊息格式 (圖片, 影片, 表情符號 … 等)  支援跨平台編譯執行檔  支援透過 Docker 發送訊息  支援高並發 (處理大量發送訊息)
Memory 使用量 …
自訂監控數據, 分析使用者訊息
https://prometheus.io/
https://grafana.com/
 支援 Command Line Flag 參數功能  支援 Bot API WebHook 功能  支援 Https for WebHook Tunnel  支援自動更新 https 憑證功能 (Let’s Encrypt)  支援監控 WebHook 服務功能  支援多種訊息格式 (圖片, 影片, 表情符號 … 等)  支援跨平台編譯執行檔  支援透過 Docker 發送訊息  支援高並發 (處理大量發送訊息)
drone-line –s secret –t token –to xxxx –message “Hi”
drone-line –s secret –t token –to xxxx –image “xxxxx” drone-line –s secret –t token –to xxxx –video “xxxxx” drone-line –s secret –t token –to xxxx –audio “xxxxx”
 支援 Command Line Flag 參數功能  支援 Bot API WebHook 功能  支援 Https for WebHook Tunnel  支援自動更新 https 憑證功能 (Let’s Encrypt)  支援監控 WebHook 服務功能  支援多種訊息格式 (圖片, 影片, 表情符號 … 等)  支援跨平台編譯執行檔  支援透過 Docker 發送訊息  支援高並發 (處理大量發送訊息)
write once run anywhere
https://github.com/mitchellh/gox
真心不騙
http://www.banana-pi.org/m64.html
 支援 Command Line Flag 參數功能  支援 Bot API WebHook 功能  支援 Https for WebHook Tunnel  支援自動更新 https 憑證功能 (Let’s Encrypt)  支援監控 WebHook 服務功能  支援多種訊息格式 (圖片, 影片, 表情符號 … 等)  支援跨平台編譯執行檔  支援透過 Docker 發送訊息  支援高並發 (處理大量發送訊息)
Jenkins Drone Gitlab CI
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
https://github.com/urfave/cli
Drone
發送給原 commit 作者 避免團隊成員收到太多無意義訊息
 支援 Command Line Flag 參數功能  支援 Bot API WebHook 功能  支援 Https for WebHook Tunnel  支援自動更新 https 憑證功能 (Let’s Encrypt)  支援監控 WebHook 服務功能  支援多種訊息格式 (圖片, 影片, 表情符號 … 等)  支援跨平台編譯執行檔  支援透過 Docker 發送訊息  支援高並發 (處理大量發送訊息)
go f(“goroutine”)
專案: https://github.com/appleboy/drone-line 下載: https://github.com/appleboy/drone-line/releases Docker: https://hub.docker.com/r/appleboy/drone-line
專案: https://github.com/appleboy/drone-facebook 下載: https://github.com/appleboy/drone-facebook/releases Docker: https://hub.docker.com/r/appleboy/drone-facebook
結合手機 App 服務
Gorush Server
A push notification server written in Go https://github.com/appleboy/gorush
(drone-line or drone-facebook) + Gorush
Why not Node.js, Python, PHP?
類似 C 語法
http://bit.ly/oneday-golang
http://bit.ly/oneday-devops
謝謝大家參與

用 Go 語言打造 DevOps Bot

Editor's Notes

  • #7 什麼時候該發通知訊息? 傳統都是透過 slack 或 email 發送訊息通知
  • #8 每天收到幾百封 build success 或 fail 的 email 都懶得看了
  • #9 每天收到幾百封 devops build success 或 fail 的 email 都懶得看了 大家應該都有經驗 被放到 maill loop 內 如果不甘自己的事情 根本就不會想花任何時間去看 何況是這種 CI/CD devops 的通知信
  • #10 圖片來源: https://getez.info/hold/1162 當大家都不注重 deploy 成功或失敗的訊息時,devops 工程師就會很不高興
  • #11 好險去年 fb 或 line 相繼公佈 API
  • #12 大家不會裝 slack 也不會裝 email app 但是 fb 或 line 總會裝吧?
  • #13 當消息丟來時,同事或主管會以為是朋友或家人丟過來,當然也可以 off 掉 notification 所以這也不是最終解,後面會講到該如何正確發送通知訊息給相關人員 PM Sales RD 主管
  • #14 可以透過 jenkins 執行 command line 透過 Drone 執行 Docker image 簡單介紹 Drone 的由來
  • #15 所以 chatbot 必須支援 docker 及 command line. 給不同單位需求使用 這也是目前開源專案的 best practice.
  • #16 公司有 95% 是使用 Windows 電腦 + Linux 環境 5% 使用 Mac 環境上班 所以希望開發一次 各平台都可以支援使用 各部門也可以透過這軟體 在各 OS 中使用及開發
  • #17 今天要教大家如何用 Go 語言打造 Bot, 如果不會寫程式 也想要主動丟訊息給其他人 也可以直接用 Go 的好處 包成 binary 的方式 測試及實驗
  • #21 https://commons.wikimedia.org/wiki/File:Emoji_u1f62d.svg
  • #23 在 Go 裡面不需要任何 Framework 內建的 http library 就已經很夠用了 市面上 go framework 只幫忙處理了 routing 及 request 重寫
  • #24 支援本地端開發
  • #26 付費軟體,免費只能有一個 free host
  • #28 Ngrok 跟 localtunnel 是用來開發用的
  • #30 Nginx Caddy traefik
  • #34 Memory gc cpu 使用量等等 …
  • #35 分析使用者訊息來分類 …. 今天發布多少 bug fix 上了多少次版本 失敗多少次 等
  • #36 用 prometheus 做到上述功能 但是 prometheus 的報表顯示 不是很好看
  • #40 前面會有多台 fb 或 line chat bot service 同接一台 grafana 監控系統 只要一有變化 就會通知
  • #42 任何語言都可以執行此指令
  • #43 圖片 影片 表情符號
  • #45 要服務各式各樣的作業系統 所以選一種語言 寫一次 可以執行在任何地方。
  • #52 除了 jenkins 之外 drone 或 gitlab ci 都可以透過 docker 來進行部署測試
  • #53 https://docs.docker.com/engine/userguide/eng-image/baseimages/ Creating a simple base image using scratch
  • #59 為了避免不相關成員收到無意義的 notification 測試人員會收到 staging 上版通知 上面主管會收到 production 上版通知 開發者會收到自己測試失敗的通知 所有開發者會收到上版失敗通知
  • #73 公司 90% 寫
  • #74 公司 90% 寫 C 要轉來寫 go 輕而易舉 Go 效能 及 deploy 都大於其他語言 Php livereload node.js livereload 都吃不少開發機記憶體