狠狠撸
Submit Search
用 Go 語言打造 DevOps Bot
?
Download as PPTX, PDF
?
11 likes
?
5,240 views
Bo-Yi Wu
Follow
介紹如何用 Go 語言實戰 DevOps Bot http://chatbot.ithome.com.tw/
Read less
Read more
1 of 76
Download now
More Related Content
用 Go 語言打造 DevOps Bot
1.
Bo-Yi Wu 2017.04.27
2.
? 聯發科技後端工程師 ? DevOps ?
Golang, PHP, Node.js .. ? 維護數個 Go 開源專案 ? Gitea ? Gin ? Drone Plugin ? appleboy @GitHub ? appleboy @twitter ? appleboy @slideshare ? appleboy46 @facebook
5.
5 Develop Git Push Git Tag Develop Git
Push Git Tag Testing Deploy Deploy Deploy Production Staging Production Testing Deploy Staging
13.
Jenkins Drone Gitlab
CI
17.
? 支援 Command
Line Flag 參數功能 ? 支援 Bot API WebHook 功能 ? 支援 Https for WebHook Tunnel ? 支援自動更新 https 憑證功能 (Let’s Encrypt) ? 支援監控 WebHook 服務功能 ? 支援多種訊息格式 (圖片, 影片, 表情符號 … 等) ? 支援跨平台編譯執行檔 ? 支援透過 Docker 發送訊息 ? 支援高並發 (處理大量發送訊息)
18.
? 支援 Command
Line Flag 參數功能 ? 支援 Bot API WebHook 功能 ? 支援 Https for WebHook Tunnel ? 支援自動更新 https 憑證功能 (Let’s Encrypt) ? 支援監控 WebHook 服務功能 ? 支援多種訊息格式 (圖片, 影片, 表情符號 … 等) ? 支援跨平台編譯執行檔 ? 支援透過 Docker 發送訊息 ? 支援高並發 (處理大量發送訊息)
19.
import “flag” https://golang.org/pkg/flag/
20.
不支援系统环境变数
21.
? 支援 Command
Line Flag 參數功能 ? 支援 Bot API WebHook 功能 ? 支援 Https for WebHook Tunnel ? 支援自動更新 https 憑證功能 (Let’s Encrypt) ? 支援監控 WebHook 服務功能 ? 支援多種訊息格式 (圖片, 影片, 表情符號 … 等) ? 支援跨平台編譯執行檔 ? 支援透過 Docker 發送訊息 ? 支援高並發 (處理大量發送訊息)
22.
http.NewServeMux()
23.
? 支援 Command
Line Flag 參數功能 ? 支援 Bot API WebHook 功能 ? 支援 Https for WebHook Tunnel ? 支援自動更新 https 憑證功能 (Let’s Encrypt) ? 支援監控 WebHook 服務功能 ? 支援多種訊息格式 (圖片, 影片, 表情符號 … 等) ? 支援跨平台編譯執行檔 ? 支援透過 Docker 發送訊息 ? 支援高並發 (處理大量發送訊息)
24.
firewall
25.
https://ngrok.com/
26.
drone-line –s secret
–t token ––tunnel –port 2002 webhook https://localtunnel.github.io/www/
27.
? 支援 Command
Line Flag 參數功能 ? 支援 Bot API WebHook 功能 ? 支援 Https for WebHook Tunnel ? 支援自動更新 https 憑證功能 (Let’s Encrypt) ? 支援監控 WebHook 服務功能 ? 支援多種訊息格式 (圖片, 影片, 表情符號 … 等) ? 支援跨平台編譯執行檔 ? 支援透過 Docker 發送訊息 ? 支援高並發 (處理大量發送訊息)
28.
不用担心凭证过期
30.
http.Serve(autocert.NewListener("example.com"), handler) http://bit.ly/one-line-autotls
31.
drone-line –s secret
–t token ––autotls –host foo.bar webhook
32.
? 支援 Command
Line Flag 參數功能 ? 支援 Bot API WebHook 功能 ? 支援 Https for WebHook Tunnel ? 支援自動更新 https 憑證功能 (Let’s Encrypt) ? 支援監控 WebHook 服務功能 ? 支援多種訊息格式 (圖片, 影片, 表情符號 … 等) ? 支援跨平台編譯執行檔 ? 支援透過 Docker 發送訊息 ? 支援高並發 (處理大量發送訊息)
33.
Memory 使用量 …
34.
自訂監控數據, 分析使用者訊息
35.
https://prometheus.io/
36.
https://grafana.com/
40.
? 支援 Command
Line Flag 參數功能 ? 支援 Bot API WebHook 功能 ? 支援 Https for WebHook Tunnel ? 支援自動更新 https 憑證功能 (Let’s Encrypt) ? 支援監控 WebHook 服務功能 ? 支援多種訊息格式 (圖片, 影片, 表情符號 … 等) ? 支援跨平台編譯執行檔 ? 支援透過 Docker 發送訊息 ? 支援高並發 (處理大量發送訊息)
41.
drone-line –s secret
–t token –to xxxx –message “Hi”
42.
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”
43.
? 支援 Command
Line Flag 參數功能 ? 支援 Bot API WebHook 功能 ? 支援 Https for WebHook Tunnel ? 支援自動更新 https 憑證功能 (Let’s Encrypt) ? 支援監控 WebHook 服務功能 ? 支援多種訊息格式 (圖片, 影片, 表情符號 … 等) ? 支援跨平台編譯執行檔 ? 支援透過 Docker 發送訊息 ? 支援高並發 (處理大量發送訊息)
44.
write once run
anywhere
45.
https://github.com/mitchellh/gox
47.
真心不骗
49.
http://www.banana-pi.org/m64.html
50.
? 支援 Command
Line Flag 參數功能 ? 支援 Bot API WebHook 功能 ? 支援 Https for WebHook Tunnel ? 支援自動更新 https 憑證功能 (Let’s Encrypt) ? 支援監控 WebHook 服務功能 ? 支援多種訊息格式 (圖片, 影片, 表情符號 … 等) ? 支援跨平台編譯執行檔 ? 支援透過 Docker 發送訊息 ? 支援高並發 (處理大量發送訊息)
51.
Jenkins Drone Gitlab
CI
52.
CGO_ENABLED=0 GOOS=linux GOARCH=amd64
go build
54.
https://github.com/urfave/cli
56.
Drone
58.
發送給原 commit 作者 避免團隊成員收到太多無意義訊息
60.
? 支援 Command
Line Flag 參數功能 ? 支援 Bot API WebHook 功能 ? 支援 Https for WebHook Tunnel ? 支援自動更新 https 憑證功能 (Let’s Encrypt) ? 支援監控 WebHook 服務功能 ? 支援多種訊息格式 (圖片, 影片, 表情符號 … 等) ? 支援跨平台編譯執行檔 ? 支援透過 Docker 發送訊息 ? 支援高並發 (處理大量發送訊息)
61.
go f(“goroutine”)
62.
專案: https://github.com/appleboy/drone-line 下載: https://github.com/appleboy/drone-line/releases Docker:
https://hub.docker.com/r/appleboy/drone-line
63.
專案: https://github.com/appleboy/drone-facebook 下載: https://github.com/appleboy/drone-facebook/releases Docker:
https://hub.docker.com/r/appleboy/drone-facebook
64.
結合手機 App 服務
67.
Gorush Server
68.
A push notification
server written in Go https://github.com/appleboy/gorush
69.
(drone-line or drone-facebook)
+ Gorush
70.
Why not Node.js,
Python, PHP?
73.
類似 C 語法
74.
http://bit.ly/oneday-golang
75.
http://bit.ly/oneday-devops
76.
谢谢大家参与
Editor's Notes
什麼時候該發通知訊息? 傳統都是透過 slack 或 email 發送訊息通知
每天收到幾百封 build success 或 fail 的 email 都懶得看了
每天收到幾百封 devops build success 或 fail 的 email 都懶得看了 大家應該都有經驗 被放到 maill loop 內 如果不甘自己的事情 根本就不會想花任何時間去看 何況是這種 CI/CD devops 的通知信
圖片來源: https://getez.info/hold/1162 當大家都不注重 deploy 成功或失敗的訊息時,devops 工程師就會很不高興
好險去年 fb 或 line 相繼公佈 API
大家不會裝 slack 也不會裝 email app 但是 fb 或 line 總會裝吧?
當消息丟來時,同事或主管會以為是朋友或家人丟過來,當然也可以 off 掉 notification 所以這也不是最終解,後面會講到該如何正確發送通知訊息給相關人員 PM Sales RD 主管
可以透過 jenkins 執行 command line 透過 Drone 執行 Docker image 簡單介紹 Drone 的由來
所以 chatbot 必須支援 docker 及 command line. 給不同單位需求使用 這也是目前開源專案的 best practice.
公司有 95% 是使用 Windows 電腦 + Linux 環境 5% 使用 Mac 環境上班 所以希望開發一次 各平台都可以支援使用 各部門也可以透過這軟體 在各 OS 中使用及開發
今天要教大家如何用 Go 語言打造 Bot, 如果不會寫程式 也想要主動丟訊息給其他人 也可以直接用 Go 的好處 包成 binary 的方式 測試及實驗
https://commons.wikimedia.org/wiki/File:Emoji_u1f62d.svg
在 Go 裡面不需要任何 Framework 內建的 http library 就已經很夠用了 市面上 go framework 只幫忙處理了 routing 及 request 重寫
支援本地端开发
付費軟體,免費只能有一個 free host
Ngrok 跟 localtunnel 是用來開發用的
Nginx Caddy traefik
Memory gc cpu 使用量等等 …
分析使用者訊息來分類 …. 今天發布多少 bug fix 上了多少次版本 失敗多少次 等
用 prometheus 做到上述功能 但是 prometheus 的報表顯示 不是很好看
前面會有多台 fb 或 line chat bot service 同接一台 grafana 監控系統 只要一有變化 就會通知
任何语言都可以执行此指令
圖片 影片 表情符號
要服務各式各樣的作業系統 所以選一種語言 寫一次 可以執行在任何地方。
除了 jenkins 之外 drone 或 gitlab ci 都可以透過 docker 來進行部署測試
https://docs.docker.com/engine/userguide/eng-image/baseimages/ Creating a simple base image using scratch
為了避免不相關成員收到無意義的 notification 測試人員會收到 staging 上版通知 上面主管會收到 production 上版通知 開發者會收到自己測試失敗的通知 所有開發者會收到上版失敗通知
公司 90% 寫
公司 90% 寫 C 要轉來寫 go 輕而易舉 Go 效能 及 deploy 都大於其他語言 Php livereload node.js livereload 都吃不少開發機記憶體
Download