DevOps技术——入门框架搭建(base on Go)
DevOps :Development和Operations的组合词。
它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。 ——来自百度百科

接下来,我将把我搭建该技术框架的入门过程记录下来:过程中遇到很多坑,只要硬着头皮上就没什么能把你阻挡,让我们一起go!go!go!
需求:在日常开发过程中,需要频繁的修改业务逻辑,然后需要部署到服务器上供QA测试。这个过程对于大多数开发人员来说不是难事,但是这个重复性的过程很浪费开发人员的时间,我们希望达到,只要我们将改好的业务逻辑代码commit & push
,自动部署更新到服务器上并启动。就可以测试了。
首先写一个自动部署的服务:
/*
* @Author: Hifun
* @Date: 2020/1/3 16:07
*/
package main
import (
"fmt"
"io"
"net/http"
"os/exec"
)
func reLaunch() {
path := `../deploy.sh` // shell脚本
cmd := exec.Command("/bin/bash", "-c", path)
err := cmd.Start() // 这里引入了"os/exec"包,来操作外部的命令和可执行文件
if err != nil {
fmt.Printf("Execute Shell:%s failed with error:%s", path, err.Error())
//return
}
fmt.Printf("Executing command: %v ...\n", path)
cmd.Wait()
}
func firstPage(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "<h1>Hello ,this is auto deploy server!</h1>") // 给前端展示
reLaunch() // 这里利用的简单的异步操作
}
func main() {
http.HandleFunc("/", firstPage) // 绑定方法
http.ListenAndServe(":5000", nil) // 添加监听
}
这里使用url的方式来实现自动部署:他的方便之处在于:强大的github支持一种服务Webhooks,这个在后面说。
reLaunch方法里调用了外部shell脚本,来帮我们执行操作:杀掉当前已经运行的服务进程(如果存在的话)-> 拿到最新的代码 -> 启动服务.
#!/bin/bash
kill $(pgrep webserver)
cd ~/devops/
git pull https://github.com/hifuny/devops.git
cd webserver/
chmod 777 webserver
./webserver &
准备好了之后,我们把服务传到服务器并启动,在git里配置Webhooks.入口如图:

然后,我这里新建一个测试用的业务逻辑的服务:
/*
* @Author: Hifun
* @Date: 2020/1/3 11:48
*/
package main
import (
"io"
"net/http"
)
func firstPage(w http.ResponseWriter, r *http.Request) {
io.WriteString(w,"<h1>Hello! ,this is my firstPage!</h1>")
w.Write([]byte("Show!"))
}
func main() {
http.HandleFunc("/", firstPage)
http.ListenAndServe(":8000", nil)
}
业务逻辑服务写好后传到服务器并启动,我们能通过url访问:

看到已经启动成功。
然后我们在本地修改我们的业务逻辑代码,测试一下之前的自动化工具:
io.WriteString(w,"<h1>Hello! ,i am changed by deploy!</h1>")
w.Write([]byte("Success!"))
执行commit, push
可以看到我们的脚本已经自动执行:

然后再访问我们之前的业务逻辑的服务:

已经成功更新了!
在整个过程中有以下几点是需要我们准备的:
1.go为我们提供了良好的跨平台的特性,因此我们只需要在windows中打包对应得Linux的可执行二进制文件就好了。设置的方法在我的上一篇教程里。
2.要掌握一定的关于shell脚本的基础命令。
3.对git的基本使用。
4.对Linux系统关于文件权限的基本了解。
5.在实际操作的过程中可能会遇到各种问题,要有探究到底的勇气和信心。
——来自一个程序员小学生,欢迎学习交流。

加我微信:注明是来自简书。