SlideShare una empresa de Scribd logo
1 de 76
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
謝謝大家參與

Más contenido relacionado

La actualidad más candente

版本控制 使用Git & git hub
版本控制   使用Git & git hub版本控制   使用Git & git hub
版本控制 使用Git & git hub
維佋 唐
 

La actualidad más candente (20)

Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战
 
Git flow 與團隊合作
Git flow 與團隊合作Git flow 與團隊合作
Git flow 與團隊合作
 
Bootstrap個人網站 20141117
Bootstrap個人網站 20141117Bootstrap個人網站 20141117
Bootstrap個人網站 20141117
 
Git and Github basic with SourceTree
Git and Github basic with SourceTreeGit and Github basic with SourceTree
Git and Github basic with SourceTree
 
工程師必備第一工具 - Git
工程師必備第一工具 - Git工程師必備第一工具 - Git
工程師必備第一工具 - Git
 
Git與source tree 基礎教學
Git與source tree 基礎教學Git與source tree 基礎教學
Git與source tree 基礎教學
 
Git 入門與實作
Git 入門與實作Git 入門與實作
Git 入門與實作
 
微软Bot framework简介
微软Bot framework简介微软Bot framework简介
微软Bot framework简介
 
連哈秋都懂的Git教學
連哈秋都懂的Git教學連哈秋都懂的Git教學
連哈秋都懂的Git教學
 
Xcode 的 git 版本管理
Xcode 的 git 版本管理Xcode 的 git 版本管理
Xcode 的 git 版本管理
 
Git 版本控制 (使用教學)
Git 版本控制 (使用教學)Git 版本控制 (使用教學)
Git 版本控制 (使用教學)
 
My DevOps Tour 0.1
My DevOps Tour 0.1My DevOps Tour 0.1
My DevOps Tour 0.1
 
A successful git branching model 導讀
A successful git branching model 導讀A successful git branching model 導讀
A successful git branching model 導讀
 
版本控制 使用Git & git hub
版本控制   使用Git & git hub版本控制   使用Git & git hub
版本控制 使用Git & git hub
 
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
 
如何與 Git 優雅地在樹上唱歌
如何與 Git 優雅地在樹上唱歌如何與 Git 優雅地在樹上唱歌
如何與 Git 優雅地在樹上唱歌
 
容器式軟體開發介紹
容器式軟體開發介紹容器式軟體開發介紹
容器式軟體開發介紹
 
Git基礎介紹
Git基礎介紹Git基礎介紹
Git基礎介紹
 
認識 Docker
認識 Docker認識 Docker
認識 Docker
 
寫給大家的 Git 教學
寫給大家的 Git 教學寫給大家的 Git 教學
寫給大家的 Git 教學
 

Similar a 用 Go 語言打造 DevOps Bot

非常靠谱 Html 5
非常靠谱 Html 5 非常靠谱 Html 5
非常靠谱 Html 5
Tony Deng
 
Real time web实时信息流推送
Real time web实时信息流推送Real time web实时信息流推送
Real time web实时信息流推送
yongboy
 
廖雪峰 Saa s ovp
廖雪峰 Saa s ovp廖雪峰 Saa s ovp
廖雪峰 Saa s ovp
drewz lin
 
Node Web开发实战
Node Web开发实战Node Web开发实战
Node Web开发实战
fengmk2
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
Jackson Tian
 
Web development overview
Web development overviewWeb development overview
Web development overview
Wei Sun
 
WEB 安全基础
WEB 安全基础WEB 安全基础
WEB 安全基础
xki
 

Similar a 用 Go 語言打造 DevOps Bot (20)

Web开发基础
Web开发基础Web开发基础
Web开发基础
 
非常靠谱 Html 5
非常靠谱 Html 5 非常靠谱 Html 5
非常靠谱 Html 5
 
Real time web实时信息流推送
Real time web实时信息流推送Real time web实时信息流推送
Real time web实时信息流推送
 
Real-Time Web实时信息流推送
Real-Time Web实时信息流推送Real-Time Web实时信息流推送
Real-Time Web实时信息流推送
 
Docker Compose
Docker ComposeDocker Compose
Docker Compose
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
 
廖雪峰 Saa s ovp
廖雪峰 Saa s ovp廖雪峰 Saa s ovp
廖雪峰 Saa s ovp
 
Node Web开发实战
Node Web开发实战Node Web开发实战
Node Web开发实战
 
Node Web开发实战
Node Web开发实战Node Web开发实战
Node Web开发实战
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
 
Webrtc
WebrtcWebrtc
Webrtc
 
Web开发与运维安全浅见
Web开发与运维安全浅见Web开发与运维安全浅见
Web开发与运维安全浅见
 
Html5
Html5Html5
Html5
 
前端開發學習簡介
前端開發學習簡介前端開發學習簡介
前端開發學習簡介
 
HTML5
HTML5HTML5
HTML5
 
Web development overview
Web development overviewWeb development overview
Web development overview
 
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
 
WEB 安全基础
WEB 安全基础WEB 安全基础
WEB 安全基础
 
Web开发与运维安全浅见
Web开发与运维安全浅见Web开发与运维安全浅见
Web开发与运维安全浅见
 
唐俊开-Html5 mobile web app浅谈
唐俊开-Html5 mobile web app浅谈唐俊开-Html5 mobile web app浅谈
唐俊开-Html5 mobile web app浅谈
 

Más de Bo-Yi Wu

Más de Bo-Yi Wu (20)

Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署
 
用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構
 
Job Queue in Golang
Job Queue in GolangJob Queue in Golang
Job Queue in Golang
 
Golang Project Layout and Practice
Golang Project Layout and PracticeGolang Project Layout and Practice
Golang Project Layout and Practice
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
 
Drone 1.0 Feature
Drone 1.0 FeatureDrone 1.0 Feature
Drone 1.0 Feature
 
Drone CI/CD Platform
Drone CI/CD PlatformDrone CI/CD Platform
Drone CI/CD Platform
 
GraphQL IN Golang
GraphQL IN GolangGraphQL IN Golang
GraphQL IN Golang
 
drone continuous Integration
drone continuous Integrationdrone continuous Integration
drone continuous Integration
 
Gorush: A push notification server written in Go
Gorush: A push notification server written in GoGorush: A push notification server written in Go
Gorush: A push notification server written in Go
 
Introduction to Gitea with Drone
Introduction to Gitea with DroneIntroduction to Gitea with Drone
Introduction to Gitea with Drone
 
用 Go 語言實戰 Push Notification 服務
用 Go 語言實戰 Push Notification 服務用 Go 語言實戰 Push Notification 服務
用 Go 語言實戰 Push Notification 服務
 
A painless self-hosted Git service: Gitea
A painless self-hosted Git service: GiteaA painless self-hosted Git service: Gitea
A painless self-hosted Git service: Gitea
 
Write microservice in golang
Write microservice in golangWrite microservice in golang
Write microservice in golang
 
用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式
 
PHP & JavaScript & CSS Coding style
PHP & JavaScript & CSS Coding stylePHP & JavaScript & CSS Coding style
PHP & JavaScript & CSS Coding style
 
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
 
Why to choose laravel framework
Why to choose laravel frameworkWhy to choose laravel framework
Why to choose laravel framework
 
How to choose web framework
How to choose web frameworkHow to choose web framework
How to choose web framework
 
Git Flow and JavaScript Coding Style
Git Flow and JavaScript Coding StyleGit Flow and JavaScript Coding Style
Git Flow and JavaScript Coding Style
 

用 Go 語言打造 DevOps Bot

Notas del editor

  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 都吃不少開發機記憶體