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.
@@ -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
- - 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 .
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
- - # 使用密码认证,跳过 SSH 主机密钥检查
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
- - # 使用密码认证,跳过 SSH 主机密钥检查
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
- - # 使用密码认证,跳过 SSH 主机密钥检查
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