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)

猜你喜欢

转载自blog.csdn.net/suresand/article/details/79903783