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