114 lines
2.7 KiB
Go
114 lines
2.7 KiB
Go
// Package git_hook...
|
|
//
|
|
// Description : git_hook...
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 2021-10-13 11:11 上午
|
|
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"time"
|
|
|
|
"git.zhangdeman.cn/zhangdeman/gopkg/cmd"
|
|
|
|
"git.zhangdeman.cn/zhangdeman/git-hook/define"
|
|
"git.zhangdeman.cn/zhangdeman/gopkg/git_hook"
|
|
"git.zhangdeman.cn/zhangdeman/gopkg/util"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
var (
|
|
// CLIParamConfig ...
|
|
CLIParamConfig map[string]string
|
|
// TaskList 任务列表
|
|
TaskList []define.Task
|
|
)
|
|
|
|
func main() {
|
|
parseCLIParam()
|
|
|
|
go func() {
|
|
// 初始化配置
|
|
byteData, err := util.ReadFileContent(CLIParamConfig["config_path"] + "/task.json")
|
|
|
|
if nil != err {
|
|
panic("任务配置文件读取失败 : " + err.Error())
|
|
}
|
|
|
|
if err = json.Unmarshal(byteData, &TaskList); nil != err {
|
|
panic("任务配置文件解析失败 : " + err.Error())
|
|
}
|
|
|
|
// 每分钟自动更新一次任务
|
|
time.Sleep(60 * time.Second)
|
|
}()
|
|
|
|
router := gin.Default()
|
|
// 注册回调路由
|
|
_ = git_hook.RegisterGitHookRouter(router, func(ctx *gin.Context, hookData *git_hook.HookData) *git_hook.ResponseData {
|
|
// 检测仓库是否建立了相关任务
|
|
taskConfig, exist := getTaskConfig(hookData.Repository.Name)
|
|
if !exist {
|
|
// 没有配置相关任务
|
|
return &git_hook.ResponseData{
|
|
Code: 0,
|
|
Message: "成功接收到web hook通知, " + hookData.Repository.Name + " 没有配置任何任务, 不做处理",
|
|
Data: hookData,
|
|
}
|
|
}
|
|
|
|
if hookData.Ref != "refs/heads/master" {
|
|
// 不是master分支, 不触发相应逻辑
|
|
return &git_hook.ResponseData{
|
|
Code: 0,
|
|
Message: "成功接收到web hook通知, 非master分支,不做任何处理",
|
|
Data: hookData,
|
|
}
|
|
}
|
|
|
|
taskRunResult := cmd.Execute(cmd.Config{
|
|
WorkDir: taskConfig.WorkDir,
|
|
Command: taskConfig.Command,
|
|
Script: taskConfig.Script,
|
|
ParameterList: taskConfig.Parameter,
|
|
})
|
|
|
|
if nil != taskRunResult.Err {
|
|
return &git_hook.ResponseData{
|
|
Code: -1,
|
|
Message: "task任务执行失败 : " + taskRunResult.Err.Error(),
|
|
Data: gin.H{
|
|
"command": taskRunResult.ExecuteCommand,
|
|
"output": string(taskRunResult.Output),
|
|
},
|
|
}
|
|
}
|
|
|
|
return &git_hook.ResponseData{
|
|
Code: 0,
|
|
Message: "成功接收到web hook通知",
|
|
Data: gin.H{
|
|
"command": taskRunResult.ExecuteCommand,
|
|
"output": string(taskRunResult.Output),
|
|
},
|
|
}
|
|
})
|
|
_ = router.Run(":12590")
|
|
}
|
|
|
|
func parseCLIParam() {
|
|
paramList := []string{"config_path"}
|
|
CLIParamConfig = util.ParseCLIParameter(paramList)
|
|
}
|
|
|
|
func getTaskConfig(taskFlag string) (define.Task, bool) {
|
|
for _, item := range TaskList {
|
|
if item.Flag == taskFlag {
|
|
return item, true
|
|
}
|
|
}
|
|
return define.Task{}, false
|
|
}
|