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.
@@ -116,54 +116,35 @@ build:
116
116
  image:
117
117
  name: docker:24.0.5
118
118
  pull_policy: if-not-present
119
+ services:
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}
126
+ variables:
127
+ DOCKER_HOST: tcp://docker:2375
128
+ DOCKER_TLS_CERTDIR: ""
129
+ DOCKER_DRIVER: overlay2
119
130
  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
131
  - docker info
140
132
  - echo "登录到 GitLab Container Registry..."
141
133
  # 使用 GitLab CI 预定义变量登录
142
134
  - echo "$CI_REGISTRY_PASSWORD" | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
143
135
  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
163
136
  - echo "尝试拉取最新镜像作为缓存..."
164
137
  - docker pull $DOCKER_IMAGE:latest || true
165
138
  - echo "构建Docker镜像..."
166
- - docker build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from $DOCKER_IMAGE:latest -t $DOCKER_IMAGE:$CI_COMMIT_SHA -t $DOCKER_IMAGE:latest .
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 .
167
148
  - echo "推送镜像到 GitLab Container Registry..."
168
149
  - docker push $DOCKER_IMAGE:$CI_COMMIT_SHA
169
150
  - docker push $DOCKER_IMAGE:latest
@@ -184,52 +165,13 @@ deploy_dev:
184
165
  APP_PORT: "{{DEV_PORT}}"
185
166
  cache: {}
186
167
  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
168
  - apk add --no-cache sshpass bash openssl rsync
207
169
  - mkdir -p ~/.ssh
208
170
  - chmod 700 ~/.ssh
209
- - # 使用密码认证,跳过 SSH 主机密钥检查
171
+ # 使用密码认证,跳过 SSH 主机密钥检查
210
172
  - echo "StrictHostKeyChecking no" >> ~/.ssh/config
211
173
  - chmod 600 ~/.ssh/config
212
- - chmod 644 ~/.ssh/known_hosts
213
174
  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
233
175
  - sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "mkdir -p $DEPLOY_DIR"
234
176
  - sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "which rsync || apk add --no-cache rsync"
235
177
  - sshpass -p "$SSH_PASSWORD" rsync -avz --delete --exclude='.git/' --exclude='node_modules/' . root@$TEST_SERVER_HOST:$DEPLOY_DIR/
@@ -254,52 +196,13 @@ deploy_prod:
254
196
  APP_PORT: "{{PROD_PORT}}"
255
197
  cache: {}
256
198
  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
276
199
  - apk add --no-cache sshpass bash openssl rsync
277
200
  - mkdir -p ~/.ssh
278
201
  - chmod 700 ~/.ssh
279
- - # 使用密码认证,跳过 SSH 主机密钥检查
202
+ # 使用密码认证,跳过 SSH 主机密钥检查
280
203
  - echo "StrictHostKeyChecking no" >> ~/.ssh/config
281
204
  - chmod 600 ~/.ssh/config
282
- - chmod 644 ~/.ssh/known_hosts
283
205
  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
206
  - sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "mkdir -p $DEPLOY_DIR"
304
207
  - sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "which rsync || apk add --no-cache rsync"
305
208
  - sshpass -p "$SSH_PASSWORD" rsync -avz --delete --exclude='.git/' --exclude='node_modules/' . root@$PROD_SERVER_HOST:$DEPLOY_DIR/
@@ -323,52 +226,13 @@ rollback:
323
226
  APP_PORT: "{{PROD_PORT}}"
324
227
  cache: {}
325
228
  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
345
- - apk add --no-cache openssh-client openssl
229
+ - apk add --no-cache sshpass bash openssl
346
230
  - mkdir -p ~/.ssh
347
231
  - chmod 700 ~/.ssh
348
- - # 使用密码认证,跳过 SSH 主机密钥检查
232
+ # 使用密码认证,跳过 SSH 主机密钥检查
349
233
  - echo "StrictHostKeyChecking no" >> ~/.ssh/config
350
234
  - chmod 600 ~/.ssh/config
351
- - chmod 644 ~/.ssh/known_hosts
352
235
  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
372
236
  - sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose down"
373
237
  - sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose pull"
374
238
  - sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose up -d"
@@ -1,370 +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
- 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