gogs用Go实现webhook(二)

这里说明一下最终拉取gogs更新的执行脚本的内容。
直接上内容

目录说明

webhook
├── h5 # 仓库地址
│   └── .git
├── main.go 
├── webhook # main.go编译后的得到的
└── webhook.sh

操作说明

  1. 进入目录,执行git clone ssh://xxx.com/aa.git h5(这里需要注意的是最好用ssh来进行拉取代码,需要设置公钥)
  2. 然后执行go build .main.go编译为可执行的webhook
  3. webhookwebhook.sh设置可执行权限
  4. nohup ./webhook &后台执行,开始监听webhook
  5. 在gogos上面设置webhook。
  6. 大功告成

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)
}

以上就结束了。

早睡早起身体好!!!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容