Skip to content

Commit

Permalink
Merge pull request #9868 from tangruotian/issue_9797
Browse files Browse the repository at this point in the history
feat: 构建机的定时请求合并为一个ask请求 #9797
  • Loading branch information
bkci-bot authored Jan 4, 2024
2 parents aaf9b04 + ff7bd32 commit 888c9dd
Show file tree
Hide file tree
Showing 50 changed files with 1,384 additions and 690 deletions.
51 changes: 26 additions & 25 deletions src/agent/agent/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ BINDIR := $(CURDIR)/bin
CMDDIR := $(CURDIR)/src/cmd
BuildTime := $(shell date '+%Y-%m-%d.%H:%M:%S%Z')
GitCommit := $(shell git rev-parse HEAD)
AGENT_VERSION=v1.12.0-beta.39
# 出包时通过变量写入为具体的版本号,需要符合如下写法
AGENT_VERSION=v0.0.0-beta.0
BUILD_FLAGS := -ldflags="-w -s -X github.com/TencentBlueKing/bk-ci/agent/src/pkg/config.BuildTime=$(BuildTime) \
-X github.com/TencentBlueKing/bk-ci/agent/src/pkg/config.GitCommit=$(GitCommit) -X github.com/TencentBlueKing/bk-ci/agent/src/pkg/config.AgentVersion=$(AGENT_VERSION)"

Expand Down Expand Up @@ -38,64 +39,64 @@ macos_no_cgo: build_macos_no_cgo build_macos_arm64_no_cgo

build_linux: test clean i18nfilegen
mkdir -p $(BINDIR)
GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build ${BUILD_FLAGS} -o $(BINDIR)/devopsDaemon_linux $(CMDDIR)/daemon/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/devopsDaemon_linux $(CMDDIR)/daemon/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/devopsAgent_linux $(CMDDIR)/agent/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build ${BUILD_FLAGS} -o $(BINDIR)/upgrader_linux $(CMDDIR)/upgrader/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build ${BUILD_FLAGS} -o $(BINDIR)/installer_linux $(CMDDIR)/installer/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/upgrader_linux $(CMDDIR)/upgrader/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/installer_linux $(CMDDIR)/installer/main.go
ls -la $(BINDIR)
build_linux_arm64: test clean i18nfilegen
mkdir -p $(BINDIR)
GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build ${BUILD_FLAGS} -o $(BINDIR)/devopsDaemon_linux_arm64 $(CMDDIR)/daemon/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/devopsDaemon_linux_arm64 $(CMDDIR)/daemon/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/devopsAgent_linux_arm64 $(CMDDIR)/agent/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build ${BUILD_FLAGS} -o $(BINDIR)/upgrader_linux_arm64 $(CMDDIR)/upgrader/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build ${BUILD_FLAGS} -o $(BINDIR)/installer_linux_arm64 $(CMDDIR)/installer/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/upgrader_linux_arm64 $(CMDDIR)/upgrader/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/installer_linux_arm64 $(CMDDIR)/installer/main.go
ls -la $(BINDIR)
build_linux_mips64: test clean i18nfilegen
mkdir -p $(BINDIR)
GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build ${BUILD_FLAGS} -o $(BINDIR)/devopsDaemon_linux_mips64 $(CMDDIR)/daemon/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/devopsDaemon_linux_mips64 $(CMDDIR)/daemon/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/devopsAgent_linux_mips64 $(CMDDIR)/agent/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build ${BUILD_FLAGS} -o $(BINDIR)/upgrader_linux_mips64 $(CMDDIR)/upgrader/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build ${BUILD_FLAGS} -o $(BINDIR)/installer_linux_mips64 $(CMDDIR)/installer/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/upgrader_linux_mips64 $(CMDDIR)/upgrader/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/installer_linux_mips64 $(CMDDIR)/installer/main.go
ls -la $(BINDIR)

