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是由于环境原因,可能很多文章内容不过审不让部署。