后端cid部分基本完成,待测试

This commit is contained in:
junleea 2024-07-05 11:38:59 +08:00
parent f57d9ee392
commit 77b76caf39
3 changed files with 55 additions and 37 deletions

View File

@ -3,8 +3,8 @@ package handler
import (
"bytes"
"github.com/gin-gonic/gin"
"os"
"os/exec"
"regexp"
"strconv"
"videoplayer/dao"
"videoplayer/proto"
@ -54,24 +54,28 @@ func RunCID(c *gin.Context) {
c.JSON(200, gin.H{"error": "CID not found", "code": proto.OperationFailed, "message": "failed"})
return
} else {
scriptContent := ``
str, _ := generateRandomHexString(16)
scriptName := "" + str + `.sh`
// 写入脚本
err2 := os.WriteFile(scriptName, []byte(scriptContent), 0755)
if err2 != nil {
c.JSON(200, gin.H{"error": err2.Error(), "code": proto.OperationFailed, "message": "failed"})
return
} else {
//执行脚本
cmd := exec.Command("/bin/bash", "-c", scriptName)
err3 := cmd.Run()
// 使用bytes.Buffer捕获输出
var out bytes.Buffer
cmd.Stdout = &out
dao.CreateRunLog(req.ID, authID, out.String(), err3.Error()) //添加执行日志
c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": "success"})
}
re := regexp.MustCompile(`(?i)(?:https?://|git@)[^/]+/([^/]+)/([^/]+)(?:\.git)?$`)
matches := re.FindStringSubmatch(cid.Url)
name := matches[2]
scriptContent := `#!/bin/bash
TARGET_DIR = ` + proto.CID_BASE_DIR + `/workspace` + name + `
if [ ! -d $TARGET_DIR ]; then
git clone ` + cid.Url + `
cd $TARGET_DIR/` + name + `
else
cd $TARGET_DIR/` + name + `
git pull
fi
` + cid.Script
//执行脚本
cmd := exec.Command("/bin/bash", "-c", scriptContent)
err3 := cmd.Run()
// 使用bytes.Buffer捕获输出
var out bytes.Buffer
cmd.Stdout = &out
dao.CreateRunLog(req.ID, authID, out.String(), err3.Error()) //添加执行日志
c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": "success"})
}
} else {
c.JSON(200, gin.H{"error": err.Error(), "code": proto.ParameterError, "message": "failed"})
@ -175,24 +179,28 @@ func CIDCallback(c *gin.Context) {
}
res := dao.FindCIDByIDAndToken(cid, token)
if res.ID != 0 {
scriptContent := ``
str, _ := generateRandomHexString(16)
scriptName := "" + str + `.sh`
// 写入脚本
err2 := os.WriteFile(scriptName, []byte(scriptContent), 0755)
if err2 != nil {
c.JSON(200, gin.H{"error": err2.Error(), "code": proto.OperationFailed, "message": "failed"})
return
} else {
//执行脚本
cmd := exec.Command("/bin/bash", "-c", scriptName)
err3 := cmd.Run()
// 使用bytes.Buffer捕获输出
var out bytes.Buffer
cmd.Stdout = &out
dao.CreateRunLog(cid, res.Auth_id, out.String(), err3.Error()) //添加执行日志
c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": "success"})
}
//从url获取仓库名称
re := regexp.MustCompile(`(?i)(?:https?://|git@)[^/]+/([^/]+)/([^/]+)(?:\.git)?$`)
matches := re.FindStringSubmatch(res.Url)
name := matches[2]
scriptContent := `#!/bin/bash
TARGET_DIR = ` + proto.CID_BASE_DIR + `/workspace` + name + `
if [ ! -d $TARGET_DIR ]; then
git clone ` + res.Url + `
cd $TARGET_DIR/` + name + `
else
cd $TARGET_DIR/` + name + `
git pull
fi
` + res.Script
//执行脚本
cmd := exec.Command("/bin/bash", "-c", scriptContent)
err3 := cmd.Run()
// 使用bytes.Buffer捕获输出
var out bytes.Buffer
cmd.Stdout = &out
dao.CreateRunLog(cid, res.Auth_id, out.String(), err3.Error()) //添加执行日志
c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": "success"})
} else {
c.JSON(200, gin.H{"error": "CID not found by id and token", "code": proto.OperationFailed, "message": "failed"})
return

View File

@ -4,6 +4,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/golang-jwt/jwt"
"io"
"os"
"strings"
"videoplayer/dao"
"videoplayer/handler"
@ -29,6 +30,12 @@ func main() {
defer dao.Close()
defer worker.CloseRedis()
}
func init() {
// 创建cid的目录
os.MkdirAll(proto.CID_BASE_DIR, os.ModePerm)
os.MkdirAll(proto.CID_BASE_DIR+"script", os.ModePerm)
os.MkdirAll(proto.CID_BASE_DIR+"workspace", os.ModePerm)
}
func writeLogger(c *gin.Context) {
ip := c.ClientIP()

View File

@ -15,6 +15,9 @@ const (
REIDS_DB = 2
TOKEN_SECRET = "mfjurnc_32ndj9dfhj"
// 以下是持续集成、部署的配置
CID_BASE_DIR = "/home/lijun/cid/"
)
type User struct {