# Telegraf 的 cpu和diskio 插件采集使用的 shirou 包需要开启cgo才可以在darwin情况下采集成功
build_macos: test clean i18nfilegen
mkdir -p $(BINDIR)
GO111MODULE=on CGO_ENABLED=1 GOOS=darwin GOARCH=amd64 go build ${BUILD_FLAGS} -o $(BINDIR)/devopsDaemon_macos $(CMDDIR)/daemon/main.go
GO111MODULE=on CGO_ENABLED=1 GOOS=darwin GOARCH=amd64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/devopsDaemon_macos $(CMDDIR)/daemon/main.go
GO111MODULE=on CGO_ENABLED=1 GOOS=darwin GOARCH=amd64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/devopsAgent_macos $(CMDDIR)/agent/main.go
GO111MODULE=on CGO_ENABLED=1 GOOS=darwin GOARCH=amd64 go build ${BUILD_FLAGS} -o $(BINDIR)/upgrader_macos $(CMDDIR)/upgrader/main.go
GO111MODULE=on CGO_ENABLED=1 GOOS=darwin GOARCH=amd64 go build ${BUILD_FLAGS} -o $(BINDIR)/installer_macos $(CMDDIR)/installer/main.go
GO111MODULE=on CGO_ENABLED=1 GOOS=darwin GOARCH=amd64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/upgrader_macos $(CMDDIR)/upgrader/main.go
GO111MODULE=on CGO_ENABLED=1 GOOS=darwin GOARCH=amd64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/installer_macos $(CMDDIR)/installer/main.go
ls -la $(BINDIR)
build_macos_arm64: test clean i18nfilegen
mkdir -p $(BINDIR)
GO111MODULE=on CGO_ENABLED=1 GOOS=darwin GOARCH=arm64 go build ${BUILD_FLAGS} -o $(BINDIR)/devopsDaemon_macos_arm64 $(CMDDIR)/daemon/main.go
GO111MODULE=on CGO_ENABLED=1 GOOS=darwin GOARCH=arm64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/devopsDaemon_macos_arm64 $(CMDDIR)/daemon/main.go
GO111MODULE=on CGO_ENABLED=1 GOOS=darwin GOARCH=arm64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/devopsAgent_macos_arm64 $(CMDDIR)/agent/main.go
GO111MODULE=on CGO_ENABLED=1 GOOS=darwin GOARCH=arm64 go build ${BUILD_FLAGS} -o $(BINDIR)/upgrader_macos_arm64 $(CMDDIR)/upgrader/main.go
GO111MODULE=on CGO_ENABLED=1 GOOS=darwin GOARCH=arm64 go build ${BUILD_FLAGS} -o $(BINDIR)/installer_macos_arm64 $(CMDDIR)/installer/main.go
GO111MODULE=on CGO_ENABLED=1 GOOS=darwin GOARCH=arm64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/upgrader_macos_arm64 $(CMDDIR)/upgrader/main.go
GO111MODULE=on CGO_ENABLED=1 GOOS=darwin GOARCH=arm64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/installer_macos_arm64 $(CMDDIR)/installer/main.go
ls -la $(BINDIR)

# 方便统一交叉编译,这里会提供不开启cgo的macos编译,但是其监控的 cpu和diskio 会没有数据
build_macos_no_cgo: test clean i18nfilegen
mkdir -p $(BINDIR)
GO111MODULE=on CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build ${BUILD_FLAGS} -o $(BINDIR)/devopsDaemon_macos $(CMDDIR)/daemon/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/devopsDaemon_macos $(CMDDIR)/daemon/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/devopsAgent_macos $(CMDDIR)/agent/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build ${BUILD_FLAGS} -o $(BINDIR)/upgrader_macos $(CMDDIR)/upgrader/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build ${BUILD_FLAGS} -o $(BINDIR)/installer_macos $(CMDDIR)/installer/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/upgrader_macos $(CMDDIR)/upgrader/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/installer_macos $(CMDDIR)/installer/main.go
ls -la $(BINDIR)
build_macos_arm64_no_cgo: test clean i18nfilegen
mkdir -p $(BINDIR)
GO111MODULE=on CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build ${BUILD_FLAGS} -o $(BINDIR)/devopsDaemon_macos_arm64 $(CMDDIR)/daemon/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/devopsDaemon_macos_arm64 $(CMDDIR)/daemon/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/devopsAgent_macos_arm64 $(CMDDIR)/agent/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build ${BUILD_FLAGS} -o $(BINDIR)/upgrader_macos_arm64 $(CMDDIR)/upgrader/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build ${BUILD_FLAGS} -o $(BINDIR)/installer_macos_arm64 $(CMDDIR)/installer/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/upgrader_macos_arm64 $(CMDDIR)/upgrader/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/installer_macos_arm64 $(CMDDIR)/installer/main.go
ls -la $(BINDIR)

