狠狠撸

狠狠撸Share a Scribd company logo
Bo-Yi Wu
2017.04.27
? 聯發科技後端工程師
? DevOps
? Golang, PHP, Node.js ..
? 維護數個 Go 開源專案
? Gitea
? Gin
? Drone Plugin
? appleboy @GitHub
? appleboy @twitter
? appleboy @slideshare
? appleboy46 @facebook
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
5
Develop
Git Push
Git Tag
Develop
Git Push
Git Tag
Testing
Deploy
Deploy
Deploy
Production
Staging
Production
Testing
Deploy
Staging
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
Jenkins Drone Gitlab CI
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
? 支援 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 發送訊息
? 支援高並發 (處理大量發送訊息)
不用担心凭证过期
用 Go 語言打造 DevOps Bot
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/
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
? 支援 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
用 Go 語言打造 DevOps Bot
真心不骗
用 Go 語言打造 DevOps Bot
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
用 Go 語言打造 DevOps Bot
https://github.com/urfave/cli
用 Go 語言打造 DevOps Bot
Drone
用 Go 語言打造 DevOps Bot
發送給原 commit 作者
避免團隊成員收到太多無意義訊息
用 Go 語言打造 DevOps Bot
? 支援 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 服務
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
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?
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
類似 C 語法
http://bit.ly/oneday-golang
http://bit.ly/oneday-devops
谢谢大家参与

More Related Content

用 Go 語言打造 DevOps Bot

Editor's Notes

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