clouddreamai-cicd-setup 1.4.1 → 1.5.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 +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/core/types.d.ts +0 -23
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/variables.d.ts.map +1 -1
- package/dist/core/variables.js +1 -49
- package/dist/core/variables.js.map +1 -1
- package/dist/utils/prompts.d.ts +0 -4
- package/dist/utils/prompts.d.ts.map +1 -1
- package/dist/utils/prompts.js +9 -85
- package/dist/utils/prompts.js.map +1 -1
- package/dist/utils/template.d.ts +5 -5
- package/dist/utils/template.d.ts.map +1 -1
- package/dist/utils/template.js +14 -24
- package/dist/utils/template.js.map +1 -1
- package/package.json +1 -1
- package/templates/gitlab-ci/nestjs-gitlab.yml +15 -2
- package/templates/gitlab-ci/vue-gitlab.yml +19 -161
- package/templates/gitlab-ci/nestjs.yml +0 -376
- package/templates/gitlab-ci/vue.yml +0 -376
|
@@ -117,59 +117,34 @@ build:
|
|
|
117
117
|
name: docker:24.0.5
|
|
118
118
|
pull_policy: if-not-present
|
|
119
119
|
services:
|
|
120
|
-
- docker:24.0.5-dind
|
|
120
|
+
- name: docker:24.0.5-dind
|
|
121
|
+
variables:
|
|
122
|
+
# 自动继承 Runner 的代理配置(如果存在)
|
|
123
|
+
HTTP_PROXY: ${HTTP_PROXY:-}
|
|
124
|
+
HTTPS_PROXY: ${HTTPS_PROXY:-}
|
|
125
|
+
NO_PROXY: ${NO_PROXY:-localhost,127.0.0.1,docker}
|
|
121
126
|
variables:
|
|
122
127
|
DOCKER_HOST: tcp://docker:2375
|
|
123
128
|
DOCKER_TLS_CERTDIR: ""
|
|
124
129
|
DOCKER_DRIVER: overlay2
|
|
125
130
|
before_script:
|
|
126
|
-
- |
|
|
127
|
-
# 智能检测并运行 lint 命令
|
|
128
|
-
echo "检测可用的 lint 命令..."
|
|
129
|
-
if npm run | grep -q "lint:check"; then
|
|
130
|
-
echo "✓ 运行 npm run lint:check"
|
|
131
|
-
npm run lint:check
|
|
132
|
-
elif npm run | grep -q "lint"; then
|
|
133
|
-
echo "✓ 运行 npm run lint"
|
|
134
|
-
npm run lint
|
|
135
|
-
elif npm run | grep -q "type-check"; then
|
|
136
|
-
echo "✓ 运行 npm run type-check"
|
|
137
|
-
npm run type-check
|
|
138
|
-
else
|
|
139
|
-
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
140
|
-
echo "建议在 package.json 中添加以下命令之一:"
|
|
141
|
-
echo " - lint:check (推荐)"
|
|
142
|
-
echo " - lint"
|
|
143
|
-
echo " - type-check"
|
|
144
|
-
fi
|
|
145
131
|
- docker info
|
|
146
132
|
- echo "登录到 GitLab Container Registry..."
|
|
147
133
|
# 使用 GitLab CI 预定义变量登录
|
|
148
134
|
- echo "$CI_REGISTRY_PASSWORD" | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
|
|
149
135
|
script:
|
|
150
|
-
- |
|
|
151
|
-
# 智能检测并运行 lint 命令
|
|
152
|
-
echo "检测可用的 lint 命令..."
|
|
153
|
-
if npm run | grep -q "lint:check"; then
|
|
154
|
-
echo "✓ 运行 npm run lint:check"
|
|
155
|
-
npm run lint:check
|
|
156
|
-
elif npm run | grep -q "lint"; then
|
|
157
|
-
echo "✓ 运行 npm run lint"
|
|
158
|
-
npm run lint
|
|
159
|
-
elif npm run | grep -q "type-check"; then
|
|
160
|
-
echo "✓ 运行 npm run type-check"
|
|
161
|
-
npm run type-check
|
|
162
|
-
else
|
|
163
|
-
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
164
|
-
echo "建议在 package.json 中添加以下命令之一:"
|
|
165
|
-
echo " - lint:check (推荐)"
|
|
166
|
-
echo " - lint"
|
|
167
|
-
echo " - type-check"
|
|
168
|
-
fi
|
|
169
136
|
- echo "尝试拉取最新镜像作为缓存..."
|
|
170
137
|
- docker pull $DOCKER_IMAGE:latest || true
|
|
171
138
|
- echo "构建Docker镜像..."
|
|
172
|
-
-
|
|
139
|
+
- |
|
|
140
|
+
docker build \
|
|
141
|
+
--build-arg BUILDKIT_INLINE_CACHE=1 \
|
|
142
|
+
--build-arg HTTP_PROXY=${HTTP_PROXY:-} \
|
|
143
|
+
--build-arg HTTPS_PROXY=${HTTPS_PROXY:-} \
|
|
144
|
+
--build-arg NO_PROXY=${NO_PROXY:-} \
|
|
145
|
+
--cache-from $DOCKER_IMAGE:latest \
|
|
146
|
+
-t $DOCKER_IMAGE:$CI_COMMIT_SHA \
|
|
147
|
+
-t $DOCKER_IMAGE:latest .
|
|
173
148
|
- echo "推送镜像到 GitLab Container Registry..."
|
|
174
149
|
- docker push $DOCKER_IMAGE:$CI_COMMIT_SHA
|
|
175
150
|
- docker push $DOCKER_IMAGE:latest
|
|
@@ -190,52 +165,13 @@ deploy_dev:
|
|
|
190
165
|
APP_PORT: "{{DEV_PORT}}"
|
|
191
166
|
cache: {}
|
|
192
167
|
before_script:
|
|
193
|
-
- |
|
|
194
|
-
# 智能检测并运行 lint 命令
|
|
195
|
-
echo "检测可用的 lint 命令..."
|
|
196
|
-
if npm run | grep -q "lint:check"; then
|
|
197
|
-
echo "✓ 运行 npm run lint:check"
|
|
198
|
-
npm run lint:check
|
|
199
|
-
elif npm run | grep -q "lint"; then
|
|
200
|
-
echo "✓ 运行 npm run lint"
|
|
201
|
-
npm run lint
|
|
202
|
-
elif npm run | grep -q "type-check"; then
|
|
203
|
-
echo "✓ 运行 npm run type-check"
|
|
204
|
-
npm run type-check
|
|
205
|
-
else
|
|
206
|
-
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
207
|
-
echo "建议在 package.json 中添加以下命令之一:"
|
|
208
|
-
echo " - lint:check (推荐)"
|
|
209
|
-
echo " - lint"
|
|
210
|
-
echo " - type-check"
|
|
211
|
-
fi
|
|
212
168
|
- apk add --no-cache sshpass bash openssl rsync
|
|
213
169
|
- mkdir -p ~/.ssh
|
|
214
170
|
- chmod 700 ~/.ssh
|
|
215
|
-
|
|
171
|
+
# 使用密码认证,跳过 SSH 主机密钥检查
|
|
216
172
|
- echo "StrictHostKeyChecking no" >> ~/.ssh/config
|
|
217
173
|
- chmod 600 ~/.ssh/config
|
|
218
|
-
- chmod 644 ~/.ssh/known_hosts
|
|
219
174
|
script:
|
|
220
|
-
- |
|
|
221
|
-
# 智能检测并运行 lint 命令
|
|
222
|
-
echo "检测可用的 lint 命令..."
|
|
223
|
-
if npm run | grep -q "lint:check"; then
|
|
224
|
-
echo "✓ 运行 npm run lint:check"
|
|
225
|
-
npm run lint:check
|
|
226
|
-
elif npm run | grep -q "lint"; then
|
|
227
|
-
echo "✓ 运行 npm run lint"
|
|
228
|
-
npm run lint
|
|
229
|
-
elif npm run | grep -q "type-check"; then
|
|
230
|
-
echo "✓ 运行 npm run type-check"
|
|
231
|
-
npm run type-check
|
|
232
|
-
else
|
|
233
|
-
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
234
|
-
echo "建议在 package.json 中添加以下命令之一:"
|
|
235
|
-
echo " - lint:check (推荐)"
|
|
236
|
-
echo " - lint"
|
|
237
|
-
echo " - type-check"
|
|
238
|
-
fi
|
|
239
175
|
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "mkdir -p $DEPLOY_DIR"
|
|
240
176
|
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "which rsync || apk add --no-cache rsync"
|
|
241
177
|
- sshpass -p "$SSH_PASSWORD" rsync -avz --delete --exclude='.git/' --exclude='node_modules/' . root@$TEST_SERVER_HOST:$DEPLOY_DIR/
|
|
@@ -260,52 +196,13 @@ deploy_prod:
|
|
|
260
196
|
APP_PORT: "{{PROD_PORT}}"
|
|
261
197
|
cache: {}
|
|
262
198
|
before_script:
|
|
263
|
-
- |
|
|
264
|
-
# 智能检测并运行 lint 命令
|
|
265
|
-
echo "检测可用的 lint 命令..."
|
|
266
|
-
if npm run | grep -q "lint:check"; then
|
|
267
|
-
echo "✓ 运行 npm run lint:check"
|
|
268
|
-
npm run lint:check
|
|
269
|
-
elif npm run | grep -q "lint"; then
|
|
270
|
-
echo "✓ 运行 npm run lint"
|
|
271
|
-
npm run lint
|
|
272
|
-
elif npm run | grep -q "type-check"; then
|
|
273
|
-
echo "✓ 运行 npm run type-check"
|
|
274
|
-
npm run type-check
|
|
275
|
-
else
|
|
276
|
-
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
277
|
-
echo "建议在 package.json 中添加以下命令之一:"
|
|
278
|
-
echo " - lint:check (推荐)"
|
|
279
|
-
echo " - lint"
|
|
280
|
-
echo " - type-check"
|
|
281
|
-
fi
|
|
282
199
|
- apk add --no-cache sshpass bash openssl rsync
|
|
283
200
|
- mkdir -p ~/.ssh
|
|
284
201
|
- chmod 700 ~/.ssh
|
|
285
|
-
|
|
202
|
+
# 使用密码认证,跳过 SSH 主机密钥检查
|
|
286
203
|
- echo "StrictHostKeyChecking no" >> ~/.ssh/config
|
|
287
204
|
- chmod 600 ~/.ssh/config
|
|
288
|
-
- chmod 644 ~/.ssh/known_hosts
|
|
289
205
|
script:
|
|
290
|
-
- |
|
|
291
|
-
# 智能检测并运行 lint 命令
|
|
292
|
-
echo "检测可用的 lint 命令..."
|
|
293
|
-
if npm run | grep -q "lint:check"; then
|
|
294
|
-
echo "✓ 运行 npm run lint:check"
|
|
295
|
-
npm run lint:check
|
|
296
|
-
elif npm run | grep -q "lint"; then
|
|
297
|
-
echo "✓ 运行 npm run lint"
|
|
298
|
-
npm run lint
|
|
299
|
-
elif npm run | grep -q "type-check"; then
|
|
300
|
-
echo "✓ 运行 npm run type-check"
|
|
301
|
-
npm run type-check
|
|
302
|
-
else
|
|
303
|
-
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
304
|
-
echo "建议在 package.json 中添加以下命令之一:"
|
|
305
|
-
echo " - lint:check (推荐)"
|
|
306
|
-
echo " - lint"
|
|
307
|
-
echo " - type-check"
|
|
308
|
-
fi
|
|
309
206
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "mkdir -p $DEPLOY_DIR"
|
|
310
207
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "which rsync || apk add --no-cache rsync"
|
|
311
208
|
- sshpass -p "$SSH_PASSWORD" rsync -avz --delete --exclude='.git/' --exclude='node_modules/' . root@$PROD_SERVER_HOST:$DEPLOY_DIR/
|
|
@@ -329,52 +226,13 @@ rollback:
|
|
|
329
226
|
APP_PORT: "{{PROD_PORT}}"
|
|
330
227
|
cache: {}
|
|
331
228
|
before_script:
|
|
332
|
-
-
|
|
333
|
-
# 智能检测并运行 lint 命令
|
|
334
|
-
echo "检测可用的 lint 命令..."
|
|
335
|
-
if npm run | grep -q "lint:check"; then
|
|
336
|
-
echo "✓ 运行 npm run lint:check"
|
|
337
|
-
npm run lint:check
|
|
338
|
-
elif npm run | grep -q "lint"; then
|
|
339
|
-
echo "✓ 运行 npm run lint"
|
|
340
|
-
npm run lint
|
|
341
|
-
elif npm run | grep -q "type-check"; then
|
|
342
|
-
echo "✓ 运行 npm run type-check"
|
|
343
|
-
npm run type-check
|
|
344
|
-
else
|
|
345
|
-
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
346
|
-
echo "建议在 package.json 中添加以下命令之一:"
|
|
347
|
-
echo " - lint:check (推荐)"
|
|
348
|
-
echo " - lint"
|
|
349
|
-
echo " - type-check"
|
|
350
|
-
fi
|
|
351
|
-
- apk add --no-cache openssh-client openssl
|
|
229
|
+
- apk add --no-cache sshpass bash openssl
|
|
352
230
|
- mkdir -p ~/.ssh
|
|
353
231
|
- chmod 700 ~/.ssh
|
|
354
|
-
|
|
232
|
+
# 使用密码认证,跳过 SSH 主机密钥检查
|
|
355
233
|
- echo "StrictHostKeyChecking no" >> ~/.ssh/config
|
|
356
234
|
- chmod 600 ~/.ssh/config
|
|
357
|
-
- chmod 644 ~/.ssh/known_hosts
|
|
358
235
|
script:
|
|
359
|
-
- |
|
|
360
|
-
# 智能检测并运行 lint 命令
|
|
361
|
-
echo "检测可用的 lint 命令..."
|
|
362
|
-
if npm run | grep -q "lint:check"; then
|
|
363
|
-
echo "✓ 运行 npm run lint:check"
|
|
364
|
-
npm run lint:check
|
|
365
|
-
elif npm run | grep -q "lint"; then
|
|
366
|
-
echo "✓ 运行 npm run lint"
|
|
367
|
-
npm run lint
|
|
368
|
-
elif npm run | grep -q "type-check"; then
|
|
369
|
-
echo "✓ 运行 npm run type-check"
|
|
370
|
-
npm run type-check
|
|
371
|
-
else
|
|
372
|
-
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
373
|
-
echo "建议在 package.json 中添加以下命令之一:"
|
|
374
|
-
echo " - lint:check (推荐)"
|
|
375
|
-
echo " - lint"
|
|
376
|
-
echo " - type-check"
|
|
377
|
-
fi
|
|
378
236
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose down"
|
|
379
237
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose pull"
|
|
380
238
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose up -d"
|
|
@@ -1,376 +0,0 @@
|
|
|
1
|
-
# GitLab CI/CD 配置文件 - NestJS 项目
|
|
2
|
-
stages:
|
|
3
|
-
- lint
|
|
4
|
-
- build
|
|
5
|
-
- deploy
|
|
6
|
-
|
|
7
|
-
# 全局变量
|
|
8
|
-
variables:
|
|
9
|
-
DOCKER_DRIVER: overlay2
|
|
10
|
-
NODE_VERSION: "20"
|
|
11
|
-
APP_NAME: "{{APP_NAME}}"
|
|
12
|
-
GIT_STRATEGY: fetch
|
|
13
|
-
GIT_SSL_NO_VERIFY: "true"
|
|
14
|
-
DOCKER_PULL_POLICY: if-not-present
|
|
15
|
-
DOCKER_HUB_REGISTRY: "docker.io"
|
|
16
|
-
DOCKER_HUB_IMAGE: "{{DOCKER_IMAGE}}"
|
|
17
|
-
|
|
18
|
-
# 全局缓存配置
|
|
19
|
-
cache:
|
|
20
|
-
key: ${CI_COMMIT_REF_SLUG}-${CI_JOB_NAME}
|
|
21
|
-
paths:
|
|
22
|
-
- node_modules/
|
|
23
|
-
- .npm/
|
|
24
|
-
|
|
25
|
-
# 代码质量检查阶段
|
|
26
|
-
lint:
|
|
27
|
-
stage: lint
|
|
28
|
-
image:
|
|
29
|
-
name: node:20-alpine
|
|
30
|
-
pull_policy: if-not-present
|
|
31
|
-
cache:
|
|
32
|
-
key: ${CI_COMMIT_REF_SLUG}-node-modules
|
|
33
|
-
paths:
|
|
34
|
-
- node_modules/
|
|
35
|
-
- .npm/
|
|
36
|
-
policy: pull-push
|
|
37
|
-
before_script:
|
|
38
|
-
- apk add --no-cache git curl jq
|
|
39
|
-
- git --version
|
|
40
|
-
- echo "Setting up Git authentication..."
|
|
41
|
-
- git config --global http.sslVerify false
|
|
42
|
-
- git config --global url."https://oauth2:${GITLAB_ACCESS_TOKEN}@{{GITLAB_HOST}}".insteadOf "http://{{GITLAB_HOST}}"
|
|
43
|
-
- git config --global url."https://oauth2:${GITLAB_ACCESS_TOKEN}@{{GITLAB_HOST}}".insteadOf "https://{{GITLAB_HOST}}"
|
|
44
|
-
- npm ci --cache .npm --prefer-offline
|
|
45
|
-
script:
|
|
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
|
|
107
|
-
only:
|
|
108
|
-
- merge_requests
|
|
109
|
-
- main
|
|
110
|
-
- develop
|
|
111
|
-
|
|
112
|
-
# 构建阶段
|
|
113
|
-
build:
|
|
114
|
-
stage: build
|
|
115
|
-
cache: {}
|
|
116
|
-
image:
|
|
117
|
-
name: docker:24.0.5
|
|
118
|
-
pull_policy: if-not-present
|
|
119
|
-
services:
|
|
120
|
-
- docker:24.0.5-dind
|
|
121
|
-
variables:
|
|
122
|
-
DOCKER_HOST: tcp://docker:2375
|
|
123
|
-
DOCKER_TLS_CERTDIR: ""
|
|
124
|
-
DOCKER_DRIVER: overlay2
|
|
125
|
-
before_script:
|
|
126
|
-
- |
|
|
127
|
-
# 智能检测并运行 lint 命令
|
|
128
|
-
echo "检测可用的 lint 命令..."
|
|
129
|
-
if npm run | grep -q "lint:check"; then
|
|
130
|
-
echo "✓ 运行 npm run lint:check"
|
|
131
|
-
npm run lint:check
|
|
132
|
-
elif npm run | grep -q "lint"; then
|
|
133
|
-
echo "✓ 运行 npm run lint"
|
|
134
|
-
npm run lint
|
|
135
|
-
elif npm run | grep -q "type-check"; then
|
|
136
|
-
echo "✓ 运行 npm run type-check"
|
|
137
|
-
npm run type-check
|
|
138
|
-
else
|
|
139
|
-
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
140
|
-
echo "建议在 package.json 中添加以下命令之一:"
|
|
141
|
-
echo " - lint:check (推荐)"
|
|
142
|
-
echo " - lint"
|
|
143
|
-
echo " - type-check"
|
|
144
|
-
fi
|
|
145
|
-
- docker info
|
|
146
|
-
- echo "登录到Docker Hub..."
|
|
147
|
-
- echo "$DOCKER_HUB_PASSWORD" | docker login -u $DOCKER_HUB_USERNAME --password-stdin
|
|
148
|
-
script:
|
|
149
|
-
- |
|
|
150
|
-
# 智能检测并运行 lint 命令
|
|
151
|
-
echo "检测可用的 lint 命令..."
|
|
152
|
-
if npm run | grep -q "lint:check"; then
|
|
153
|
-
echo "✓ 运行 npm run lint:check"
|
|
154
|
-
npm run lint:check
|
|
155
|
-
elif npm run | grep -q "lint"; then
|
|
156
|
-
echo "✓ 运行 npm run lint"
|
|
157
|
-
npm run lint
|
|
158
|
-
elif npm run | grep -q "type-check"; then
|
|
159
|
-
echo "✓ 运行 npm run type-check"
|
|
160
|
-
npm run type-check
|
|
161
|
-
else
|
|
162
|
-
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
163
|
-
echo "建议在 package.json 中添加以下命令之一:"
|
|
164
|
-
echo " - lint:check (推荐)"
|
|
165
|
-
echo " - lint"
|
|
166
|
-
echo " - type-check"
|
|
167
|
-
fi
|
|
168
|
-
- echo "尝试拉取最新镜像作为缓存..."
|
|
169
|
-
- docker pull $DOCKER_HUB_IMAGE:latest || true
|
|
170
|
-
- echo "构建Docker镜像..."
|
|
171
|
-
- docker build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from $DOCKER_HUB_IMAGE:latest -t $DOCKER_HUB_IMAGE:$CI_COMMIT_SHA -t $DOCKER_HUB_IMAGE:latest .
|
|
172
|
-
- echo "推送镜像到Docker Hub..."
|
|
173
|
-
- docker push $DOCKER_HUB_IMAGE:$CI_COMMIT_SHA
|
|
174
|
-
- docker push $DOCKER_HUB_IMAGE:latest
|
|
175
|
-
only:
|
|
176
|
-
- main
|
|
177
|
-
- develop
|
|
178
|
-
|
|
179
|
-
# 开发环境部署(develop 分支自动触发)
|
|
180
|
-
deploy_dev:
|
|
181
|
-
stage: deploy
|
|
182
|
-
image:
|
|
183
|
-
name: alpine:latest
|
|
184
|
-
pull_policy: if-not-present
|
|
185
|
-
variables:
|
|
186
|
-
ENV_TYPE: "development"
|
|
187
|
-
ENV_FILE_CONTENT: $DEV_ENV_FILE
|
|
188
|
-
DEPLOY_DIR: "{{DEPLOY_DIR}}"
|
|
189
|
-
APP_PORT: "{{DEV_PORT}}"
|
|
190
|
-
REGISTRY_TYPE: "{{REGISTRY_TYPE}}"
|
|
191
|
-
cache: {}
|
|
192
|
-
before_script:
|
|
193
|
-
- |
|
|
194
|
-
# 智能检测并运行 lint 命令
|
|
195
|
-
echo "检测可用的 lint 命令..."
|
|
196
|
-
if npm run | grep -q "lint:check"; then
|
|
197
|
-
echo "✓ 运行 npm run lint:check"
|
|
198
|
-
npm run lint:check
|
|
199
|
-
elif npm run | grep -q "lint"; then
|
|
200
|
-
echo "✓ 运行 npm run lint"
|
|
201
|
-
npm run lint
|
|
202
|
-
elif npm run | grep -q "type-check"; then
|
|
203
|
-
echo "✓ 运行 npm run type-check"
|
|
204
|
-
npm run type-check
|
|
205
|
-
else
|
|
206
|
-
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
207
|
-
echo "建议在 package.json 中添加以下命令之一:"
|
|
208
|
-
echo " - lint:check (推荐)"
|
|
209
|
-
echo " - lint"
|
|
210
|
-
echo " - type-check"
|
|
211
|
-
fi
|
|
212
|
-
- apk add --no-cache sshpass bash openssl rsync
|
|
213
|
-
- mkdir -p ~/.ssh
|
|
214
|
-
- chmod 700 ~/.ssh
|
|
215
|
-
- chmod 644 ~/.ssh/known_hosts
|
|
216
|
-
script:
|
|
217
|
-
- |
|
|
218
|
-
# 智能检测并运行 lint 命令
|
|
219
|
-
echo "检测可用的 lint 命令..."
|
|
220
|
-
if npm run | grep -q "lint:check"; then
|
|
221
|
-
echo "✓ 运行 npm run lint:check"
|
|
222
|
-
npm run lint:check
|
|
223
|
-
elif npm run | grep -q "lint"; then
|
|
224
|
-
echo "✓ 运行 npm run lint"
|
|
225
|
-
npm run lint
|
|
226
|
-
elif npm run | grep -q "type-check"; then
|
|
227
|
-
echo "✓ 运行 npm run type-check"
|
|
228
|
-
npm run type-check
|
|
229
|
-
else
|
|
230
|
-
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
231
|
-
echo "建议在 package.json 中添加以下命令之一:"
|
|
232
|
-
echo " - lint:check (推荐)"
|
|
233
|
-
echo " - lint"
|
|
234
|
-
echo " - type-check"
|
|
235
|
-
fi
|
|
236
|
-
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "mkdir -p $DEPLOY_DIR"
|
|
237
|
-
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "which rsync || apk add --no-cache rsync"
|
|
238
|
-
- sshpass -p "$SSH_PASSWORD" rsync -avz --delete --exclude='.git/' --exclude='node_modules/' . root@$TEST_SERVER_HOST:$DEPLOY_DIR/
|
|
239
|
-
- 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"
|
|
240
|
-
environment:
|
|
241
|
-
name: development
|
|
242
|
-
url: "{{DEV_URL}}"
|
|
243
|
-
only:
|
|
244
|
-
- develop
|
|
245
|
-
|
|
246
|
-
# 生产环境部署(main 分支手动触发)
|
|
247
|
-
deploy_prod:
|
|
248
|
-
stage: deploy
|
|
249
|
-
image:
|
|
250
|
-
name: alpine:latest
|
|
251
|
-
pull_policy: if-not-present
|
|
252
|
-
variables:
|
|
253
|
-
ENV_TYPE: "production"
|
|
254
|
-
ENV_FILE_CONTENT: $PROD_ENV_FILE
|
|
255
|
-
DEPLOY_DIR: "{{DEPLOY_DIR}}"
|
|
256
|
-
APP_PORT: "{{PROD_PORT}}"
|
|
257
|
-
REGISTRY_TYPE: "{{REGISTRY_TYPE}}"
|
|
258
|
-
cache: {}
|
|
259
|
-
before_script:
|
|
260
|
-
- |
|
|
261
|
-
# 智能检测并运行 lint 命令
|
|
262
|
-
echo "检测可用的 lint 命令..."
|
|
263
|
-
if npm run | grep -q "lint:check"; then
|
|
264
|
-
echo "✓ 运行 npm run lint:check"
|
|
265
|
-
npm run lint:check
|
|
266
|
-
elif npm run | grep -q "lint"; then
|
|
267
|
-
echo "✓ 运行 npm run lint"
|
|
268
|
-
npm run lint
|
|
269
|
-
elif npm run | grep -q "type-check"; then
|
|
270
|
-
echo "✓ 运行 npm run type-check"
|
|
271
|
-
npm run type-check
|
|
272
|
-
else
|
|
273
|
-
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
274
|
-
echo "建议在 package.json 中添加以下命令之一:"
|
|
275
|
-
echo " - lint:check (推荐)"
|
|
276
|
-
echo " - lint"
|
|
277
|
-
echo " - type-check"
|
|
278
|
-
fi
|
|
279
|
-
- apk add --no-cache sshpass bash openssl rsync
|
|
280
|
-
- mkdir -p ~/.ssh
|
|
281
|
-
- chmod 700 ~/.ssh
|
|
282
|
-
- chmod 644 ~/.ssh/known_hosts
|
|
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
|
|
303
|
-
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "mkdir -p $DEPLOY_DIR"
|
|
304
|
-
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "which rsync || apk add --no-cache rsync"
|
|
305
|
-
- sshpass -p "$SSH_PASSWORD" rsync -avz --delete --exclude='.git/' --exclude='node_modules/' . root@$PROD_SERVER_HOST:$DEPLOY_DIR/
|
|
306
|
-
- 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"
|
|
307
|
-
environment:
|
|
308
|
-
name: production
|
|
309
|
-
url: "{{PROD_URL}}"
|
|
310
|
-
only:
|
|
311
|
-
- main
|
|
312
|
-
when: manual
|
|
313
|
-
|
|
314
|
-
# 回滚部署(可选)
|
|
315
|
-
rollback:
|
|
316
|
-
stage: deploy
|
|
317
|
-
image:
|
|
318
|
-
name: alpine:latest
|
|
319
|
-
pull_policy: if-not-present
|
|
320
|
-
variables:
|
|
321
|
-
DEPLOY_DIR: "{{DEPLOY_DIR}}"
|
|
322
|
-
APP_PORT: "{{PROD_PORT}}"
|
|
323
|
-
cache: {}
|
|
324
|
-
before_script:
|
|
325
|
-
- |
|
|
326
|
-
# 智能检测并运行 lint 命令
|
|
327
|
-
echo "检测可用的 lint 命令..."
|
|
328
|
-
if npm run | grep -q "lint:check"; then
|
|
329
|
-
echo "✓ 运行 npm run lint:check"
|
|
330
|
-
npm run lint:check
|
|
331
|
-
elif npm run | grep -q "lint"; then
|
|
332
|
-
echo "✓ 运行 npm run lint"
|
|
333
|
-
npm run lint
|
|
334
|
-
elif npm run | grep -q "type-check"; then
|
|
335
|
-
echo "✓ 运行 npm run type-check"
|
|
336
|
-
npm run type-check
|
|
337
|
-
else
|
|
338
|
-
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
339
|
-
echo "建议在 package.json 中添加以下命令之一:"
|
|
340
|
-
echo " - lint:check (推荐)"
|
|
341
|
-
echo " - lint"
|
|
342
|
-
echo " - type-check"
|
|
343
|
-
fi
|
|
344
|
-
- apk add --no-cache openssh-client openssl
|
|
345
|
-
- mkdir -p ~/.ssh
|
|
346
|
-
- chmod 700 ~/.ssh
|
|
347
|
-
- chmod 644 ~/.ssh/known_hosts
|
|
348
|
-
script:
|
|
349
|
-
- |
|
|
350
|
-
# 智能检测并运行 lint 命令
|
|
351
|
-
echo "检测可用的 lint 命令..."
|
|
352
|
-
if npm run | grep -q "lint:check"; then
|
|
353
|
-
echo "✓ 运行 npm run lint:check"
|
|
354
|
-
npm run lint:check
|
|
355
|
-
elif npm run | grep -q "lint"; then
|
|
356
|
-
echo "✓ 运行 npm run lint"
|
|
357
|
-
npm run lint
|
|
358
|
-
elif npm run | grep -q "type-check"; then
|
|
359
|
-
echo "✓ 运行 npm run type-check"
|
|
360
|
-
npm run type-check
|
|
361
|
-
else
|
|
362
|
-
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
363
|
-
echo "建议在 package.json 中添加以下命令之一:"
|
|
364
|
-
echo " - lint:check (推荐)"
|
|
365
|
-
echo " - lint"
|
|
366
|
-
echo " - type-check"
|
|
367
|
-
fi
|
|
368
|
-
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose down"
|
|
369
|
-
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose pull"
|
|
370
|
-
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose up -d"
|
|
371
|
-
environment:
|
|
372
|
-
name: production
|
|
373
|
-
url: "{{PROD_URL}}"
|
|
374
|
-
when: manual
|
|
375
|
-
only:
|
|
376
|
-
- main
|