build_windows: test clean i18nfilegen
mkdir -p $(BINDIR)
GO111MODULE=on CGO_ENABLED=0 GOOS=windows GOARCH=386 go build ${BUILD_FLAGS} -o $(BINDIR)/devopsDaemon.exe $(CMDDIR)/daemon/main_win.go
GO111MODULE=on CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/devopsDaemon.exe $(CMDDIR)/daemon/main_win.go
GO111MODULE=on CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/devopsAgent.exe $(CMDDIR)/agent/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=windows GOARCH=386 go build ${BUILD_FLAGS} -o $(BINDIR)/upgrader.exe $(CMDDIR)/upgrader/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=windows GOARCH=386 go build ${BUILD_FLAGS} -o $(BINDIR)/installer.exe $(CMDDIR)/installer/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/upgrader.exe $(CMDDIR)/upgrader/main.go
GO111MODULE=on CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -tags=${BUILD_OUT_TAG} ${BUILD_FLAGS} -o $(BINDIR)/installer.exe $(CMDDIR)/installer/main.go
ls -la $(BINDIR)

clean:
Expand Down
3 changes: 1 addition & 2 deletions src/agent/agent/internal/third_party/dep/fs/fs.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ package fs
import (
"github.com/pkg/errors"
"io"
"io/ioutil"
"os"
"path/filepath"
"runtime"
Expand Down Expand Up @@ -130,7 +129,7 @@ func CopyDir(src, dst string) error {
return errors.Wrapf(err, "cannot mkdir %s", dst)
}

entries, err := ioutil.ReadDir(src)
entries, err := os.ReadDir(src)
if err != nil {
return errors.Wrapf(err, "cannot read directory %s", dst)
}
Expand Down
6 changes: 0 additions & 6 deletions src/agent/agent/src/cmd/agent/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,6 @@ const (
func main() {
rand.Seed(time.Now().UnixNano())

defer func() {
if err := recover(); err != nil {
logs.Error("agent main panic: ", err)
}
}()

isDebug := false
if len(os.Args) == 2 {
switch os.Args[1] {
Expand Down
29 changes: 25 additions & 4 deletions src/agent/agent/src/cmd/daemon/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ package main

import (
"fmt"
"io"
"os"
"os/exec"
"path/filepath"
Expand All @@ -41,7 +42,7 @@ import (
"github.com/TencentBlueKing/bk-ci/agentcommon/logs"

"github.com/TencentBlueKing/bk-ci/agent/src/pkg/config"
"github.com/TencentBlueKing/bk-ci/agent/src/pkg/upgrade"
"github.com/TencentBlueKing/bk-ci/agent/src/pkg/constant"
"github.com/TencentBlueKing/bk-ci/agent/src/pkg/util/systemutil"
"github.com/TencentBlueKing/bk-ci/agentcommon/utils/fileutil"

Expand Down Expand Up @@ -184,18 +185,38 @@ func launch(agentPath string, isDebug bool) (*os.Process, error) {
return nil, fmt.Errorf("chmod agent file failed: %v", err)
}

// 获取 agent 的错误输出,这样有助于打印出崩溃的堆栈方便排查问题
stdErr, errstd := cmd.StderrPipe()
if errstd != nil {
logs.Error("get agent stderr pipe error", errstd)
}

if err = cmd.Start(); err != nil {
if stdErr != nil {
stdErr.Close()
}
return nil, fmt.Errorf("start agent failed: %v", err)
}

go func() {
if err := cmd.Wait(); err != nil {
if exiterr, ok := err.(*exec.ExitError); ok {
if exiterr.ExitCode() == upgrade.DAEMON_EXIT_CODE {
logs.Warnf("exit code %d daemon exit", upgrade.DAEMON_EXIT_CODE)
systemutil.ExitProcess(upgrade.DAEMON_EXIT_CODE)
if exiterr.ExitCode() == constant.DAEMON_EXIT_CODE {
logs.Warnf("exit code %d daemon exit", constant.DAEMON_EXIT_CODE)
systemutil.ExitProcess(constant.DAEMON_EXIT_CODE)
}
}
logs.Error("agent process error", err)
if errstd != nil {
return
}
defer stdErr.Close()
out, err := io.ReadAll(stdErr)
if err != nil {
logs.Error("read agent stderr out error", err)
return
}
logs.Error("agent process error out", string(out))
}
}()

Expand Down
27 changes: 26 additions & 1 deletion src/agent/agent/src/cmd/daemon/main_win.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ package main

import (
"fmt"
"io"
"os"
"os/exec"
"path/filepath"
Expand All @@ -41,6 +42,7 @@ import (
"github.com/TencentBlueKing/bk-ci/agentcommon/logs"

"github.com/TencentBlueKing/bk-ci/agent/src/pkg/config"
"github.com/TencentBlueKing/bk-ci/agent/src/pkg/constant"
"github.com/TencentBlueKing/bk-ci/agent/src/pkg/util/systemutil"
"github.com/TencentBlueKing/bk-ci/agentcommon/utils/fileutil"
"github.com/kardianos/service"
Expand Down Expand Up @@ -129,6 +131,14 @@ func watch() {
cmd := exec.Command(agentPath)
cmd.Dir = workDir

// 获取 agent 的错误输出,这样有助于打印出崩溃的堆栈方便排查问题
stdErr, errstd := cmd.StderrPipe()
if errstd != nil {
logs.Error("get agent stderr pipe error", errstd)
} else {
defer stdErr.Close()
}

logs.Info("start devops agent")
if !fileutil.Exists(agentPath) {
logs.Error("agent file: ", agentPath, " not exists")
Expand Down Expand Up @@ -156,7 +166,22 @@ func watch() {
logs.Info("devops agent started, pid: ", cmd.Process.Pid)
_, err = cmd.Process.Wait()
if err != nil {
logs.Error("process wait error", err.Error())
if exiterr, ok := err.(*exec.ExitError); ok {
if exiterr.ExitCode() == constant.DAEMON_EXIT_CODE {
logs.Warnf("exit code %d daemon exit", constant.DAEMON_EXIT_CODE)
systemutil.ExitProcess(constant.DAEMON_EXIT_CODE)
}
}
logs.Error("agent process error", err)
if errstd != nil {
return
}
out, err := io.ReadAll(stdErr)
if err != nil {
logs.Error("read agent stderr out error", err)
return
}
logs.Error("agent process error out", string(out))
}
logs.Info("agent process exited")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ import (
"encoding/json"
"fmt"
"go/format"
"io/ioutil"
"os"
"path/filepath"
"sort"
Expand Down Expand Up @@ -77,7 +76,7 @@ func main() {
g.Printf("func init(){\n")

// 读取用户配置的国际化文件
files, err := ioutil.ReadDir(i18nFileDir)
files, err := os.ReadDir(i18nFileDir)
if err != nil {
fmt.Fprintf(os.Stderr, "read i18ndir error %s \n", err.Error())
exit()
Expand Down
105 changes: 92 additions & 13 deletions src/agent/agent/src/pkg/agent/agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,17 +28,21 @@
package agent

import (
"time"

"github.com/TencentBlueKing/bk-ci/agentcommon/logs"

"github.com/TencentBlueKing/bk-ci/agent/src/pkg/api"
"github.com/TencentBlueKing/bk-ci/agent/src/pkg/collector"
"github.com/TencentBlueKing/bk-ci/agent/src/pkg/config"
"github.com/TencentBlueKing/bk-ci/agent/src/pkg/cron"
"github.com/TencentBlueKing/bk-ci/agent/src/pkg/heartbeat"
"github.com/TencentBlueKing/bk-ci/agent/src/pkg/exiterror"
"github.com/TencentBlueKing/bk-ci/agent/src/pkg/i18n"
"github.com/TencentBlueKing/bk-ci/agent/src/pkg/imagedebug"
"github.com/TencentBlueKing/bk-ci/agent/src/pkg/job"
"github.com/TencentBlueKing/bk-ci/agent/src/pkg/pipeline"
"github.com/TencentBlueKing/bk-ci/agent/src/pkg/upgrade"
"github.com/TencentBlueKing/bk-ci/agent/src/pkg/util"
)

func Run(isDebug bool) {
Expand All @@ -55,21 +59,96 @@ func Run(isDebug bool) {
// 数据采集
go collector.DoAgentCollect()

// 心跳
go heartbeat.DoAgentHeartbeat()

// 检查升级
go upgrade.DoPollAndUpgradeAgent()

// 启动pipeline
go pipeline.Start()

// 定期清理
go cron.CleanJob()
go cron.CleanDebugContainer()

// 登录调试任务
go imagedebug.DoPullAndDebug()
initModules()

for {
doAsk()
time.Sleep(5 * time.Second)
}
}

// 初始化一些模块的初始值
func initModules() {
imagedebug.Init()
}

func doAsk() {
// Ask请求
exiterror := exitcode.GetAndResetExitError()
enable := genAskEnable()
heart, upgrad := genHeartInfoAndUpgrade(enable.Upgrade, exiterror)
result, err := api.Ask(&api.AskInfo{
Enable: enable,
Heart: heart,
Upgrade: upgrad,
})

// 每次发送完请求都判断下是否存在退出报错
doneRequestExitError := exitcode.GetAndResetExitError()
// 发送前和发送后都有需要专门打印下日志
if exiterror != nil || doneRequestExitError != nil {
if exiterror != nil && doneRequestExitError != nil {
logs.Errorf("ExitError|%s|%s", exiterror.ErrorEnum, exiterror.Message)
exitcode.Exit(doneRequestExitError)
}
if exiterror != nil {
exitcode.Exit(exiterror)
}
exitcode.Exit(doneRequestExitError)
}

job.DoPollAndBuild()
if err != nil {
logs.Error("ask request failed: ", err.Error())
return
}
if result.IsNotOk() {
logs.Error("ask request result failed: ", result.Message)
return
}
if result.AgentStatus != config.AgentStatusImportOk {
logs.Errorf("agent status [%s] not ok", result.AgentStatus)
if result.IsAgentDelete() {
logs.Warn("agent has deleted, uninstall")
upgrade.UninstallAgent()
return
}
return
}

resp := new(api.AskResp)
err = util.ParseJsonToData(result.Data, &resp)
if err != nil {
logs.Error("parse ask resp failed: ", err.Error())
return
}

// 执行各类任务
doAgentJob(enable, resp)
}

func doAgentJob(enable api.AskEnable, resp *api.AskResp) {
if resp.Heart != nil {
go agentHeartbeat(resp.Heart)
}

hasBuild := (enable.Build != api.NoneBuildType) && (resp.Build != nil)
if hasBuild {
go job.DoBuild(resp.Build)
}

if enable.Upgrade && resp.Upgrade != nil {
go upgrade.AgentUpgrade(resp.Upgrade, hasBuild)
}

if enable.Pipeline && resp.Pipeline != nil {
go pipeline.RunPipeline(resp.Pipeline)
}

if enable.DockerDebug && resp.Debug != nil {
go imagedebug.DoImageDebug(resp.Debug)
}
}
Loading

0 comments on commit 888c9dd

Please sign in to comment.