mirror of
https://gitee.com/goploy/goploy.git
synced 2024-12-04 13:11:28 +08:00
A symlink backup number
This commit is contained in:
parent
442b41becb
commit
f9678c5831
@ -185,6 +185,7 @@ func (Project) Add(gp *core.Goploy) *core.Response {
|
|||||||
Environment uint8 `json:"environment" validate:"required"`
|
Environment uint8 `json:"environment" validate:"required"`
|
||||||
Branch string `json:"branch" validate:"required"`
|
Branch string `json:"branch" validate:"required"`
|
||||||
SymlinkPath string `json:"symlinkPath"`
|
SymlinkPath string `json:"symlinkPath"`
|
||||||
|
SymlinkBackupNumber uint8 `json:"symlinkBackupNumber"`
|
||||||
Review uint8 `json:"review"`
|
Review uint8 `json:"review"`
|
||||||
ReviewURL string `json:"reviewURL"`
|
ReviewURL string `json:"reviewURL"`
|
||||||
AfterPullScriptMode string `json:"afterPullScriptMode"`
|
AfterPullScriptMode string `json:"afterPullScriptMode"`
|
||||||
@ -215,6 +216,7 @@ func (Project) Add(gp *core.Goploy) *core.Response {
|
|||||||
Environment: reqData.Environment,
|
Environment: reqData.Environment,
|
||||||
Branch: reqData.Branch,
|
Branch: reqData.Branch,
|
||||||
SymlinkPath: reqData.SymlinkPath,
|
SymlinkPath: reqData.SymlinkPath,
|
||||||
|
SymlinkBackupNumber: reqData.SymlinkBackupNumber,
|
||||||
Review: reqData.Review,
|
Review: reqData.Review,
|
||||||
ReviewURL: reqData.ReviewURL,
|
ReviewURL: reqData.ReviewURL,
|
||||||
AfterPullScriptMode: reqData.AfterPullScriptMode,
|
AfterPullScriptMode: reqData.AfterPullScriptMode,
|
||||||
@ -278,6 +280,7 @@ func (Project) Edit(gp *core.Goploy) *core.Response {
|
|||||||
URL string `json:"url"`
|
URL string `json:"url"`
|
||||||
Path string `json:"path"`
|
Path string `json:"path"`
|
||||||
SymlinkPath string `json:"symlinkPath"`
|
SymlinkPath string `json:"symlinkPath"`
|
||||||
|
SymlinkBackupNumber uint8 `json:"symlinkBackupNumber"`
|
||||||
Review uint8 `json:"review"`
|
Review uint8 `json:"review"`
|
||||||
ReviewURL string `json:"reviewURL"`
|
ReviewURL string `json:"reviewURL"`
|
||||||
Environment uint8 `json:"environment"`
|
Environment uint8 `json:"environment"`
|
||||||
@ -313,6 +316,7 @@ func (Project) Edit(gp *core.Goploy) *core.Response {
|
|||||||
Environment: reqData.Environment,
|
Environment: reqData.Environment,
|
||||||
Branch: reqData.Branch,
|
Branch: reqData.Branch,
|
||||||
SymlinkPath: reqData.SymlinkPath,
|
SymlinkPath: reqData.SymlinkPath,
|
||||||
|
SymlinkBackupNumber: reqData.SymlinkBackupNumber,
|
||||||
Review: reqData.Review,
|
Review: reqData.Review,
|
||||||
ReviewURL: reqData.ReviewURL,
|
ReviewURL: reqData.ReviewURL,
|
||||||
AfterPullScriptMode: reqData.AfterPullScriptMode,
|
AfterPullScriptMode: reqData.AfterPullScriptMode,
|
||||||
|
@ -19,6 +19,7 @@ type Project struct {
|
|||||||
Environment uint8 `json:"environment"`
|
Environment uint8 `json:"environment"`
|
||||||
Branch string `json:"branch"`
|
Branch string `json:"branch"`
|
||||||
SymlinkPath string `json:"symlinkPath"`
|
SymlinkPath string `json:"symlinkPath"`
|
||||||
|
SymlinkBackupNumber uint8 `json:"symlinkBackupNumber"`
|
||||||
Review uint8 `json:"review"`
|
Review uint8 `json:"review"`
|
||||||
ReviewURL string `json:"reviewURL"`
|
ReviewURL string `json:"reviewURL"`
|
||||||
AfterPullScriptMode string `json:"afterPullScriptMode"`
|
AfterPullScriptMode string `json:"afterPullScriptMode"`
|
||||||
@ -77,6 +78,7 @@ func (p Project) AddRow() (int64, error) {
|
|||||||
"environment",
|
"environment",
|
||||||
"branch",
|
"branch",
|
||||||
"symlink_path",
|
"symlink_path",
|
||||||
|
"symlink_backup_number",
|
||||||
"review",
|
"review",
|
||||||
"review_url",
|
"review_url",
|
||||||
"after_pull_script_mode",
|
"after_pull_script_mode",
|
||||||
@ -96,6 +98,7 @@ func (p Project) AddRow() (int64, error) {
|
|||||||
p.Environment,
|
p.Environment,
|
||||||
p.Branch,
|
p.Branch,
|
||||||
p.SymlinkPath,
|
p.SymlinkPath,
|
||||||
|
p.SymlinkBackupNumber,
|
||||||
p.Review,
|
p.Review,
|
||||||
p.ReviewURL,
|
p.ReviewURL,
|
||||||
p.AfterPullScriptMode,
|
p.AfterPullScriptMode,
|
||||||
@ -127,6 +130,7 @@ func (p Project) EditRow() error {
|
|||||||
"environment": p.Environment,
|
"environment": p.Environment,
|
||||||
"branch": p.Branch,
|
"branch": p.Branch,
|
||||||
"symlink_path": p.SymlinkPath,
|
"symlink_path": p.SymlinkPath,
|
||||||
|
"symlink_backup_number": p.SymlinkBackupNumber,
|
||||||
"review": p.Review,
|
"review": p.Review,
|
||||||
"review_url": p.ReviewURL,
|
"review_url": p.ReviewURL,
|
||||||
"after_pull_script_mode": p.AfterPullScriptMode,
|
"after_pull_script_mode": p.AfterPullScriptMode,
|
||||||
@ -240,6 +244,7 @@ func (p Project) GetList(pagination Pagination) (Projects, error) {
|
|||||||
environment,
|
environment,
|
||||||
branch,
|
branch,
|
||||||
symlink_path,
|
symlink_path,
|
||||||
|
symlink_backup_number,
|
||||||
review,
|
review,
|
||||||
review_url,
|
review_url,
|
||||||
after_pull_script_mode,
|
after_pull_script_mode,
|
||||||
@ -287,6 +292,7 @@ func (p Project) GetList(pagination Pagination) (Projects, error) {
|
|||||||
&project.Environment,
|
&project.Environment,
|
||||||
&project.Branch,
|
&project.Branch,
|
||||||
&project.SymlinkPath,
|
&project.SymlinkPath,
|
||||||
|
&project.SymlinkBackupNumber,
|
||||||
&project.Review,
|
&project.Review,
|
||||||
&project.ReviewURL,
|
&project.ReviewURL,
|
||||||
&project.AfterPullScriptMode,
|
&project.AfterPullScriptMode,
|
||||||
@ -395,7 +401,32 @@ func (p Project) GetUserProjectList() (Projects, error) {
|
|||||||
func (p Project) GetData() (Project, error) {
|
func (p Project) GetData() (Project, error) {
|
||||||
var project Project
|
var project Project
|
||||||
err := sq.
|
err := sq.
|
||||||
Select("id, namespace_id, name, repo_type, url, path, environment, branch, symlink_path, review, review_url, after_pull_script_mode, after_pull_script, after_deploy_script_mode, after_deploy_script, rsync_option, auto_deploy, deploy_state, notify_type, notify_target, project.last_publish_token, insert_time, update_time").
|
Select(`
|
||||||
|
id,
|
||||||
|
namespace_id,
|
||||||
|
name,
|
||||||
|
repo_type,
|
||||||
|
url,
|
||||||
|
path,
|
||||||
|
environment,
|
||||||
|
branch,
|
||||||
|
symlink_path,
|
||||||
|
symlink_backup_number,
|
||||||
|
review,
|
||||||
|
review_url,
|
||||||
|
after_pull_script_mode,
|
||||||
|
after_pull_script,
|
||||||
|
after_deploy_script_mode,
|
||||||
|
after_deploy_script,
|
||||||
|
rsync_option,
|
||||||
|
auto_deploy,
|
||||||
|
deploy_state,
|
||||||
|
notify_type,
|
||||||
|
notify_target,
|
||||||
|
project.
|
||||||
|
last_publish_token,
|
||||||
|
insert_time,
|
||||||
|
update_time`).
|
||||||
From(projectTable).
|
From(projectTable).
|
||||||
Where(sq.Eq{"id": p.ID}).
|
Where(sq.Eq{"id": p.ID}).
|
||||||
RunWith(DB).
|
RunWith(DB).
|
||||||
@ -410,6 +441,7 @@ func (p Project) GetData() (Project, error) {
|
|||||||
&project.Environment,
|
&project.Environment,
|
||||||
&project.Branch,
|
&project.Branch,
|
||||||
&project.SymlinkPath,
|
&project.SymlinkPath,
|
||||||
|
&project.SymlinkBackupNumber,
|
||||||
&project.Review,
|
&project.Review,
|
||||||
&project.ReviewURL,
|
&project.ReviewURL,
|
||||||
&project.AfterPullScriptMode,
|
&project.AfterPullScriptMode,
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
ALTER TABLE `goploy`.`project`
|
ALTER TABLE `goploy`.`project`
|
||||||
ADD COLUMN `repo_type` varchar(255) NOT NULL DEFAULT '' COMMENT 'git | svn' AFTER `name`;
|
ADD COLUMN `repo_type` varchar(255) NOT NULL DEFAULT '' COMMENT 'git | svn' AFTER `name`
|
||||||
|
ADD COLUMN `symlink_backup_number` tinyint UNSIGNED NOT NULL DEFAULT 0 COMMENT 'symlink backup number' AFTER `symlink_path`;
|
||||||
|
|
||||||
UPDATE `goploy`.`project` SET `repo_type` = 'git';
|
UPDATE `goploy`.`project` SET `repo_type` = 'git', `symlink_backup_number` = 10;
|
@ -17,9 +17,11 @@ CREATE TABLE IF NOT EXISTS `project` (
|
|||||||
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
`namespace_id` int(10) UNSIGNED NOT NULL DEFAULT 0,
|
`namespace_id` int(10) UNSIGNED NOT NULL DEFAULT 0,
|
||||||
`name` varchar(255) NOT NULL DEFAULT '' COMMENT 'project name',
|
`name` varchar(255) NOT NULL DEFAULT '' COMMENT 'project name',
|
||||||
|
`repo_type` varchar(255) NOT NULL DEFAULT '' COMMENT 'repository type (git | svn)',
|
||||||
`url` varchar(255) NOT NULL DEFAULT '' COMMENT 'repository url',
|
`url` varchar(255) NOT NULL DEFAULT '' COMMENT 'repository url',
|
||||||
`path` varchar(255) NOT NULL DEFAULT '' COMMENT 'project deploy path',
|
`path` varchar(255) NOT NULL DEFAULT '' COMMENT 'project deploy path',
|
||||||
`symlink_path` varchar(255) NOT NULL DEFAULT '' COMMENT '(ln -sfn symlink_path/uuid project_path)',
|
`symlink_path` varchar(255) NOT NULL DEFAULT '' COMMENT '(ln -sfn symlink_path/uuid project_path)',
|
||||||
|
`symlink_backup_number` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '软链备份数量',
|
||||||
`environment` tinyint(4) UNSIGNED NOT NULL DEFAULT 0 COMMENT '1.production 2.pre-release 3.test 4.development',
|
`environment` tinyint(4) UNSIGNED NOT NULL DEFAULT 0 COMMENT '1.production 2.pre-release 3.test 4.development',
|
||||||
`branch` varchar(255) NOT NULL DEFAULT 'master' COMMENT 'repository branch',
|
`branch` varchar(255) NOT NULL DEFAULT 'master' COMMENT 'repository branch',
|
||||||
`review` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '0.disable 1.enable',
|
`review` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '0.disable 1.enable',
|
||||||
|
@ -575,7 +575,7 @@ func removeExpiredBackup(project model.Project, projectServer model.ProjectServe
|
|||||||
var sshOutbuf, sshErrbuf bytes.Buffer
|
var sshOutbuf, sshErrbuf bytes.Buffer
|
||||||
session.Stdout = &sshOutbuf
|
session.Stdout = &sshOutbuf
|
||||||
session.Stderr = &sshErrbuf
|
session.Stderr = &sshErrbuf
|
||||||
if err = session.Run("cd " + project.SymlinkPath + ";ls -t | awk 'NR>10' | xargs rm -rf"); err != nil {
|
if err = session.Run("cd " + project.SymlinkPath + ";ls -t | awk 'NR>" + strconv.Itoa(int(project.SymlinkBackupNumber)) + "' | xargs rm -rf"); err != nil {
|
||||||
core.Log(core.ERROR, err.Error())
|
core.Log(core.ERROR, err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -186,7 +186,7 @@
|
|||||||
"publishReview": "Review",
|
"publishReview": "Review",
|
||||||
"reviewFooterTips": "Only members deploy projects will trigger review\n1. Go to the Deploy page for review\n2. Push to URL:http(s)://domain?custom-param=1&callback=***\n3. Access the callback value\nRepeated access callback will only be published once",
|
"reviewFooterTips": "Only members deploy projects will trigger review\n1. Go to the Deploy page for review\n2. Push to URL:http(s)://domain?custom-param=1&callback=***\n3. Access the callback value\nRepeated access callback will only be published once",
|
||||||
"symlinkLabel": "Symlink deploy",
|
"symlinkLabel": "Symlink deploy",
|
||||||
"symlinkHeaderTips": "The project synchronize to the specified directory(rsync /symlinkPath), and ln -s projectPath symlinkPath\nIt can prevent the project from external access that are being synchronized during the process of synchronizing files\nBack up the latest 10 deployment files for quick rollback\n",
|
"symlinkHeaderTips": "The project synchronize to the specified directory(rsync /symlinkPath), and ln -s projectPath symlinkPath\nIt can prevent the project from external access that are being synchronized during the process of synchronizing files\n",
|
||||||
"symlinkFooterTips": "If the deployment path already exists on the target server, please delete the directory manually(rm -rf projectPath), otherwise the symlink will fail\n",
|
"symlinkFooterTips": "If the deployment path already exists on the target server, please delete the directory manually(rm -rf projectPath), otherwise the symlink will fail\n",
|
||||||
"afterPullScriptLabel": "After pull script",
|
"afterPullScriptLabel": "After pull script",
|
||||||
"afterPullScriptTips": "The script that runs on the host server after pull\nFor example: bash after-pull-script.sh",
|
"afterPullScriptTips": "The script that runs on the host server after pull\nFor example: bash after-pull-script.sh",
|
||||||
|
@ -181,7 +181,7 @@
|
|||||||
"publishReview": "发布审核",
|
"publishReview": "发布审核",
|
||||||
"reviewFooterTips": "只有成员构建项目才会触发审核\n审核方式:\n1. 前往构建发布页面进行审核\n2. 推送到URL:http(s)://domain?custom-param=1&callback=***\n3. http get callback的值即可完成审核\n重复访问callback只会发布一次,并且发布过不会再次发布",
|
"reviewFooterTips": "只有成员构建项目才会触发审核\n审核方式:\n1. 前往构建发布页面进行审核\n2. 推送到URL:http(s)://domain?custom-param=1&callback=***\n3. http get callback的值即可完成审核\n重复访问callback只会发布一次,并且发布过不会再次发布",
|
||||||
"symlinkLabel": "软链部署(推荐)",
|
"symlinkLabel": "软链部署(推荐)",
|
||||||
"symlinkHeaderTips": "项目先同步到指定目录(rsync 软链目录),然后ln -s 部署路径 软链目录\n可以避免项目在同步传输文件的过程中,外部访问到部分正在同步的文件\n备份最近10次的部署文件,以便快速回滚\n",
|
"symlinkHeaderTips": "项目先同步到指定目录(rsync 软链目录),然后ln -s 部署路径 软链目录\n可以避免项目在同步传输文件的过程中,外部访问到部分正在同步的文件\n",
|
||||||
"symlinkFooterTips": "如果部署路径已存在在目标服务器,请手动删除该目录rm -rf 部署路径,否则软链将会不成功\n",
|
"symlinkFooterTips": "如果部署路径已存在在目标服务器,请手动删除该目录rm -rf 部署路径,否则软链将会不成功\n",
|
||||||
"afterPullScriptLabel": "拉取后运行脚本",
|
"afterPullScriptLabel": "拉取后运行脚本",
|
||||||
"afterPullScriptTips": "拉取代码后在宿主服务器运行的脚本\n运行方式:打包成一份脚本文件\n检查服务器是否安装该脚本类型(默认以bash运行)",
|
"afterPullScriptTips": "拉取代码后在宿主服务器运行的脚本\n运行方式:打包成一份脚本文件\n检查服务器是否安装该脚本类型(默认以bash运行)",
|
||||||
|
@ -390,7 +390,7 @@
|
|||||||
<el-row style="margin: 0 10px 18px; white-space: pre-line">
|
<el-row style="margin: 0 10px 18px; white-space: pre-line">
|
||||||
{{ $t('projectPage.symlinkHeaderTips') }}
|
{{ $t('projectPage.symlinkHeaderTips') }}
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-form-item label="Symlink" label-width="80px">
|
<el-form-item label="Symlink" label-width="120px">
|
||||||
<el-radio-group
|
<el-radio-group
|
||||||
v-model="formProps.symlink"
|
v-model="formProps.symlink"
|
||||||
@change="handleSymlink"
|
@change="handleSymlink"
|
||||||
@ -403,9 +403,19 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
v-show="formProps.symlink"
|
v-show="formProps.symlink"
|
||||||
:label="$t('directory')"
|
label="Backup number"
|
||||||
|
label-width="120px"
|
||||||
|
>
|
||||||
|
<el-input-number
|
||||||
|
v-model="formData.symlinkBackupNumber"
|
||||||
|
:min="1"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
v-show="formProps.symlink"
|
||||||
|
label="Directory"
|
||||||
prop="symlink_path"
|
prop="symlink_path"
|
||||||
label-width="80px"
|
label-width="120px"
|
||||||
>
|
>
|
||||||
<el-input v-model="formData.symlinkPath" readonly disabled>
|
<el-input v-model="formData.symlinkPath" readonly disabled>
|
||||||
<template #append>/uuid-version</template>
|
<template #append>/uuid-version</template>
|
||||||
@ -727,6 +737,7 @@ export default defineComponent({
|
|||||||
url: '',
|
url: '',
|
||||||
path: '',
|
path: '',
|
||||||
symlinkPath: '',
|
symlinkPath: '',
|
||||||
|
symlinkBackupNumber: 10,
|
||||||
afterPullScriptMode: '',
|
afterPullScriptMode: '',
|
||||||
afterPullScript: '',
|
afterPullScript: '',
|
||||||
afterDeployScriptMode: '',
|
afterDeployScriptMode: '',
|
||||||
|
Loading…
Reference in New Issue
Block a user