clouddreamai-cicd-setup 1.0.5 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +13 -2
- package/dist/cli.js.map +1 -1
- package/dist/utils/package-helper.d.ts +26 -0
- package/dist/utils/package-helper.d.ts.map +1 -0
- package/dist/utils/package-helper.js +176 -0
- package/dist/utils/package-helper.js.map +1 -0
- package/package.json +1 -1
- package/templates/gitlab-ci/nestjs-gitlab.yml +66 -11
- package/templates/gitlab-ci/nestjs.yml +217 -5
- package/templates/gitlab-ci/vue-gitlab.yml +217 -5
- package/templates/gitlab-ci/vue.yml +217 -5
package/dist/cli.js
CHANGED
|
@@ -48,6 +48,7 @@ const prompts_1 = require("./utils/prompts");
|
|
|
48
48
|
const gitlab_client_1 = require("./core/gitlab-client");
|
|
49
49
|
const variables_1 = require("./core/variables");
|
|
50
50
|
const template_1 = require("./utils/template");
|
|
51
|
+
const package_helper_1 = require("./utils/package-helper");
|
|
51
52
|
const path = __importStar(require("path"));
|
|
52
53
|
const fs_1 = require("fs");
|
|
53
54
|
// 读取 package.json 获取版本号
|
|
@@ -77,7 +78,17 @@ program
|
|
|
77
78
|
process.exit(1);
|
|
78
79
|
}
|
|
79
80
|
spinner.succeed(chalk_1.default.green(`GitLab 连接成功 (用户: ${testResult.data?.username})`));
|
|
80
|
-
// 3.
|
|
81
|
+
// 3. 检查并修复 package.json
|
|
82
|
+
spinner.start('检查 package.json scripts...');
|
|
83
|
+
const packageHelper = (0, package_helper_1.createPackageHelper)();
|
|
84
|
+
const packageResult = await packageHelper.ensureLintScripts(options.output, config.project.type);
|
|
85
|
+
if (packageResult.modified) {
|
|
86
|
+
spinner.succeed(chalk_1.default.green(`已添加 ${packageResult.addedScripts.length} 个 script: ${packageResult.addedScripts.join(', ')}`));
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
spinner.succeed(chalk_1.default.green('package.json 检查完成'));
|
|
90
|
+
}
|
|
91
|
+
// 4. 生成文件
|
|
81
92
|
spinner.start('正在生成 CI/CD 配置文件...');
|
|
82
93
|
const templateGenerator = (0, template_1.createTemplateGenerator)();
|
|
83
94
|
const generateResult = await templateGenerator.generateAll(options.output, config.project.type, config.project, config.gitlab.baseUrl, config.registry.type);
|
|
@@ -174,7 +185,7 @@ program
|
|
|
174
185
|
console.log(chalk_1.default.yellow('\n⚠️ 已取消上传变量\n'));
|
|
175
186
|
return;
|
|
176
187
|
}
|
|
177
|
-
//
|
|
188
|
+
// 7. 批量上传变量
|
|
178
189
|
spinner.start('正在上传 CI/CD 变量到 GitLab...');
|
|
179
190
|
const uploadResult = await gitlabClient.batchUpsertVariables(selectedProject, variables);
|
|
180
191
|
if (uploadResult.success.length > 0) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CloudDreamAI CI/CD Setup - package.json 辅助工具
|
|
3
|
+
* 用于检查和添加必要的 npm scripts
|
|
4
|
+
*/
|
|
5
|
+
import { ProjectType } from '../core/types';
|
|
6
|
+
/**
|
|
7
|
+
* package.json 辅助类
|
|
8
|
+
*/
|
|
9
|
+
export declare class PackageHelper {
|
|
10
|
+
/**
|
|
11
|
+
* 检查并修复 package.json 中的 lint 命令
|
|
12
|
+
*/
|
|
13
|
+
ensureLintScripts(projectDir: string, projectType: ProjectType): Promise<{
|
|
14
|
+
modified: boolean;
|
|
15
|
+
addedScripts: string[];
|
|
16
|
+
}>;
|
|
17
|
+
/**
|
|
18
|
+
* 获取需要添加的脚本
|
|
19
|
+
*/
|
|
20
|
+
private getRequiredScripts;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 创建 PackageHelper 实例
|
|
24
|
+
*/
|
|
25
|
+
export declare function createPackageHelper(): PackageHelper;
|
|
26
|
+
//# sourceMappingURL=package-helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-helper.d.ts","sourceRoot":"","sources":["../../src/utils/package-helper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;GAEG;AACH,qBAAa,aAAa;IACxB;;OAEG;IACG,iBAAiB,CACrB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAgEzD;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAyE3B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAEnD"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CloudDreamAI CI/CD Setup - package.json 辅助工具
|
|
4
|
+
* 用于检查和添加必要的 npm scripts
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.PackageHelper = void 0;
|
|
41
|
+
exports.createPackageHelper = createPackageHelper;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
/**
|
|
45
|
+
* package.json 辅助类
|
|
46
|
+
*/
|
|
47
|
+
class PackageHelper {
|
|
48
|
+
/**
|
|
49
|
+
* 检查并修复 package.json 中的 lint 命令
|
|
50
|
+
*/
|
|
51
|
+
async ensureLintScripts(projectDir, projectType) {
|
|
52
|
+
const packageJsonPath = path.join(projectDir, 'package.json');
|
|
53
|
+
if (!fs.existsSync(packageJsonPath)) {
|
|
54
|
+
console.log('\n⚠️ 未找到 package.json,跳过脚本检查\n');
|
|
55
|
+
return { modified: false, addedScripts: [] };
|
|
56
|
+
}
|
|
57
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
58
|
+
const scripts = packageJson.scripts || {};
|
|
59
|
+
const addedScripts = [];
|
|
60
|
+
let modified = false;
|
|
61
|
+
// 根据项目类型确定需要的命令
|
|
62
|
+
const requiredScripts = this.getRequiredScripts(projectType, scripts);
|
|
63
|
+
if (requiredScripts.length === 0) {
|
|
64
|
+
return { modified: false, addedScripts: [] };
|
|
65
|
+
}
|
|
66
|
+
console.log('\n📋 检查 package.json scripts...\n');
|
|
67
|
+
// 询问用户是否添加
|
|
68
|
+
const inquirer = (await Promise.resolve().then(() => __importStar(require('inquirer')))).default;
|
|
69
|
+
const { confirm } = await inquirer.prompt([
|
|
70
|
+
{
|
|
71
|
+
type: 'confirm',
|
|
72
|
+
name: 'confirm',
|
|
73
|
+
message: `检测到缺少以下推荐的 npm scripts,是否自动添加?\n${requiredScripts.map((s) => ` - ${s.name}: ${s.command}`).join('\n')}\n`,
|
|
74
|
+
default: true,
|
|
75
|
+
},
|
|
76
|
+
]);
|
|
77
|
+
if (!confirm) {
|
|
78
|
+
console.log('\n⚠️ 已跳过添加 scripts,CI/CD 将使用智能检测\n');
|
|
79
|
+
return { modified: false, addedScripts: [] };
|
|
80
|
+
}
|
|
81
|
+
// 添加缺失的脚本
|
|
82
|
+
for (const script of requiredScripts) {
|
|
83
|
+
packageJson.scripts[script.name] = script.command;
|
|
84
|
+
addedScripts.push(script.name);
|
|
85
|
+
modified = true;
|
|
86
|
+
}
|
|
87
|
+
if (modified) {
|
|
88
|
+
// 备份原文件
|
|
89
|
+
const backupPath = `${packageJsonPath}.backup`;
|
|
90
|
+
fs.copyFileSync(packageJsonPath, backupPath);
|
|
91
|
+
// 写入更新后的 package.json
|
|
92
|
+
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n', 'utf-8');
|
|
93
|
+
console.log(`\n✅ 已添加 ${addedScripts.length} 个 script`);
|
|
94
|
+
console.log(` 备份文件: ${backupPath}\n`);
|
|
95
|
+
}
|
|
96
|
+
return { modified, addedScripts };
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* 获取需要添加的脚本
|
|
100
|
+
*/
|
|
101
|
+
getRequiredScripts(projectType, existingScripts) {
|
|
102
|
+
const required = [];
|
|
103
|
+
// NestJS 项目
|
|
104
|
+
if (projectType === 'nestjs' || projectType === 'node') {
|
|
105
|
+
// 检查是否有 lint:check
|
|
106
|
+
if (!existingScripts['lint:check']) {
|
|
107
|
+
// 如果有 lint,基于它创建 lint:check
|
|
108
|
+
if (existingScripts['lint']) {
|
|
109
|
+
const lintCommand = existingScripts['lint'];
|
|
110
|
+
// 移除 --fix 参数
|
|
111
|
+
const checkCommand = lintCommand.replace(/\s+--fix\s*$/, '').trim();
|
|
112
|
+
required.push({
|
|
113
|
+
name: 'lint:check',
|
|
114
|
+
command: checkCommand,
|
|
115
|
+
description: 'ESLint 检查(不自动修复)',
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
// 默认 NestJS lint 命令
|
|
120
|
+
required.push({
|
|
121
|
+
name: 'lint:check',
|
|
122
|
+
command: 'eslint "{src,apps,libs,test}/**/*.ts"',
|
|
123
|
+
description: 'ESLint 检查',
|
|
124
|
+
});
|
|
125
|
+
required.push({
|
|
126
|
+
name: 'lint',
|
|
127
|
+
command: 'eslint "{src,apps,libs,test}/**/*.ts" --fix',
|
|
128
|
+
description: 'ESLint 检查并自动修复',
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Vue/React 项目
|
|
134
|
+
if (projectType === 'vue' || projectType === 'react') {
|
|
135
|
+
// 检查是否有 type-check
|
|
136
|
+
if (!existingScripts['type-check']) {
|
|
137
|
+
if (projectType === 'vue') {
|
|
138
|
+
required.push({
|
|
139
|
+
name: 'type-check',
|
|
140
|
+
command: 'vue-tsc --noEmit',
|
|
141
|
+
description: 'TypeScript 类型检查',
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
required.push({
|
|
146
|
+
name: 'type-check',
|
|
147
|
+
command: 'tsc --noEmit',
|
|
148
|
+
description: 'TypeScript 类型检查',
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// 如果没有 lint:check 也没有 lint
|
|
153
|
+
if (!existingScripts['lint:check'] && !existingScripts['lint']) {
|
|
154
|
+
required.push({
|
|
155
|
+
name: 'lint',
|
|
156
|
+
command: 'eslint . --ext .ts,.tsx,.vue --fix',
|
|
157
|
+
description: 'ESLint 检查并自动修复',
|
|
158
|
+
});
|
|
159
|
+
required.push({
|
|
160
|
+
name: 'lint:check',
|
|
161
|
+
command: 'eslint . --ext .ts,.tsx,.vue',
|
|
162
|
+
description: 'ESLint 检查',
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return required;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
exports.PackageHelper = PackageHelper;
|
|
170
|
+
/**
|
|
171
|
+
* 创建 PackageHelper 实例
|
|
172
|
+
*/
|
|
173
|
+
function createPackageHelper() {
|
|
174
|
+
return new PackageHelper();
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=package-helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-helper.js","sourceRoot":"","sources":["../../src/utils/package-helper.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -35,7 +35,7 @@ lint:
|
|
|
35
35
|
- .npm/
|
|
36
36
|
policy: pull-push
|
|
37
37
|
before_script:
|
|
38
|
-
- apk add --no-cache git curl
|
|
38
|
+
- apk add --no-cache git curl jq
|
|
39
39
|
- git --version
|
|
40
40
|
- echo "Setting up Git authentication..."
|
|
41
41
|
- git config --global http.sslVerify false
|
|
@@ -43,7 +43,67 @@ lint:
|
|
|
43
43
|
- git config --global url."https://oauth2:${GITLAB_ACCESS_TOKEN}@{{GITLAB_HOST}}".insteadOf "https://{{GITLAB_HOST}}"
|
|
44
44
|
- npm ci --cache .npm --prefer-offline
|
|
45
45
|
script:
|
|
46
|
-
-
|
|
46
|
+
- |
|
|
47
|
+
# 智能检测并运行 lint 命令
|
|
48
|
+
echo "检测可用的 lint 命令..."
|
|
49
|
+
LINT_FAILED=0
|
|
50
|
+
|
|
51
|
+
if npm run | grep -q "lint:check"; then
|
|
52
|
+
echo "✓ 运行 npm run lint:check"
|
|
53
|
+
if ! npm run lint:check; then
|
|
54
|
+
LINT_FAILED=1
|
|
55
|
+
fi
|
|
56
|
+
elif npm run | grep -q "lint"; then
|
|
57
|
+
echo "✓ 运行 npm run lint"
|
|
58
|
+
if ! npm run lint; then
|
|
59
|
+
LINT_FAILED=1
|
|
60
|
+
fi
|
|
61
|
+
elif npm run | grep -q "type-check"; then
|
|
62
|
+
echo "✓ 运行 npm run type-check"
|
|
63
|
+
if ! npm run type-check; then
|
|
64
|
+
LINT_FAILED=1
|
|
65
|
+
fi
|
|
66
|
+
else
|
|
67
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
68
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
69
|
+
echo " - lint:check (推荐)"
|
|
70
|
+
echo " - lint"
|
|
71
|
+
echo " - type-check"
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
# 如果 lint 失败,输出友好的中文提示
|
|
75
|
+
if [ $LINT_FAILED -eq 1 ]; then
|
|
76
|
+
echo ""
|
|
77
|
+
echo "======================================================================"
|
|
78
|
+
echo "❌ 代码质量检查未通过"
|
|
79
|
+
echo "======================================================================"
|
|
80
|
+
echo ""
|
|
81
|
+
echo "📋 发现了一些代码质量问题,需要修复后才能继续部署。"
|
|
82
|
+
echo ""
|
|
83
|
+
echo "🔧 快速修复方法:"
|
|
84
|
+
echo ""
|
|
85
|
+
echo " 1. 在本地运行自动修复:"
|
|
86
|
+
echo " npm run lint"
|
|
87
|
+
echo ""
|
|
88
|
+
echo " 2. 查看具体问题:"
|
|
89
|
+
echo " npm run lint:check"
|
|
90
|
+
echo ""
|
|
91
|
+
echo " 3. 修复后提交:"
|
|
92
|
+
echo " git add ."
|
|
93
|
+
echo " git commit -m \"fix: 修复代码质量问题\""
|
|
94
|
+
echo " git push"
|
|
95
|
+
echo ""
|
|
96
|
+
echo "💡 常见问题类型:"
|
|
97
|
+
echo " - TypeScript 类型安全问题(使用了 any 类型)"
|
|
98
|
+
echo " - 未使用的变量或导入"
|
|
99
|
+
echo " - async 函数缺少 await"
|
|
100
|
+
echo " - Promise 未正确处理"
|
|
101
|
+
echo ""
|
|
102
|
+
echo "📖 详细错误信息请查看上方输出"
|
|
103
|
+
echo "======================================================================"
|
|
104
|
+
echo ""
|
|
105
|
+
exit 1
|
|
106
|
+
fi
|
|
47
107
|
only:
|
|
48
108
|
- merge_requests
|
|
49
109
|
- main
|
|
@@ -92,8 +152,6 @@ deploy_dev:
|
|
|
92
152
|
# 使用密码认证,跳过 SSH 主机密钥检查
|
|
93
153
|
- echo "StrictHostKeyChecking no" >> ~/.ssh/config
|
|
94
154
|
- chmod 600 ~/.ssh/config
|
|
95
|
-
- echo "StrictHostKeyChecking no" >> ~/.ssh/config
|
|
96
|
-
- chmod 600 ~/.ssh/config
|
|
97
155
|
script:
|
|
98
156
|
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "mkdir -p $DEPLOY_DIR"
|
|
99
157
|
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "which rsync || apk add --no-cache rsync"
|
|
@@ -102,7 +160,7 @@ deploy_dev:
|
|
|
102
160
|
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "export REGISTRY_URL='$CI_REGISTRY' && export REGISTRY_USERNAME='$CI_REGISTRY_USER' && export REGISTRY_PASSWORD='$CI_REGISTRY_PASSWORD' && export APP_PORT='$APP_PORT' && cd $DEPLOY_DIR && chmod +x ci/deploy.sh && bash ci/deploy.sh $ENV_TYPE gitlab"
|
|
103
161
|
environment:
|
|
104
162
|
name: development
|
|
105
|
-
url: {{DEV_URL}}
|
|
163
|
+
url: "{{DEV_URL}}"
|
|
106
164
|
only:
|
|
107
165
|
- develop
|
|
108
166
|
|
|
@@ -125,8 +183,6 @@ deploy_prod:
|
|
|
125
183
|
# 使用密码认证,跳过 SSH 主机密钥检查
|
|
126
184
|
- echo "StrictHostKeyChecking no" >> ~/.ssh/config
|
|
127
185
|
- chmod 600 ~/.ssh/config
|
|
128
|
-
- echo "StrictHostKeyChecking no" >> ~/.ssh/config
|
|
129
|
-
- chmod 600 ~/.ssh/config
|
|
130
186
|
script:
|
|
131
187
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "mkdir -p $DEPLOY_DIR"
|
|
132
188
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "which rsync || apk add --no-cache rsync"
|
|
@@ -135,7 +191,7 @@ deploy_prod:
|
|
|
135
191
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "export REGISTRY_URL='$CI_REGISTRY' && export REGISTRY_USERNAME='$CI_REGISTRY_USER' && export REGISTRY_PASSWORD='$CI_REGISTRY_PASSWORD' && export APP_PORT='$APP_PORT' && cd $DEPLOY_DIR && chmod +x ci/deploy.sh && bash ci/deploy.sh $ENV_TYPE gitlab"
|
|
136
192
|
environment:
|
|
137
193
|
name: production
|
|
138
|
-
url: {{PROD_URL}}
|
|
194
|
+
url: "{{PROD_URL}}"
|
|
139
195
|
only:
|
|
140
196
|
- main
|
|
141
197
|
when: manual
|
|
@@ -151,20 +207,19 @@ rollback:
|
|
|
151
207
|
APP_PORT: "{{PROD_PORT}}"
|
|
152
208
|
cache: {}
|
|
153
209
|
before_script:
|
|
154
|
-
- apk add --no-cache
|
|
210
|
+
- apk add --no-cache sshpass bash openssl
|
|
155
211
|
- mkdir -p ~/.ssh
|
|
156
212
|
- chmod 700 ~/.ssh
|
|
157
213
|
# 使用密码认证,跳过 SSH 主机密钥检查
|
|
158
214
|
- echo "StrictHostKeyChecking no" >> ~/.ssh/config
|
|
159
215
|
- chmod 600 ~/.ssh/config
|
|
160
|
-
- chmod 644 ~/.ssh/known_hosts
|
|
161
216
|
script:
|
|
162
217
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose down"
|
|
163
218
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose pull"
|
|
164
219
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose up -d"
|
|
165
220
|
environment:
|
|
166
221
|
name: production
|
|
167
|
-
url: {{PROD_URL}}
|
|
222
|
+
url: "{{PROD_URL}}"
|
|
168
223
|
when: manual
|
|
169
224
|
only:
|
|
170
225
|
- main
|
|
@@ -35,7 +35,7 @@ lint:
|
|
|
35
35
|
- .npm/
|
|
36
36
|
policy: pull-push
|
|
37
37
|
before_script:
|
|
38
|
-
- apk add --no-cache git curl
|
|
38
|
+
- apk add --no-cache git curl jq
|
|
39
39
|
- git --version
|
|
40
40
|
- echo "Setting up Git authentication..."
|
|
41
41
|
- git config --global http.sslVerify false
|
|
@@ -43,7 +43,67 @@ lint:
|
|
|
43
43
|
- git config --global url."https://oauth2:${GITLAB_ACCESS_TOKEN}@{{GITLAB_HOST}}".insteadOf "https://{{GITLAB_HOST}}"
|
|
44
44
|
- npm ci --cache .npm --prefer-offline
|
|
45
45
|
script:
|
|
46
|
-
-
|
|
46
|
+
- |
|
|
47
|
+
# 智能检测并运行 lint 命令
|
|
48
|
+
echo "检测可用的 lint 命令..."
|
|
49
|
+
LINT_FAILED=0
|
|
50
|
+
|
|
51
|
+
if npm run | grep -q "lint:check"; then
|
|
52
|
+
echo "✓ 运行 npm run lint:check"
|
|
53
|
+
if ! npm run lint:check; then
|
|
54
|
+
LINT_FAILED=1
|
|
55
|
+
fi
|
|
56
|
+
elif npm run | grep -q "lint"; then
|
|
57
|
+
echo "✓ 运行 npm run lint"
|
|
58
|
+
if ! npm run lint; then
|
|
59
|
+
LINT_FAILED=1
|
|
60
|
+
fi
|
|
61
|
+
elif npm run | grep -q "type-check"; then
|
|
62
|
+
echo "✓ 运行 npm run type-check"
|
|
63
|
+
if ! npm run type-check; then
|
|
64
|
+
LINT_FAILED=1
|
|
65
|
+
fi
|
|
66
|
+
else
|
|
67
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
68
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
69
|
+
echo " - lint:check (推荐)"
|
|
70
|
+
echo " - lint"
|
|
71
|
+
echo " - type-check"
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
# 如果 lint 失败,输出友好的中文提示
|
|
75
|
+
if [ $LINT_FAILED -eq 1 ]; then
|
|
76
|
+
echo ""
|
|
77
|
+
echo "======================================================================"
|
|
78
|
+
echo "❌ 代码质量检查未通过"
|
|
79
|
+
echo "======================================================================"
|
|
80
|
+
echo ""
|
|
81
|
+
echo "📋 发现了一些代码质量问题,需要修复后才能继续部署。"
|
|
82
|
+
echo ""
|
|
83
|
+
echo "🔧 快速修复方法:"
|
|
84
|
+
echo ""
|
|
85
|
+
echo " 1. 在本地运行自动修复:"
|
|
86
|
+
echo " npm run lint"
|
|
87
|
+
echo ""
|
|
88
|
+
echo " 2. 查看具体问题:"
|
|
89
|
+
echo " npm run lint:check"
|
|
90
|
+
echo ""
|
|
91
|
+
echo " 3. 修复后提交:"
|
|
92
|
+
echo " git add ."
|
|
93
|
+
echo " git commit -m \"fix: 修复代码质量问题\""
|
|
94
|
+
echo " git push"
|
|
95
|
+
echo ""
|
|
96
|
+
echo "💡 常见问题类型:"
|
|
97
|
+
echo " - TypeScript 类型安全问题(使用了 any 类型)"
|
|
98
|
+
echo " - 未使用的变量或导入"
|
|
99
|
+
echo " - async 函数缺少 await"
|
|
100
|
+
echo " - Promise 未正确处理"
|
|
101
|
+
echo ""
|
|
102
|
+
echo "📖 详细错误信息请查看上方输出"
|
|
103
|
+
echo "======================================================================"
|
|
104
|
+
echo ""
|
|
105
|
+
exit 1
|
|
106
|
+
fi
|
|
47
107
|
only:
|
|
48
108
|
- merge_requests
|
|
49
109
|
- main
|
|
@@ -57,10 +117,48 @@ build:
|
|
|
57
117
|
name: docker:24.0.5
|
|
58
118
|
pull_policy: if-not-present
|
|
59
119
|
before_script:
|
|
120
|
+
- |
|
|
121
|
+
# 智能检测并运行 lint 命令
|
|
122
|
+
echo "检测可用的 lint 命令..."
|
|
123
|
+
if npm run | grep -q "lint:check"; then
|
|
124
|
+
echo "✓ 运行 npm run lint:check"
|
|
125
|
+
npm run lint:check
|
|
126
|
+
elif npm run | grep -q "lint"; then
|
|
127
|
+
echo "✓ 运行 npm run lint"
|
|
128
|
+
npm run lint
|
|
129
|
+
elif npm run | grep -q "type-check"; then
|
|
130
|
+
echo "✓ 运行 npm run type-check"
|
|
131
|
+
npm run type-check
|
|
132
|
+
else
|
|
133
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
134
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
135
|
+
echo " - lint:check (推荐)"
|
|
136
|
+
echo " - lint"
|
|
137
|
+
echo " - type-check"
|
|
138
|
+
fi
|
|
60
139
|
- docker info
|
|
61
140
|
- echo "登录到Docker Hub..."
|
|
62
141
|
- echo "$DOCKER_HUB_PASSWORD" | docker login -u $DOCKER_HUB_USERNAME --password-stdin
|
|
63
142
|
script:
|
|
143
|
+
- |
|
|
144
|
+
# 智能检测并运行 lint 命令
|
|
145
|
+
echo "检测可用的 lint 命令..."
|
|
146
|
+
if npm run | grep -q "lint:check"; then
|
|
147
|
+
echo "✓ 运行 npm run lint:check"
|
|
148
|
+
npm run lint:check
|
|
149
|
+
elif npm run | grep -q "lint"; then
|
|
150
|
+
echo "✓ 运行 npm run lint"
|
|
151
|
+
npm run lint
|
|
152
|
+
elif npm run | grep -q "type-check"; then
|
|
153
|
+
echo "✓ 运行 npm run type-check"
|
|
154
|
+
npm run type-check
|
|
155
|
+
else
|
|
156
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
157
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
158
|
+
echo " - lint:check (推荐)"
|
|
159
|
+
echo " - lint"
|
|
160
|
+
echo " - type-check"
|
|
161
|
+
fi
|
|
64
162
|
- echo "尝试拉取最新镜像作为缓存..."
|
|
65
163
|
- docker pull $DOCKER_HUB_IMAGE:latest || true
|
|
66
164
|
- echo "构建Docker镜像..."
|
|
@@ -86,18 +184,56 @@ deploy_dev:
|
|
|
86
184
|
REGISTRY_TYPE: "{{REGISTRY_TYPE}}"
|
|
87
185
|
cache: {}
|
|
88
186
|
before_script:
|
|
187
|
+
- |
|
|
188
|
+
# 智能检测并运行 lint 命令
|
|
189
|
+
echo "检测可用的 lint 命令..."
|
|
190
|
+
if npm run | grep -q "lint:check"; then
|
|
191
|
+
echo "✓ 运行 npm run lint:check"
|
|
192
|
+
npm run lint:check
|
|
193
|
+
elif npm run | grep -q "lint"; then
|
|
194
|
+
echo "✓ 运行 npm run lint"
|
|
195
|
+
npm run lint
|
|
196
|
+
elif npm run | grep -q "type-check"; then
|
|
197
|
+
echo "✓ 运行 npm run type-check"
|
|
198
|
+
npm run type-check
|
|
199
|
+
else
|
|
200
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
201
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
202
|
+
echo " - lint:check (推荐)"
|
|
203
|
+
echo " - lint"
|
|
204
|
+
echo " - type-check"
|
|
205
|
+
fi
|
|
89
206
|
- apk add --no-cache sshpass bash openssl rsync
|
|
90
207
|
- mkdir -p ~/.ssh
|
|
91
208
|
- chmod 700 ~/.ssh
|
|
92
209
|
- chmod 644 ~/.ssh/known_hosts
|
|
93
210
|
script:
|
|
211
|
+
- |
|
|
212
|
+
# 智能检测并运行 lint 命令
|
|
213
|
+
echo "检测可用的 lint 命令..."
|
|
214
|
+
if npm run | grep -q "lint:check"; then
|
|
215
|
+
echo "✓ 运行 npm run lint:check"
|
|
216
|
+
npm run lint:check
|
|
217
|
+
elif npm run | grep -q "lint"; then
|
|
218
|
+
echo "✓ 运行 npm run lint"
|
|
219
|
+
npm run lint
|
|
220
|
+
elif npm run | grep -q "type-check"; then
|
|
221
|
+
echo "✓ 运行 npm run type-check"
|
|
222
|
+
npm run type-check
|
|
223
|
+
else
|
|
224
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
225
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
226
|
+
echo " - lint:check (推荐)"
|
|
227
|
+
echo " - lint"
|
|
228
|
+
echo " - type-check"
|
|
229
|
+
fi
|
|
94
230
|
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "mkdir -p $DEPLOY_DIR"
|
|
95
231
|
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "which rsync || apk add --no-cache rsync"
|
|
96
232
|
- sshpass -p "$SSH_PASSWORD" rsync -avz --delete --exclude='.git/' --exclude='node_modules/' . root@$TEST_SERVER_HOST:$DEPLOY_DIR/
|
|
97
233
|
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "export DOCKER_HUB_USERNAME='$DOCKER_HUB_USERNAME' && export DOCKER_HUB_PASSWORD='$DOCKER_HUB_PASSWORD' && export APP_PORT='$APP_PORT' && cd $DEPLOY_DIR && chmod +x ci/deploy.sh && bash ci/deploy.sh $ENV_TYPE $REGISTRY_TYPE"
|
|
98
234
|
environment:
|
|
99
235
|
name: development
|
|
100
|
-
url: {{DEV_URL}}
|
|
236
|
+
url: "{{DEV_URL}}"
|
|
101
237
|
only:
|
|
102
238
|
- develop
|
|
103
239
|
|
|
@@ -115,18 +251,56 @@ deploy_prod:
|
|
|
115
251
|
REGISTRY_TYPE: "{{REGISTRY_TYPE}}"
|
|
116
252
|
cache: {}
|
|
117
253
|
before_script:
|
|
254
|
+
- |
|
|
255
|
+
# 智能检测并运行 lint 命令
|
|
256
|
+
echo "检测可用的 lint 命令..."
|
|
257
|
+
if npm run | grep -q "lint:check"; then
|
|
258
|
+
echo "✓ 运行 npm run lint:check"
|
|
259
|
+
npm run lint:check
|
|
260
|
+
elif npm run | grep -q "lint"; then
|
|
261
|
+
echo "✓ 运行 npm run lint"
|
|
262
|
+
npm run lint
|
|
263
|
+
elif npm run | grep -q "type-check"; then
|
|
264
|
+
echo "✓ 运行 npm run type-check"
|
|
265
|
+
npm run type-check
|
|
266
|
+
else
|
|
267
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
268
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
269
|
+
echo " - lint:check (推荐)"
|
|
270
|
+
echo " - lint"
|
|
271
|
+
echo " - type-check"
|
|
272
|
+
fi
|
|
118
273
|
- apk add --no-cache sshpass bash openssl rsync
|
|
119
274
|
- mkdir -p ~/.ssh
|
|
120
275
|
- chmod 700 ~/.ssh
|
|
121
276
|
- chmod 644 ~/.ssh/known_hosts
|
|
122
277
|
script:
|
|
278
|
+
- |
|
|
279
|
+
# 智能检测并运行 lint 命令
|
|
280
|
+
echo "检测可用的 lint 命令..."
|
|
281
|
+
if npm run | grep -q "lint:check"; then
|
|
282
|
+
echo "✓ 运行 npm run lint:check"
|
|
283
|
+
npm run lint:check
|
|
284
|
+
elif npm run | grep -q "lint"; then
|
|
285
|
+
echo "✓ 运行 npm run lint"
|
|
286
|
+
npm run lint
|
|
287
|
+
elif npm run | grep -q "type-check"; then
|
|
288
|
+
echo "✓ 运行 npm run type-check"
|
|
289
|
+
npm run type-check
|
|
290
|
+
else
|
|
291
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
292
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
293
|
+
echo " - lint:check (推荐)"
|
|
294
|
+
echo " - lint"
|
|
295
|
+
echo " - type-check"
|
|
296
|
+
fi
|
|
123
297
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "mkdir -p $DEPLOY_DIR"
|
|
124
298
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "which rsync || apk add --no-cache rsync"
|
|
125
299
|
- sshpass -p "$SSH_PASSWORD" rsync -avz --delete --exclude='.git/' --exclude='node_modules/' . root@$PROD_SERVER_HOST:$DEPLOY_DIR/
|
|
126
300
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "export DOCKER_HUB_USERNAME='$DOCKER_HUB_USERNAME' && export DOCKER_HUB_PASSWORD='$DOCKER_HUB_PASSWORD' && export APP_PORT='$APP_PORT' && cd $DEPLOY_DIR && chmod +x ci/deploy.sh && bash ci/deploy.sh $ENV_TYPE $REGISTRY_TYPE"
|
|
127
301
|
environment:
|
|
128
302
|
name: production
|
|
129
|
-
url: {{PROD_URL}}
|
|
303
|
+
url: "{{PROD_URL}}"
|
|
130
304
|
only:
|
|
131
305
|
- main
|
|
132
306
|
when: manual
|
|
@@ -142,17 +316,55 @@ rollback:
|
|
|
142
316
|
APP_PORT: "{{PROD_PORT}}"
|
|
143
317
|
cache: {}
|
|
144
318
|
before_script:
|
|
319
|
+
- |
|
|
320
|
+
# 智能检测并运行 lint 命令
|
|
321
|
+
echo "检测可用的 lint 命令..."
|
|
322
|
+
if npm run | grep -q "lint:check"; then
|
|
323
|
+
echo "✓ 运行 npm run lint:check"
|
|
324
|
+
npm run lint:check
|
|
325
|
+
elif npm run | grep -q "lint"; then
|
|
326
|
+
echo "✓ 运行 npm run lint"
|
|
327
|
+
npm run lint
|
|
328
|
+
elif npm run | grep -q "type-check"; then
|
|
329
|
+
echo "✓ 运行 npm run type-check"
|
|
330
|
+
npm run type-check
|
|
331
|
+
else
|
|
332
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
333
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
334
|
+
echo " - lint:check (推荐)"
|
|
335
|
+
echo " - lint"
|
|
336
|
+
echo " - type-check"
|
|
337
|
+
fi
|
|
145
338
|
- apk add --no-cache openssh-client openssl
|
|
146
339
|
- mkdir -p ~/.ssh
|
|
147
340
|
- chmod 700 ~/.ssh
|
|
148
341
|
- chmod 644 ~/.ssh/known_hosts
|
|
149
342
|
script:
|
|
343
|
+
- |
|
|
344
|
+
# 智能检测并运行 lint 命令
|
|
345
|
+
echo "检测可用的 lint 命令..."
|
|
346
|
+
if npm run | grep -q "lint:check"; then
|
|
347
|
+
echo "✓ 运行 npm run lint:check"
|
|
348
|
+
npm run lint:check
|
|
349
|
+
elif npm run | grep -q "lint"; then
|
|
350
|
+
echo "✓ 运行 npm run lint"
|
|
351
|
+
npm run lint
|
|
352
|
+
elif npm run | grep -q "type-check"; then
|
|
353
|
+
echo "✓ 运行 npm run type-check"
|
|
354
|
+
npm run type-check
|
|
355
|
+
else
|
|
356
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
357
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
358
|
+
echo " - lint:check (推荐)"
|
|
359
|
+
echo " - lint"
|
|
360
|
+
echo " - type-check"
|
|
361
|
+
fi
|
|
150
362
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose down"
|
|
151
363
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose pull"
|
|
152
364
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose up -d"
|
|
153
365
|
environment:
|
|
154
366
|
name: production
|
|
155
|
-
url: {{PROD_URL}}
|
|
367
|
+
url: "{{PROD_URL}}"
|
|
156
368
|
when: manual
|
|
157
369
|
only:
|
|
158
370
|
- main
|
|
@@ -35,7 +35,7 @@ lint:
|
|
|
35
35
|
- .npm/
|
|
36
36
|
policy: pull-push
|
|
37
37
|
before_script:
|
|
38
|
-
- apk add --no-cache git curl
|
|
38
|
+
- apk add --no-cache git curl jq
|
|
39
39
|
- git --version
|
|
40
40
|
- echo "Setting up Git authentication..."
|
|
41
41
|
- git config --global http.sslVerify false
|
|
@@ -43,7 +43,67 @@ lint:
|
|
|
43
43
|
- git config --global url."https://oauth2:${GITLAB_ACCESS_TOKEN}@{{GITLAB_HOST}}".insteadOf "https://{{GITLAB_HOST}}"
|
|
44
44
|
- npm ci --cache .npm --prefer-offline
|
|
45
45
|
script:
|
|
46
|
-
-
|
|
46
|
+
- |
|
|
47
|
+
# 智能检测并运行 lint 命令
|
|
48
|
+
echo "检测可用的 lint 命令..."
|
|
49
|
+
LINT_FAILED=0
|
|
50
|
+
|
|
51
|
+
if npm run | grep -q "lint:check"; then
|
|
52
|
+
echo "✓ 运行 npm run lint:check"
|
|
53
|
+
if ! npm run lint:check; then
|
|
54
|
+
LINT_FAILED=1
|
|
55
|
+
fi
|
|
56
|
+
elif npm run | grep -q "lint"; then
|
|
57
|
+
echo "✓ 运行 npm run lint"
|
|
58
|
+
if ! npm run lint; then
|
|
59
|
+
LINT_FAILED=1
|
|
60
|
+
fi
|
|
61
|
+
elif npm run | grep -q "type-check"; then
|
|
62
|
+
echo "✓ 运行 npm run type-check"
|
|
63
|
+
if ! npm run type-check; then
|
|
64
|
+
LINT_FAILED=1
|
|
65
|
+
fi
|
|
66
|
+
else
|
|
67
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
68
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
69
|
+
echo " - lint:check (推荐)"
|
|
70
|
+
echo " - lint"
|
|
71
|
+
echo " - type-check"
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
# 如果 lint 失败,输出友好的中文提示
|
|
75
|
+
if [ $LINT_FAILED -eq 1 ]; then
|
|
76
|
+
echo ""
|
|
77
|
+
echo "======================================================================"
|
|
78
|
+
echo "❌ 代码质量检查未通过"
|
|
79
|
+
echo "======================================================================"
|
|
80
|
+
echo ""
|
|
81
|
+
echo "📋 发现了一些代码质量问题,需要修复后才能继续部署。"
|
|
82
|
+
echo ""
|
|
83
|
+
echo "🔧 快速修复方法:"
|
|
84
|
+
echo ""
|
|
85
|
+
echo " 1. 在本地运行自动修复:"
|
|
86
|
+
echo " npm run lint"
|
|
87
|
+
echo ""
|
|
88
|
+
echo " 2. 查看具体问题:"
|
|
89
|
+
echo " npm run lint:check"
|
|
90
|
+
echo ""
|
|
91
|
+
echo " 3. 修复后提交:"
|
|
92
|
+
echo " git add ."
|
|
93
|
+
echo " git commit -m \"fix: 修复代码质量问题\""
|
|
94
|
+
echo " git push"
|
|
95
|
+
echo ""
|
|
96
|
+
echo "💡 常见问题类型:"
|
|
97
|
+
echo " - TypeScript 类型安全问题(使用了 any 类型)"
|
|
98
|
+
echo " - 未使用的变量或导入"
|
|
99
|
+
echo " - async 函数缺少 await"
|
|
100
|
+
echo " - Promise 未正确处理"
|
|
101
|
+
echo ""
|
|
102
|
+
echo "📖 详细错误信息请查看上方输出"
|
|
103
|
+
echo "======================================================================"
|
|
104
|
+
echo ""
|
|
105
|
+
exit 1
|
|
106
|
+
fi
|
|
47
107
|
only:
|
|
48
108
|
- merge_requests
|
|
49
109
|
- main
|
|
@@ -57,11 +117,49 @@ build:
|
|
|
57
117
|
name: docker:24.0.5
|
|
58
118
|
pull_policy: if-not-present
|
|
59
119
|
before_script:
|
|
120
|
+
- |
|
|
121
|
+
# 智能检测并运行 lint 命令
|
|
122
|
+
echo "检测可用的 lint 命令..."
|
|
123
|
+
if npm run | grep -q "lint:check"; then
|
|
124
|
+
echo "✓ 运行 npm run lint:check"
|
|
125
|
+
npm run lint:check
|
|
126
|
+
elif npm run | grep -q "lint"; then
|
|
127
|
+
echo "✓ 运行 npm run lint"
|
|
128
|
+
npm run lint
|
|
129
|
+
elif npm run | grep -q "type-check"; then
|
|
130
|
+
echo "✓ 运行 npm run type-check"
|
|
131
|
+
npm run type-check
|
|
132
|
+
else
|
|
133
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
134
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
135
|
+
echo " - lint:check (推荐)"
|
|
136
|
+
echo " - lint"
|
|
137
|
+
echo " - type-check"
|
|
138
|
+
fi
|
|
60
139
|
- docker info
|
|
61
140
|
- echo "登录到 GitLab Container Registry..."
|
|
62
141
|
# 使用 GitLab CI 预定义变量登录
|
|
63
142
|
- echo "$CI_REGISTRY_PASSWORD" | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
|
|
64
143
|
script:
|
|
144
|
+
- |
|
|
145
|
+
# 智能检测并运行 lint 命令
|
|
146
|
+
echo "检测可用的 lint 命令..."
|
|
147
|
+
if npm run | grep -q "lint:check"; then
|
|
148
|
+
echo "✓ 运行 npm run lint:check"
|
|
149
|
+
npm run lint:check
|
|
150
|
+
elif npm run | grep -q "lint"; then
|
|
151
|
+
echo "✓ 运行 npm run lint"
|
|
152
|
+
npm run lint
|
|
153
|
+
elif npm run | grep -q "type-check"; then
|
|
154
|
+
echo "✓ 运行 npm run type-check"
|
|
155
|
+
npm run type-check
|
|
156
|
+
else
|
|
157
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
158
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
159
|
+
echo " - lint:check (推荐)"
|
|
160
|
+
echo " - lint"
|
|
161
|
+
echo " - type-check"
|
|
162
|
+
fi
|
|
65
163
|
- echo "尝试拉取最新镜像作为缓存..."
|
|
66
164
|
- docker pull $DOCKER_IMAGE:latest || true
|
|
67
165
|
- echo "构建Docker镜像..."
|
|
@@ -86,6 +184,25 @@ deploy_dev:
|
|
|
86
184
|
APP_PORT: "{{DEV_PORT}}"
|
|
87
185
|
cache: {}
|
|
88
186
|
before_script:
|
|
187
|
+
- |
|
|
188
|
+
# 智能检测并运行 lint 命令
|
|
189
|
+
echo "检测可用的 lint 命令..."
|
|
190
|
+
if npm run | grep -q "lint:check"; then
|
|
191
|
+
echo "✓ 运行 npm run lint:check"
|
|
192
|
+
npm run lint:check
|
|
193
|
+
elif npm run | grep -q "lint"; then
|
|
194
|
+
echo "✓ 运行 npm run lint"
|
|
195
|
+
npm run lint
|
|
196
|
+
elif npm run | grep -q "type-check"; then
|
|
197
|
+
echo "✓ 运行 npm run type-check"
|
|
198
|
+
npm run type-check
|
|
199
|
+
else
|
|
200
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
201
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
202
|
+
echo " - lint:check (推荐)"
|
|
203
|
+
echo " - lint"
|
|
204
|
+
echo " - type-check"
|
|
205
|
+
fi
|
|
89
206
|
- apk add --no-cache sshpass bash openssl rsync
|
|
90
207
|
- mkdir -p ~/.ssh
|
|
91
208
|
- chmod 700 ~/.ssh
|
|
@@ -94,6 +211,25 @@ deploy_dev:
|
|
|
94
211
|
- chmod 600 ~/.ssh/config
|
|
95
212
|
- chmod 644 ~/.ssh/known_hosts
|
|
96
213
|
script:
|
|
214
|
+
- |
|
|
215
|
+
# 智能检测并运行 lint 命令
|
|
216
|
+
echo "检测可用的 lint 命令..."
|
|
217
|
+
if npm run | grep -q "lint:check"; then
|
|
218
|
+
echo "✓ 运行 npm run lint:check"
|
|
219
|
+
npm run lint:check
|
|
220
|
+
elif npm run | grep -q "lint"; then
|
|
221
|
+
echo "✓ 运行 npm run lint"
|
|
222
|
+
npm run lint
|
|
223
|
+
elif npm run | grep -q "type-check"; then
|
|
224
|
+
echo "✓ 运行 npm run type-check"
|
|
225
|
+
npm run type-check
|
|
226
|
+
else
|
|
227
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
228
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
229
|
+
echo " - lint:check (推荐)"
|
|
230
|
+
echo " - lint"
|
|
231
|
+
echo " - type-check"
|
|
232
|
+
fi
|
|
97
233
|
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "mkdir -p $DEPLOY_DIR"
|
|
98
234
|
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "which rsync || apk add --no-cache rsync"
|
|
99
235
|
- sshpass -p "$SSH_PASSWORD" rsync -avz --delete --exclude='.git/' --exclude='node_modules/' . root@$TEST_SERVER_HOST:$DEPLOY_DIR/
|
|
@@ -101,7 +237,7 @@ deploy_dev:
|
|
|
101
237
|
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "export REGISTRY_URL='$CI_REGISTRY' && export REGISTRY_USERNAME='$CI_REGISTRY_USER' && export REGISTRY_PASSWORD='$CI_REGISTRY_PASSWORD' && export APP_PORT='$APP_PORT' && cd $DEPLOY_DIR && chmod +x ci/deploy.sh && bash ci/deploy.sh $ENV_TYPE gitlab"
|
|
102
238
|
environment:
|
|
103
239
|
name: development
|
|
104
|
-
url: {{DEV_URL}}
|
|
240
|
+
url: "{{DEV_URL}}"
|
|
105
241
|
only:
|
|
106
242
|
- develop
|
|
107
243
|
|
|
@@ -118,6 +254,25 @@ deploy_prod:
|
|
|
118
254
|
APP_PORT: "{{PROD_PORT}}"
|
|
119
255
|
cache: {}
|
|
120
256
|
before_script:
|
|
257
|
+
- |
|
|
258
|
+
# 智能检测并运行 lint 命令
|
|
259
|
+
echo "检测可用的 lint 命令..."
|
|
260
|
+
if npm run | grep -q "lint:check"; then
|
|
261
|
+
echo "✓ 运行 npm run lint:check"
|
|
262
|
+
npm run lint:check
|
|
263
|
+
elif npm run | grep -q "lint"; then
|
|
264
|
+
echo "✓ 运行 npm run lint"
|
|
265
|
+
npm run lint
|
|
266
|
+
elif npm run | grep -q "type-check"; then
|
|
267
|
+
echo "✓ 运行 npm run type-check"
|
|
268
|
+
npm run type-check
|
|
269
|
+
else
|
|
270
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
271
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
272
|
+
echo " - lint:check (推荐)"
|
|
273
|
+
echo " - lint"
|
|
274
|
+
echo " - type-check"
|
|
275
|
+
fi
|
|
121
276
|
- apk add --no-cache sshpass bash openssl rsync
|
|
122
277
|
- mkdir -p ~/.ssh
|
|
123
278
|
- chmod 700 ~/.ssh
|
|
@@ -126,6 +281,25 @@ deploy_prod:
|
|
|
126
281
|
- chmod 600 ~/.ssh/config
|
|
127
282
|
- chmod 644 ~/.ssh/known_hosts
|
|
128
283
|
script:
|
|
284
|
+
- |
|
|
285
|
+
# 智能检测并运行 lint 命令
|
|
286
|
+
echo "检测可用的 lint 命令..."
|
|
287
|
+
if npm run | grep -q "lint:check"; then
|
|
288
|
+
echo "✓ 运行 npm run lint:check"
|
|
289
|
+
npm run lint:check
|
|
290
|
+
elif npm run | grep -q "lint"; then
|
|
291
|
+
echo "✓ 运行 npm run lint"
|
|
292
|
+
npm run lint
|
|
293
|
+
elif npm run | grep -q "type-check"; then
|
|
294
|
+
echo "✓ 运行 npm run type-check"
|
|
295
|
+
npm run type-check
|
|
296
|
+
else
|
|
297
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
298
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
299
|
+
echo " - lint:check (推荐)"
|
|
300
|
+
echo " - lint"
|
|
301
|
+
echo " - type-check"
|
|
302
|
+
fi
|
|
129
303
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "mkdir -p $DEPLOY_DIR"
|
|
130
304
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "which rsync || apk add --no-cache rsync"
|
|
131
305
|
- sshpass -p "$SSH_PASSWORD" rsync -avz --delete --exclude='.git/' --exclude='node_modules/' . root@$PROD_SERVER_HOST:$DEPLOY_DIR/
|
|
@@ -133,7 +307,7 @@ deploy_prod:
|
|
|
133
307
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "export REGISTRY_URL='$CI_REGISTRY' && export REGISTRY_USERNAME='$CI_REGISTRY_USER' && export REGISTRY_PASSWORD='$CI_REGISTRY_PASSWORD' && export APP_PORT='$APP_PORT' && cd $DEPLOY_DIR && chmod +x ci/deploy.sh && bash ci/deploy.sh $ENV_TYPE gitlab"
|
|
134
308
|
environment:
|
|
135
309
|
name: production
|
|
136
|
-
url: {{PROD_URL}}
|
|
310
|
+
url: "{{PROD_URL}}"
|
|
137
311
|
only:
|
|
138
312
|
- main
|
|
139
313
|
when: manual
|
|
@@ -149,6 +323,25 @@ rollback:
|
|
|
149
323
|
APP_PORT: "{{PROD_PORT}}"
|
|
150
324
|
cache: {}
|
|
151
325
|
before_script:
|
|
326
|
+
- |
|
|
327
|
+
# 智能检测并运行 lint 命令
|
|
328
|
+
echo "检测可用的 lint 命令..."
|
|
329
|
+
if npm run | grep -q "lint:check"; then
|
|
330
|
+
echo "✓ 运行 npm run lint:check"
|
|
331
|
+
npm run lint:check
|
|
332
|
+
elif npm run | grep -q "lint"; then
|
|
333
|
+
echo "✓ 运行 npm run lint"
|
|
334
|
+
npm run lint
|
|
335
|
+
elif npm run | grep -q "type-check"; then
|
|
336
|
+
echo "✓ 运行 npm run type-check"
|
|
337
|
+
npm run type-check
|
|
338
|
+
else
|
|
339
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
340
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
341
|
+
echo " - lint:check (推荐)"
|
|
342
|
+
echo " - lint"
|
|
343
|
+
echo " - type-check"
|
|
344
|
+
fi
|
|
152
345
|
- apk add --no-cache openssh-client openssl
|
|
153
346
|
- mkdir -p ~/.ssh
|
|
154
347
|
- chmod 700 ~/.ssh
|
|
@@ -157,12 +350,31 @@ rollback:
|
|
|
157
350
|
- chmod 600 ~/.ssh/config
|
|
158
351
|
- chmod 644 ~/.ssh/known_hosts
|
|
159
352
|
script:
|
|
353
|
+
- |
|
|
354
|
+
# 智能检测并运行 lint 命令
|
|
355
|
+
echo "检测可用的 lint 命令..."
|
|
356
|
+
if npm run | grep -q "lint:check"; then
|
|
357
|
+
echo "✓ 运行 npm run lint:check"
|
|
358
|
+
npm run lint:check
|
|
359
|
+
elif npm run | grep -q "lint"; then
|
|
360
|
+
echo "✓ 运行 npm run lint"
|
|
361
|
+
npm run lint
|
|
362
|
+
elif npm run | grep -q "type-check"; then
|
|
363
|
+
echo "✓ 运行 npm run type-check"
|
|
364
|
+
npm run type-check
|
|
365
|
+
else
|
|
366
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
367
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
368
|
+
echo " - lint:check (推荐)"
|
|
369
|
+
echo " - lint"
|
|
370
|
+
echo " - type-check"
|
|
371
|
+
fi
|
|
160
372
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose down"
|
|
161
373
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose pull"
|
|
162
374
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose up -d"
|
|
163
375
|
environment:
|
|
164
376
|
name: production
|
|
165
|
-
url: {{PROD_URL}}
|
|
377
|
+
url: "{{PROD_URL}}"
|
|
166
378
|
when: manual
|
|
167
379
|
only:
|
|
168
380
|
- main
|
|
@@ -35,7 +35,7 @@ lint:
|
|
|
35
35
|
- .npm/
|
|
36
36
|
policy: pull-push
|
|
37
37
|
before_script:
|
|
38
|
-
- apk add --no-cache git curl
|
|
38
|
+
- apk add --no-cache git curl jq
|
|
39
39
|
- git --version
|
|
40
40
|
- echo "Setting up Git authentication..."
|
|
41
41
|
- git config --global http.sslVerify false
|
|
@@ -43,7 +43,67 @@ lint:
|
|
|
43
43
|
- git config --global url."https://oauth2:${GITLAB_ACCESS_TOKEN}@{{GITLAB_HOST}}".insteadOf "https://{{GITLAB_HOST}}"
|
|
44
44
|
- npm ci --cache .npm --prefer-offline
|
|
45
45
|
script:
|
|
46
|
-
-
|
|
46
|
+
- |
|
|
47
|
+
# 智能检测并运行 lint 命令
|
|
48
|
+
echo "检测可用的 lint 命令..."
|
|
49
|
+
LINT_FAILED=0
|
|
50
|
+
|
|
51
|
+
if npm run | grep -q "lint:check"; then
|
|
52
|
+
echo "✓ 运行 npm run lint:check"
|
|
53
|
+
if ! npm run lint:check; then
|
|
54
|
+
LINT_FAILED=1
|
|
55
|
+
fi
|
|
56
|
+
elif npm run | grep -q "lint"; then
|
|
57
|
+
echo "✓ 运行 npm run lint"
|
|
58
|
+
if ! npm run lint; then
|
|
59
|
+
LINT_FAILED=1
|
|
60
|
+
fi
|
|
61
|
+
elif npm run | grep -q "type-check"; then
|
|
62
|
+
echo "✓ 运行 npm run type-check"
|
|
63
|
+
if ! npm run type-check; then
|
|
64
|
+
LINT_FAILED=1
|
|
65
|
+
fi
|
|
66
|
+
else
|
|
67
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
68
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
69
|
+
echo " - lint:check (推荐)"
|
|
70
|
+
echo " - lint"
|
|
71
|
+
echo " - type-check"
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
# 如果 lint 失败,输出友好的中文提示
|
|
75
|
+
if [ $LINT_FAILED -eq 1 ]; then
|
|
76
|
+
echo ""
|
|
77
|
+
echo "======================================================================"
|
|
78
|
+
echo "❌ 代码质量检查未通过"
|
|
79
|
+
echo "======================================================================"
|
|
80
|
+
echo ""
|
|
81
|
+
echo "📋 发现了一些代码质量问题,需要修复后才能继续部署。"
|
|
82
|
+
echo ""
|
|
83
|
+
echo "🔧 快速修复方法:"
|
|
84
|
+
echo ""
|
|
85
|
+
echo " 1. 在本地运行自动修复:"
|
|
86
|
+
echo " npm run lint"
|
|
87
|
+
echo ""
|
|
88
|
+
echo " 2. 查看具体问题:"
|
|
89
|
+
echo " npm run lint:check"
|
|
90
|
+
echo ""
|
|
91
|
+
echo " 3. 修复后提交:"
|
|
92
|
+
echo " git add ."
|
|
93
|
+
echo " git commit -m \"fix: 修复代码质量问题\""
|
|
94
|
+
echo " git push"
|
|
95
|
+
echo ""
|
|
96
|
+
echo "💡 常见问题类型:"
|
|
97
|
+
echo " - TypeScript 类型安全问题(使用了 any 类型)"
|
|
98
|
+
echo " - 未使用的变量或导入"
|
|
99
|
+
echo " - async 函数缺少 await"
|
|
100
|
+
echo " - Promise 未正确处理"
|
|
101
|
+
echo ""
|
|
102
|
+
echo "📖 详细错误信息请查看上方输出"
|
|
103
|
+
echo "======================================================================"
|
|
104
|
+
echo ""
|
|
105
|
+
exit 1
|
|
106
|
+
fi
|
|
47
107
|
only:
|
|
48
108
|
- merge_requests
|
|
49
109
|
- main
|
|
@@ -57,10 +117,48 @@ build:
|
|
|
57
117
|
name: docker:24.0.5
|
|
58
118
|
pull_policy: if-not-present
|
|
59
119
|
before_script:
|
|
120
|
+
- |
|
|
121
|
+
# 智能检测并运行 lint 命令
|
|
122
|
+
echo "检测可用的 lint 命令..."
|
|
123
|
+
if npm run | grep -q "lint:check"; then
|
|
124
|
+
echo "✓ 运行 npm run lint:check"
|
|
125
|
+
npm run lint:check
|
|
126
|
+
elif npm run | grep -q "lint"; then
|
|
127
|
+
echo "✓ 运行 npm run lint"
|
|
128
|
+
npm run lint
|
|
129
|
+
elif npm run | grep -q "type-check"; then
|
|
130
|
+
echo "✓ 运行 npm run type-check"
|
|
131
|
+
npm run type-check
|
|
132
|
+
else
|
|
133
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
134
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
135
|
+
echo " - lint:check (推荐)"
|
|
136
|
+
echo " - lint"
|
|
137
|
+
echo " - type-check"
|
|
138
|
+
fi
|
|
60
139
|
- docker info
|
|
61
140
|
- echo "登录到Docker Hub..."
|
|
62
141
|
- echo "$DOCKER_HUB_PASSWORD" | docker login -u $DOCKER_HUB_USERNAME --password-stdin
|
|
63
142
|
script:
|
|
143
|
+
- |
|
|
144
|
+
# 智能检测并运行 lint 命令
|
|
145
|
+
echo "检测可用的 lint 命令..."
|
|
146
|
+
if npm run | grep -q "lint:check"; then
|
|
147
|
+
echo "✓ 运行 npm run lint:check"
|
|
148
|
+
npm run lint:check
|
|
149
|
+
elif npm run | grep -q "lint"; then
|
|
150
|
+
echo "✓ 运行 npm run lint"
|
|
151
|
+
npm run lint
|
|
152
|
+
elif npm run | grep -q "type-check"; then
|
|
153
|
+
echo "✓ 运行 npm run type-check"
|
|
154
|
+
npm run type-check
|
|
155
|
+
else
|
|
156
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
157
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
158
|
+
echo " - lint:check (推荐)"
|
|
159
|
+
echo " - lint"
|
|
160
|
+
echo " - type-check"
|
|
161
|
+
fi
|
|
64
162
|
- echo "尝试拉取最新镜像作为缓存..."
|
|
65
163
|
- docker pull $DOCKER_HUB_IMAGE:latest || true
|
|
66
164
|
- echo "构建Docker镜像..."
|
|
@@ -86,18 +184,56 @@ deploy_dev:
|
|
|
86
184
|
REGISTRY_TYPE: "{{REGISTRY_TYPE}}"
|
|
87
185
|
cache: {}
|
|
88
186
|
before_script:
|
|
187
|
+
- |
|
|
188
|
+
# 智能检测并运行 lint 命令
|
|
189
|
+
echo "检测可用的 lint 命令..."
|
|
190
|
+
if npm run | grep -q "lint:check"; then
|
|
191
|
+
echo "✓ 运行 npm run lint:check"
|
|
192
|
+
npm run lint:check
|
|
193
|
+
elif npm run | grep -q "lint"; then
|
|
194
|
+
echo "✓ 运行 npm run lint"
|
|
195
|
+
npm run lint
|
|
196
|
+
elif npm run | grep -q "type-check"; then
|
|
197
|
+
echo "✓ 运行 npm run type-check"
|
|
198
|
+
npm run type-check
|
|
199
|
+
else
|
|
200
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
201
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
202
|
+
echo " - lint:check (推荐)"
|
|
203
|
+
echo " - lint"
|
|
204
|
+
echo " - type-check"
|
|
205
|
+
fi
|
|
89
206
|
- apk add --no-cache sshpass bash openssl rsync
|
|
90
207
|
- mkdir -p ~/.ssh
|
|
91
208
|
- chmod 700 ~/.ssh
|
|
92
209
|
- chmod 644 ~/.ssh/known_hosts
|
|
93
210
|
script:
|
|
211
|
+
- |
|
|
212
|
+
# 智能检测并运行 lint 命令
|
|
213
|
+
echo "检测可用的 lint 命令..."
|
|
214
|
+
if npm run | grep -q "lint:check"; then
|
|
215
|
+
echo "✓ 运行 npm run lint:check"
|
|
216
|
+
npm run lint:check
|
|
217
|
+
elif npm run | grep -q "lint"; then
|
|
218
|
+
echo "✓ 运行 npm run lint"
|
|
219
|
+
npm run lint
|
|
220
|
+
elif npm run | grep -q "type-check"; then
|
|
221
|
+
echo "✓ 运行 npm run type-check"
|
|
222
|
+
npm run type-check
|
|
223
|
+
else
|
|
224
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
225
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
226
|
+
echo " - lint:check (推荐)"
|
|
227
|
+
echo " - lint"
|
|
228
|
+
echo " - type-check"
|
|
229
|
+
fi
|
|
94
230
|
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "mkdir -p $DEPLOY_DIR"
|
|
95
231
|
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "which rsync || apk add --no-cache rsync"
|
|
96
232
|
- sshpass -p "$SSH_PASSWORD" rsync -avz --delete --exclude='.git/' --exclude='node_modules/' . root@$TEST_SERVER_HOST:$DEPLOY_DIR/
|
|
97
233
|
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "export DOCKER_HUB_USERNAME='$DOCKER_HUB_USERNAME' && export DOCKER_HUB_PASSWORD='$DOCKER_HUB_PASSWORD' && export APP_PORT='$APP_PORT' && cd $DEPLOY_DIR && chmod +x ci/deploy.sh && bash ci/deploy.sh $ENV_TYPE $REGISTRY_TYPE"
|
|
98
234
|
environment:
|
|
99
235
|
name: development
|
|
100
|
-
url: {{DEV_URL}}
|
|
236
|
+
url: "{{DEV_URL}}"
|
|
101
237
|
only:
|
|
102
238
|
- develop
|
|
103
239
|
|
|
@@ -115,18 +251,56 @@ deploy_prod:
|
|
|
115
251
|
REGISTRY_TYPE: "{{REGISTRY_TYPE}}"
|
|
116
252
|
cache: {}
|
|
117
253
|
before_script:
|
|
254
|
+
- |
|
|
255
|
+
# 智能检测并运行 lint 命令
|
|
256
|
+
echo "检测可用的 lint 命令..."
|
|
257
|
+
if npm run | grep -q "lint:check"; then
|
|
258
|
+
echo "✓ 运行 npm run lint:check"
|
|
259
|
+
npm run lint:check
|
|
260
|
+
elif npm run | grep -q "lint"; then
|
|
261
|
+
echo "✓ 运行 npm run lint"
|
|
262
|
+
npm run lint
|
|
263
|
+
elif npm run | grep -q "type-check"; then
|
|
264
|
+
echo "✓ 运行 npm run type-check"
|
|
265
|
+
npm run type-check
|
|
266
|
+
else
|
|
267
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
268
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
269
|
+
echo " - lint:check (推荐)"
|
|
270
|
+
echo " - lint"
|
|
271
|
+
echo " - type-check"
|
|
272
|
+
fi
|
|
118
273
|
- apk add --no-cache sshpass bash openssl rsync
|
|
119
274
|
- mkdir -p ~/.ssh
|
|
120
275
|
- chmod 700 ~/.ssh
|
|
121
276
|
- chmod 644 ~/.ssh/known_hosts
|
|
122
277
|
script:
|
|
278
|
+
- |
|
|
279
|
+
# 智能检测并运行 lint 命令
|
|
280
|
+
echo "检测可用的 lint 命令..."
|
|
281
|
+
if npm run | grep -q "lint:check"; then
|
|
282
|
+
echo "✓ 运行 npm run lint:check"
|
|
283
|
+
npm run lint:check
|
|
284
|
+
elif npm run | grep -q "lint"; then
|
|
285
|
+
echo "✓ 运行 npm run lint"
|
|
286
|
+
npm run lint
|
|
287
|
+
elif npm run | grep -q "type-check"; then
|
|
288
|
+
echo "✓ 运行 npm run type-check"
|
|
289
|
+
npm run type-check
|
|
290
|
+
else
|
|
291
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
292
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
293
|
+
echo " - lint:check (推荐)"
|
|
294
|
+
echo " - lint"
|
|
295
|
+
echo " - type-check"
|
|
296
|
+
fi
|
|
123
297
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "mkdir -p $DEPLOY_DIR"
|
|
124
298
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "which rsync || apk add --no-cache rsync"
|
|
125
299
|
- sshpass -p "$SSH_PASSWORD" rsync -avz --delete --exclude='.git/' --exclude='node_modules/' . root@$PROD_SERVER_HOST:$DEPLOY_DIR/
|
|
126
300
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "export DOCKER_HUB_USERNAME='$DOCKER_HUB_USERNAME' && export DOCKER_HUB_PASSWORD='$DOCKER_HUB_PASSWORD' && export APP_PORT='$APP_PORT' && cd $DEPLOY_DIR && chmod +x ci/deploy.sh && bash ci/deploy.sh $ENV_TYPE $REGISTRY_TYPE"
|
|
127
301
|
environment:
|
|
128
302
|
name: production
|
|
129
|
-
url: {{PROD_URL}}
|
|
303
|
+
url: "{{PROD_URL}}"
|
|
130
304
|
only:
|
|
131
305
|
- main
|
|
132
306
|
when: manual
|
|
@@ -142,17 +316,55 @@ rollback:
|
|
|
142
316
|
APP_PORT: "{{PROD_PORT}}"
|
|
143
317
|
cache: {}
|
|
144
318
|
before_script:
|
|
319
|
+
- |
|
|
320
|
+
# 智能检测并运行 lint 命令
|
|
321
|
+
echo "检测可用的 lint 命令..."
|
|
322
|
+
if npm run | grep -q "lint:check"; then
|
|
323
|
+
echo "✓ 运行 npm run lint:check"
|
|
324
|
+
npm run lint:check
|
|
325
|
+
elif npm run | grep -q "lint"; then
|
|
326
|
+
echo "✓ 运行 npm run lint"
|
|
327
|
+
npm run lint
|
|
328
|
+
elif npm run | grep -q "type-check"; then
|
|
329
|
+
echo "✓ 运行 npm run type-check"
|
|
330
|
+
npm run type-check
|
|
331
|
+
else
|
|
332
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
333
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
334
|
+
echo " - lint:check (推荐)"
|
|
335
|
+
echo " - lint"
|
|
336
|
+
echo " - type-check"
|
|
337
|
+
fi
|
|
145
338
|
- apk add --no-cache openssh-client openssl
|
|
146
339
|
- mkdir -p ~/.ssh
|
|
147
340
|
- chmod 700 ~/.ssh
|
|
148
341
|
- chmod 644 ~/.ssh/known_hosts
|
|
149
342
|
script:
|
|
343
|
+
- |
|
|
344
|
+
# 智能检测并运行 lint 命令
|
|
345
|
+
echo "检测可用的 lint 命令..."
|
|
346
|
+
if npm run | grep -q "lint:check"; then
|
|
347
|
+
echo "✓ 运行 npm run lint:check"
|
|
348
|
+
npm run lint:check
|
|
349
|
+
elif npm run | grep -q "lint"; then
|
|
350
|
+
echo "✓ 运行 npm run lint"
|
|
351
|
+
npm run lint
|
|
352
|
+
elif npm run | grep -q "type-check"; then
|
|
353
|
+
echo "✓ 运行 npm run type-check"
|
|
354
|
+
npm run type-check
|
|
355
|
+
else
|
|
356
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
357
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
358
|
+
echo " - lint:check (推荐)"
|
|
359
|
+
echo " - lint"
|
|
360
|
+
echo " - type-check"
|
|
361
|
+
fi
|
|
150
362
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose down"
|
|
151
363
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose pull"
|
|
152
364
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose up -d"
|
|
153
365
|
environment:
|
|
154
366
|
name: production
|
|
155
|
-
url: {{PROD_URL}}
|
|
367
|
+
url: "{{PROD_URL}}"
|
|
156
368
|
when: manual
|
|
157
369
|
only:
|
|
158
370
|
- main
|