clouddreamai-cicd-setup 1.4.1 → 1.5.1

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,376 +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
- 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