本文介紹 beego
在 coding
上如果使用 webhook 2.0
進行自動部署。
coding
平臺端的設定這裡不做介紹,不清楚的可以看文件 lhttps://open.coding.net/webhooks/
專案使用 Supervisord 部署
自動部署介面實現程式碼如下
WebHookController.go
package controllers
import (
"fmt"
"io/ioutil"
"BeeCustom/enums"
"BeeCustom/file"
"BeeCustom/utils"
)
const SECRETTOKEN = "your code"
// 自動部署介面控制器
type WebHookController struct {
BaseController
}
func (c *WebHookController) Get() {
signature := c.Ctx.Request.Header.Get("X-Coding-Signature")
content, err := ioutil.ReadAll(c.Ctx.Request.Body)
if err != nil {
utils.LogDebug(fmt.Sprintf("c.Ctx.Request.Body.Read:%v", err))
}
sha1 := enums.Hmac(SECRETTOKEN, content)
calculateSignature := "sha1=" + sha1
if calculateSignature == signature {
enums.Cmd("cd", "", []string{"/root/go/src/BeeCustom"})
enums.Cmd("git", "", []string{"pull"})
enums.Cmd("bee", "", []string{"pack"})
if !file.IsExist("/root/go/src/BeeCustom/BeeCustom.tar.gz") {
utils.LogDebug("/root/go/src/BeeCustom/BeeCustom.tar.gz exist")
} else {
enums.Cmd("tar", "y", []string{"-zxvf", "BeeCustom.tar.gz"})
enums.Cmd("rm", "y", []string{"/root/go/src/BeeCustom/BeeCustom.tar.gz"})
utils.LogDebug("tar BeeCustom.tar.gz success")
}
enums.Cmd("cd", "", []string{"/etc/supervisord.conf.d"})
enums.Cmd("supervisorctl", "", []string{"restart", "beepkg"})
}
c.ServeJSON()
}
公用方法檔案
enums/common.go
......
// hmac 加密
func Hmac(key string, data []byte) string {
hmac := hmac.New(sha1.New, []byte(key))
hmac.Write(data)
return hex.EncodeToString(hmac.Sum([]byte("")))
}
func Cmd(action string, arg []string) {
cmd := exec.Command(action, arg...)
if len(input) > 0 {
cmd.Stdin = strings.NewReader(input)
}
var out bytes.Buffer
var stderr bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &stderr
err := cmd.Run()
if err != nil {
utils.LogDebug(fmt.Sprintf("cmd:%v:%v--%v --%v", err, action, arg, stderr.String()))
}
}
檔案處理相關方法
file/file.go
......
// 判斷所給路徑檔案/資料夾是否存在(返回true是存在)
func IsExist(path string) bool {
_, err := os.Stat(path) //os.Stat獲取檔案資訊
if err != nil {
if os.IsExist(err) {
return true
}
return false
}
return true
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結