replacer 제거
This commit is contained in:
@ -405,56 +405,43 @@ func NewClient(standalone bool) (HoustonClient, error) {
|
|||||||
unmarshal(&dr, resp.Args)
|
unmarshal(&dr, resp.Args)
|
||||||
logger.Println("args :", dr)
|
logger.Println("args :", dr)
|
||||||
|
|
||||||
if dr.Name == myname {
|
hn, _ := os.Hostname()
|
||||||
if srcdir, replacer, err := hc.prepareUpdateSelf(&dr); err == nil {
|
|
||||||
args := []string{
|
if err := hc.deploy(&dr, func(dp *protos.DeployingProgress) {
|
||||||
fmt.Sprintf("%d", os.Getpid()),
|
dp.Hostname = hn
|
||||||
srcdir,
|
dp.Name = dr.Name
|
||||||
filepath.ToSlash(os.Args[0]),
|
dp.Version = dr.Version
|
||||||
}
|
op.ReportDeployingProgress(ctx, dp)
|
||||||
args = append(args, os.Args[1:]...)
|
}); err == nil {
|
||||||
cmd := exec.Command(replacer, args...)
|
if dr.Name == "houston" {
|
||||||
if err := cmd.Start(); err != nil {
|
// houston.update 다운로드가 완료되었으므로 종료
|
||||||
logger.Println(err)
|
// 종료되고나면 스크립트가 알아서 재 실행
|
||||||
} else {
|
hc.Shutdown()
|
||||||
hc.shutdownFunc()
|
return
|
||||||
}
|
|
||||||
} else {
|
|
||||||
logger.Println(err)
|
|
||||||
}
|
}
|
||||||
|
prog := gatherDeployedPrograms(hc.config.StorageRoot, dr.Name)
|
||||||
|
hc.deploys[dr.Name] = prog
|
||||||
|
op.Refresh(ctx, hc.makeOperationQueryRequest())
|
||||||
|
|
||||||
|
op.ReportDeployingProgress(ctx, &protos.DeployingProgress{
|
||||||
|
Hostname: hn,
|
||||||
|
Name: dr.Name,
|
||||||
|
Version: dr.Version,
|
||||||
|
State: "success",
|
||||||
|
Progress: 0,
|
||||||
|
Total: 0,
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
hn, _ := os.Hostname()
|
logger.Println(err)
|
||||||
|
|
||||||
if err := hc.deploy(&dr, func(dp *protos.DeployingProgress) {
|
op.ReportDeployingProgress(ctx, &protos.DeployingProgress{
|
||||||
dp.Hostname = hn
|
Hostname: hn,
|
||||||
dp.Name = dr.Name
|
Name: dr.Name,
|
||||||
dp.Version = dr.Version
|
Version: dr.Version,
|
||||||
op.ReportDeployingProgress(ctx, dp)
|
State: "fail:" + err.Error(),
|
||||||
}); err == nil {
|
Progress: 0,
|
||||||
prog := gatherDeployedPrograms(hc.config.StorageRoot, dr.Name)
|
Total: 0,
|
||||||
hc.deploys[dr.Name] = prog
|
})
|
||||||
op.Refresh(ctx, hc.makeOperationQueryRequest())
|
|
||||||
|
|
||||||
op.ReportDeployingProgress(ctx, &protos.DeployingProgress{
|
|
||||||
Hostname: hn,
|
|
||||||
Name: dr.Name,
|
|
||||||
Version: dr.Version,
|
|
||||||
State: "success",
|
|
||||||
Progress: 0,
|
|
||||||
Total: 0,
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
logger.Println(err)
|
|
||||||
|
|
||||||
op.ReportDeployingProgress(ctx, &protos.DeployingProgress{
|
|
||||||
Hostname: hn,
|
|
||||||
Name: dr.Name,
|
|
||||||
Version: dr.Version,
|
|
||||||
State: "fail:" + err.Error(),
|
|
||||||
Progress: 0,
|
|
||||||
Total: 0,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case shared.Withdraw:
|
case shared.Withdraw:
|
||||||
|
|||||||
@ -282,57 +282,9 @@ func copyfile(src, dst string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (hc *houstonClient) prepareUpdateSelf(req *shared.DeployRequest) (srcdir string, replacer string, err error) {
|
|
||||||
// 내가 스스로 업데이트
|
|
||||||
// 다운로드 받고 압축 푼 다음에 교체용 프로세스 시작
|
|
||||||
tempdir, err := os.MkdirTemp(os.TempDir(), "*")
|
|
||||||
if err != nil {
|
|
||||||
return "", "", err
|
|
||||||
}
|
|
||||||
fname, err := download(tempdir, hc.makeDownloadUrl(req.Url), req.AccessToken, nil)
|
|
||||||
if err != nil {
|
|
||||||
return "", "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
switch path.Ext(fname) {
|
|
||||||
case ".zip":
|
|
||||||
err = unzip(fname)
|
|
||||||
case ".tar":
|
|
||||||
err = untar(fname)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return "", "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
// houston version 파일
|
|
||||||
err = os.WriteFile(path.Join(path.Dir(fname), "@version"), []byte(req.Version), 0644)
|
|
||||||
if err != nil {
|
|
||||||
return "", "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
selfname, _ := os.Executable()
|
|
||||||
srcreplacer := path.Join(path.Dir(fname), "replacer") + path.Ext(selfname)
|
|
||||||
replacer = "./" + filepath.ToSlash("replacer"+path.Ext(selfname))
|
|
||||||
err = copyfile(srcreplacer, replacer)
|
|
||||||
if err == nil {
|
|
||||||
err = os.Chmod(replacer, 0775)
|
|
||||||
}
|
|
||||||
|
|
||||||
// replacer먼저 가져옴
|
|
||||||
return filepath.ToSlash(tempdir), replacer, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (hc *houstonClient) deploy(req *shared.DeployRequest, cb func(*protos.DeployingProgress)) (err error) {
|
func (hc *houstonClient) deploy(req *shared.DeployRequest, cb func(*protos.DeployingProgress)) (err error) {
|
||||||
logger.Println("start deploying")
|
logger.Println("start deploying")
|
||||||
|
|
||||||
defer func() {
|
|
||||||
if req.Name == "houston" && err == nil {
|
|
||||||
// houston.update 다운로드가 완료되었으므로 종료
|
|
||||||
// 종료되고나면 스크립트가 알아서 재 실행
|
|
||||||
hc.Shutdown()
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
var root string
|
var root string
|
||||||
if req.Name == "houston" {
|
if req.Name == "houston" {
|
||||||
// houston은 버전없이 houston.update폴더로 다운로드
|
// houston은 버전없이 houston.update폴더로 다운로드
|
||||||
|
|||||||
@ -10,19 +10,7 @@ go mod tidy
|
|||||||
|
|
||||||
go build -ldflags="-s -w" -tags=client .
|
go build -ldflags="-s -w" -tags=client .
|
||||||
|
|
||||||
cp houston .\replacer\houston
|
|
||||||
cp config.json .\replacer\config.json
|
|
||||||
|
|
||||||
cd replacer
|
|
||||||
go build -ldflags="-s -w" .
|
|
||||||
|
|
||||||
Compress-Archive -Path replacer -DestinationPath houston.zip -Force
|
|
||||||
Compress-Archive -Path config.json -Update -DestinationPath houston.zip
|
Compress-Archive -Path config.json -Update -DestinationPath houston.zip
|
||||||
Compress-Archive -Path houston -Update -DestinationPath houston.zip
|
Compress-Archive -Path houston -Update -DestinationPath houston.zip
|
||||||
|
|
||||||
del houston
|
|
||||||
del config.json
|
|
||||||
del replacer
|
|
||||||
|
|
||||||
mv houston.zip ..\houston.zip
|
|
||||||
cd ..
|
|
||||||
|
|||||||
Reference in New Issue
Block a user