使用gitee的webhook实现自动部署

gitee的webhook触发家里的树梅派实现github.io的自动部署

方案和流程

push code to gitee => gitee webhook => 树梅派cmdServer => 树梅派部署blog => 推送到 github page

需要的主键

1.客户端,我用的linux主机编写当前博客内容
2.gitee代码仓库管理当前代码,仓库管理中编辑webhook,链接指向树梅派的cmdServer
3.树梅派上的cmdServer是用gin-gonic/gin实现的指令服务器,部署过程也在树梅派上完成
4.github page承载当前文章内容

部分代码及说明

gitee webhook: https://xxxx.cn/gitee/1
地址根据自己的树梅派内网穿透地址来定,最后使用数字实现调用哪个指令

cmdServer.go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package main

import (
"github.com/gin-gonic/gin"
"os/exec"
"strings"
)

func Cmd(cmd string) (resp string) {
runResult := exec.Command("/bin/bash", "-c", cmd)
bytes, err := runResult.Output()
if err != nil {
println("Error run cmd!")
}
println("result:" + string(bytes))
return strings.Trim(string(bytes), "\n\b")
}

func main() {
gin.SetMode(gin.ReleaseMode)
r := gin.Default()
r.GET("/:id", func(c *gin.Context) {
id := c.Param("id")
c.JSON(200, Cmd("./cmd.sh "+id))
})
r.POST("/:id", func(c *gin.Context) {
id := c.Param("id")
c.JSON(200, Cmd("./cmd.sh "+id))
})
r.Run(":9013")
}

指令脚本很简单,就是访问该地址的时候调用相应的脚本文件

cmd脚本做了命令,参数限制

1
2
3
4
5
6
7
#!/bin/bash
#echo "param1: $1, pwd: $PWD"
if [ $1 == 1 ];then
. ./1.sh
elif [ $1 == 2 ];then
. ./2.sh
fi

1.sh脚本主要执行构建过程和推送

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
cd /home/pi/stanhe.github.io
echo "cd $PWD,start pull blog..."
git pull
rm -rf ./public
hexo g
cd ./public
git init
git add .
git commit -m "auto-build"
git remote add origin git@github.com:stanhe/stanhe.github.io.git
git push -f -u origin master
echo "完成构建!"

总结

整个流程大概就是如此,很简单,起初也就是为了测试一些gitee的webhook功能,之所以不部署到gitee是由于环境原因,可能很多文章内容不过审不让部署。