这里说明一下最终拉取gogs更新的执行脚本的内容。
直接上内容
目录说明
webhook
├── h5 # 仓库地址
│ └── .git
├── main.go
├── webhook # main.go编译后的得到的
└── webhook.sh
操作说明
- 进入目录,执行
git clone ssh://xxx.com/aa.git h5
(这里需要注意的是最好用ssh来进行拉取代码,需要设置公钥) - 然后执行
go build .
将main.go
编译为可执行的webhook
- 为
webhook
和webhook.sh
设置可执行权限 -
nohup ./webhook &
后台执行,开始监听webhook - 在gogos上面设置webhook。
- 大功告成
Shell的内容
#!/bin/bash
# $1 表示传入的第一个参数,$0是脚本本身名字
branch=$1
cd ./h5/
echo `date +"%Y-%m-%d %H:%M:%S"`"开始更新" $branch>>/root/syncGit/webhook/git.log
# 首先切换分支
git checkout $branch
if [[ $branch = "test" ]]; then
git pull >> /root/syncGit/webhook/git.log
cp -r ./build/h5 /data/wwwroot/public/test/
echo /data/wwwroot/public/test/h5 "用户组修改"
chown -R www.www /data/wwwroot/public/test/h5
elif [[ $branch = "master" ]]; then
git pull >> /root/syncGit/webhook/git.log
cp -r ./build/h5 /data/wwwroot/public/
echo /data/wwwroot/public/h5 "用户组修改"
chown -R www.www /data/wwwroot/public/h5
fi
echo '完成更新'>>/root/syncGit/webhook/git.log
main.go的内容
package main
import (
"fmt"
"net/http"
"io/ioutil"
"encoding/json"
"os/exec"
)
// 139.129.131.25
func handlePost(writer http.ResponseWriter, request *http.Request) {
request.ParseForm()
// 读取请求body
requestbody, _ := ioutil.ReadAll(request.Body)
// 将获取的数据转为json字符串
input := string(requestbody)
// fmt.Println(input)
// 将字符串转为对象
var target interface{}
if err := json.Unmarshal([]byte(input), &target); err != nil {
fmt.Fprintf(writer, `{"code":40003}`)
return
}
retMap, _ := target.(map[string]interface{})
var ref string = retMap["ref"].(string)
fmt.Println("ref:"+ref)
branch := "master"
if ref == `refs/heads/master` {
}else{
branch = "test"
}
command := `./webhook.sh `+branch
fmt.Println("command:"+command)
cmd := exec.Command("/bin/bash", "-c", command)
err := cmd.Run()
if err != nil {
fmt.Println("pull error")
fmt.Fprintf(writer, `{"code":40002,"branch":`+branch+`}`)
return
}
fmt.Println("pull success")
fmt.Fprintf(writer, `{"code":0,"branch":`+branch+`}`)
}
func main(){
fmt.Println(`start in 0.0.0.0:8087`)
http.HandleFunc("/adlieadnjsc", handlePost)
http.ListenAndServe("0.0.0.0:8087", nil)
}
以上就结束了。
早睡早起身体好!!!