DevOps+Go

go程序的自动发布,在某课网上看到了这么个课程,看了下内容,大致意思是:用某个触发机制或者钩子,调用shell脚本,对服务器里的程序进行更新执行,这里的触发机制或者钩子可以是手动执行shell脚本,利用git的钩子。

下面是大致实现步骤:

1 简单网页程序:

package main

import (
	"net/http"
	"io"
)

func firstPage(w http.ResponseWriter, r *http.Request) {
	io.WriteString(w, "<h1>hello,this is firstPage</h1>")
}
func main() {
	http.HandleFunc("/", firstPage)

	http.ListenAndServe(":8000", nil)
}

2.生成在centos内执行的文件:

E:\GoProgram\awsomeproject\src\webserver\webserver>set GOARCH=amd64

E:\GoProgram\awsomeproject\src\webserver\webserver>set GOOS=linux

E:\GoProgram\awsomeproject\src\webserver\webserver>go install

3.写一个触发事件,并生成在centos内执行的文件:大致意思是,访问这个页面触发执行deploy.sh脚本

package main

import (
	"net/http"
	"io"
	"os/exec"
	"log"
)
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 deployPage</h1>")
	reLaunch()
}
func main() {
	http.HandleFunc("/", firstPage)
	http.ListenAndServe(":5000", nil)
}

4.写deploy.sh脚本,在win平台上写的shell脚本并不能直接在centos上执行,解决办法:

#! /bin/sh
echo "----------------------START----------------------------"
kill -9 $(pgrep webserver)
cd /home/newserver
rm -rf webserver
git clone https://github.com/sahongzhi/webserver.git
cd /home/newserver/webserver/webserver
chmod 777 webserver
./webserver &
echo "----------------------END------------------------------"

将相关程序上传到服务器。

访问http://111.231.73.14:8000/:

修改为secondPage,访问http://111.231.73.14:5000/之后,再访问http://111.231.73.14:8000/:

触发生效!

还有一种是用git的钩子,在settings里面有个webhook,在那里设置:

这样在上传代码至git上时,自动更新服务器程序:

修改为thirdPage,并push到git,访问http://111.231.73.14:8000/:

生效!

猜你喜欢

转载自blog.csdn.net/qq_20867981/article/details/88846687