clouddreamai-cicd-setup 1.4.0 → 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.
@@ -1,370 +0,0 @@
1
- # GitLab CI/CD 配置文件 - Vue 项目
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
- 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
139
- - docker info
140
- - echo "登录到Docker Hub..."
141
- - echo "$DOCKER_HUB_PASSWORD" | docker login -u $DOCKER_HUB_USERNAME --password-stdin
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
162
- - echo "尝试拉取最新镜像作为缓存..."
163
- - docker pull $DOCKER_HUB_IMAGE:latest || true
164
- - echo "构建Docker镜像..."
165
- - 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 .
166
- - echo "推送镜像到Docker Hub..."
167
- - docker push $DOCKER_HUB_IMAGE:$CI_COMMIT_SHA
168
- - docker push $DOCKER_HUB_IMAGE:latest
169
- only:
170
- - main
171
- - develop
172
-
173
- # 开发环境部署(develop 分支自动触发)
174
- deploy_dev:
175
- stage: deploy
176
- image:
177
- name: alpine:latest
178
- pull_policy: if-not-present
179
- variables:
180
- ENV_TYPE: "development"
181
- ENV_FILE_CONTENT: $DEV_ENV_FILE
182
- DEPLOY_DIR: "{{DEPLOY_DIR}}"
183
- APP_PORT: "{{DEV_PORT}}"
184
- REGISTRY_TYPE: "{{REGISTRY_TYPE}}"
185
- cache: {}
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
206
- - apk add --no-cache sshpass bash openssl rsync
207
- - mkdir -p ~/.ssh
208
- - chmod 700 ~/.ssh
209
- - chmod 644 ~/.ssh/known_hosts
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
230
- - sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "mkdir -p $DEPLOY_DIR"
231
- - sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "which rsync || apk add --no-cache rsync"
232
- - sshpass -p "$SSH_PASSWORD" rsync -avz --delete --exclude='.git/' --exclude='node_modules/' . root@$TEST_SERVER_HOST:$DEPLOY_DIR/
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"
234
- environment:
235
- name: development
236
- url: "{{DEV_URL}}"
237
- only:
238
- - develop
239
-
240
- # 生产环境部署(main 分支手动触发)
241
- deploy_prod:
242
- stage: deploy
243
- image:
244
- name: alpine:latest
245
- pull_policy: if-not-present
246
- variables:
247
- ENV_TYPE: "production"
248
- ENV_FILE_CONTENT: $PROD_ENV_FILE
249
- DEPLOY_DIR: "{{DEPLOY_DIR}}"
250
- APP_PORT: "{{PROD_PORT}}"
251
- REGISTRY_TYPE: "{{REGISTRY_TYPE}}"
252
- cache: {}
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
273
- - apk add --no-cache sshpass bash openssl rsync
274
- - mkdir -p ~/.ssh
275
- - chmod 700 ~/.ssh
276
- - chmod 644 ~/.ssh/known_hosts
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
297
- - sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "mkdir -p $DEPLOY_DIR"
298
- - sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "which rsync || apk add --no-cache rsync"
299
- - sshpass -p "$SSH_PASSWORD" rsync -avz --delete --exclude='.git/' --exclude='node_modules/' . root@$PROD_SERVER_HOST:$DEPLOY_DIR/
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"
301
- environment:
302
- name: production
303
- url: "{{PROD_URL}}"
304
- only:
305
- - main
306
- when: manual
307
-
308
- # 回滚部署(可选)
309
- rollback:
310
- stage: deploy
311
- image:
312
- name: alpine:latest
313
- pull_policy: if-not-present
314
- variables:
315
- DEPLOY_DIR: "{{DEPLOY_DIR}}"
316
- APP_PORT: "{{PROD_PORT}}"
317
- cache: {}
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
338
- - apk add --no-cache openssh-client openssl
339
- - mkdir -p ~/.ssh
340
- - chmod 700 ~/.ssh
341
- - chmod 644 ~/.ssh/known_hosts
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
362
- - sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose down"
363
- - sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose pull"
364
- - sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose up -d"
365
- environment:
366
- name: production
367
- url: "{{PROD_URL}}"
368
- when: manual
369
- only:
370
- - main