go體驗devops
傳說中亞馬遜雲可以11.2s就進行一次專案的迭代,和之前的瀑布式開發以及敏捷式開發,在devops面前可以說都是小兒科!devops的工具鏈多的可怕,有機會再深入學習,今天簡單的用github的webhooks來嘗試下程式碼的實時提交部署執行自動化!
在github隨便見一個倉庫,取名newweb,然後clone下來,在克隆下來的newweb資料夾下新建webserver,在webserver下新建main.go檔案,如下程式碼:
package main
import (
"io"
"net/http"
)
func firstPage(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "<h1>Hello,this is my deploy page2</h1>")
}
func main() {
http.HandleFunc("/", firstPage)
http.ListenAndServe(":8000", nil)
}
然後我們想把這個程式碼部署到正式的伺服器上,是不是要在本地編譯提交,然後在正式服上再clone一次,然後執行程式碼,才完成部署,這三步操作基本上都是人工進行的,如果迭代的速度很快,必然要重複這個動作!
有沒有一種可能,我們在本地提交成功,正式服就自動完成部署並啟動呢?
首先我們在正式服克隆下這個程式碼,在和newweb同級新建一個deployserver,在deployserver資料夾下新建main.go,這個main.go的作用主要就是來部署webserver,程式碼如下:
package main
import (
"io"
"log"
"net/http"
"os/exec"
)
func reLaunch(){
cmd := exec.Command("sh","./deploy.sh")
err := cmd.Start()
if err !=nil {
log.Fatal(err)
}
err = cmd.Wait()
}
func firstPage(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "<h1>Hello,this is my deploy page</h1>")
reLaunch()
}
func main() {
http.HandleFunc("/", firstPage)
http.ListenAndServe(":5000", nil)
}
我們看到reLaunch函式執行了一個deploy.sh的指令碼,它是這樣的:
kill -9 $(pgrep webserver)
cd ~/newweb/
git pull git@github.com:lightTrace/newweb.git
cd webserver/
go build
./webserver &
首先殺掉webserver的程式,然後進入newweb目錄,pull拉取程式碼後進入webserver目錄編譯最新的程式碼,然後執行。
有人說這不就是幾個組合的指令碼嗎?很簡單呀,是的,就是這麼簡單,當我們在deployserver編譯後檔案和deploy.sh一起剪下到和newweb平級的目錄下,並啟動./deployserver &
那麼我們直接在瀏覽器訪問ip:5000就完成了webserver的自動部署及啟動,如果我們在github的webhooks設定push event後就呼叫deployserver(ip:5000)的url,我們在本地推送程式碼到倉庫就可以直接完成伺服器的部署了!
雖然這個程式碼和流程很簡單,但我們明顯體驗到了一點點devops的感覺,起碼減少了重複的人工勞動,而且容錯機制幾乎為0,當然devops要學習的東西很多,我們暫時以點觀面,後面再深入學習。
ps:注意本地系統和線上系統不一樣的時候需要進行交叉編譯哦!(例如本地windows或者mac,伺服器環境卻是linux)
相關文章
- go modules 初體驗Go
- Go初體驗|Mac上安裝GoGoMac
- ebpf-go 初體驗eBPFGo
- Go初體驗|基礎Go
- go 1.18 泛型初體驗Go泛型
- go語言的初體驗Go
- go語言學習初體驗Go
- ArgoWorkflow 教程(一)--DevOps 另一選擇?雲原生 CICD 初體驗Godev
- Azure DevOps (十三) 通過Azure Devops部署一個Go的Web應用devGoWeb
- 慕課網go語言體系課搶先體驗Go
- 滴滴基於Go語言的DevOps重塑之路Godev
- DevOps工程師需要學習Go語言? - iximiuzdev工程師Go
- 一位 Rust 開發者的 Go 初體驗RustGo
- 體驗go語言的風騷式程式設計Go程式設計
- 軟體開發中的DevOpsdev
- DevStream 進入 CNCF 沙箱,為 DevOps 工具提供包管理器一樣的使用體驗dev
- 荷蘭銀行實施大規模DevOps經驗dev
- Go 測驗 101 Go 語言 101 學習地址Go
- 對話專家:Go是DevOps時代最好的程式語言Godev
- 深入思考軟體工程,開啟 DevOps 之旅軟體工程dev
- DevOps是一種哲學,而不是一個具體技術名頭 - DZone DevOpsdev
- 自定義敏捷專案看板,體驗再升級!博雲DevOps平臺釋出3.1版本敏捷dev
- Go IP 段範圍校驗Go
- DevOps - DevOps隨想雜談dev
- 運維DevOps體系解析與落地實踐運維dev
- Go 結構體Go結構體
- 第一次體驗併發語言 Go 和 PHP 的區別GoPHP
- SpareBank網路銀行實現微服務DevOps經驗分享 - Somaiah微服務devAI
- Devops-01-devops 是什麼?dev
- DevOps與敏捷異同 - DZone DevOpsdev敏捷
- 微服務新體驗之Aspire初體驗微服務
- 現代DevOps如何改變軟體開發格局dev
- 一文讀懂雲上DevOps能力體系dev
- 體驗webhooksWebHook
- OpenResty體驗REST
- 體驗WebAssemblyWeb
- 【Azure DevOps系列】什麼是Azure DevOpsdev
- devops 2024dev