Skip to content

Commit c4fb97f

Browse files
authored
Merge pull request #54 from yyyCode/harden/ci-deploy-guard
harden(ci): 给部署 job 加超时与「过期提交拒绝部署」闸门
2 parents 3f645df + 690bf90 commit c4fb97f

1 file changed

Lines changed: 40 additions & 0 deletions

File tree

‎.github/workflows/ci.yml‎

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ jobs:
1212
# 检测变更范围。business / message / gateway 三条链互不影响;共享契约(OpenBlog-api/**)变更会同时触发 business 与 message 双链。
1313
changes:
1414
runs-on: ubuntu-latest
15+
timeout-minutes: 10
1516
outputs:
1617
business: ${{ steps.filter.outputs.business }}
1718
message: ${{ steps.filter.outputs.message }}
@@ -50,6 +51,7 @@ jobs:
5051
needs: changes
5152
if: ${{ needs.changes.outputs.business == 'true' || github.event_name == 'workflow_dispatch' }}
5253
runs-on: ubuntu-latest
54+
timeout-minutes: 30
5355
env:
5456
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
5557

@@ -75,6 +77,7 @@ jobs:
7577
needs: build-business
7678
if: ${{ needs.build-business.result == 'success' || github.event_name == 'workflow_dispatch' }}
7779
runs-on: openblog-backend
80+
timeout-minutes: 30
7881

7982
steps:
8083
- name: Checkout(获取 deploy/business 下的 Docker 部署文件)
@@ -92,6 +95,17 @@ jobs:
9295
OPENBLOG_SLIDER_ENABLED: ${{ vars.OPENBLOG_SLIDER_ENABLED }}
9396
run: |
9497
set -euo pipefail
98+
99+
# 只允许部署 master 的最新提交。旧 run(或被重跑的旧 run)若排在我们之后落到同一
100+
# TARGET_DIR,会把它那一版的 .env 与 docker-compose.yml 覆写回来——实测会把
101+
# OPENBLOG_SLIDER_ENABLED 静默抹成 false(开关自己关上,且不报任何错)。
102+
# 取不到远端 SHA(网络故障)时 LATEST_SHA 为空,同样拒绝部署:宁可漏部署,不可覆写。
103+
LATEST_SHA=$(git ls-remote origin refs/heads/master | cut -f1)
104+
if [ "$GITHUB_SHA" != "$LATEST_SHA" ]; then
105+
echo "!! 本 run 提交 $GITHUB_SHA 不是 master 最新 $LATEST_SHA,拒绝部署以免覆写更新后的配置" >&2
106+
exit 1
107+
fi
108+
95109
TARGET_DIR="/www/wwwroot/java/openblog"
96110
TARGET_JAR="$TARGET_DIR/OpenBlog-business-1.0.0-SNAPSHOT.jar"
97111
@@ -137,6 +151,7 @@ jobs:
137151
needs: changes
138152
if: ${{ needs.changes.outputs.message == 'true' || github.event_name == 'workflow_dispatch' }}
139153
runs-on: ubuntu-latest
154+
timeout-minutes: 30
140155
env:
141156
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
142157

@@ -162,6 +177,7 @@ jobs:
162177
needs: build-message
163178
if: ${{ needs.build-message.result == 'success' || github.event_name == 'workflow_dispatch' }}
164179
runs-on: openblog-backend
180+
timeout-minutes: 30
165181

166182
steps:
167183
- name: Checkout(获取 deploy/message 下的 Docker 部署文件)
@@ -178,6 +194,16 @@ jobs:
178194
ALIYUN_FROM: ${{ secrets.ALIYUN_FROM }}
179195
run: |
180196
set -euo pipefail
197+
198+
# 只允许部署 master 的最新提交。旧 run(或被重跑的旧 run)若排在我们之后落到同一
199+
# TARGET_DIR,会把它那一版的 .env 覆写回来(实测同类问题会静默抹掉配置项)。
200+
# 取不到远端 SHA(网络故障)时 LATEST_SHA 为空,同样拒绝部署:宁可漏部署,不可覆写。
201+
LATEST_SHA=$(git ls-remote origin refs/heads/master | cut -f1)
202+
if [ "$GITHUB_SHA" != "$LATEST_SHA" ]; then
203+
echo "!! 本 run 提交 $GITHUB_SHA 不是 master 最新 $LATEST_SHA,拒绝部署以免覆写更新后的配置" >&2
204+
exit 1
205+
fi
206+
181207
TARGET_DIR="/www/wwwroot/java/openblog-message"
182208
TARGET_JAR="$TARGET_DIR/OpenBlog-message-1.0.0-SNAPSHOT.jar"
183209
@@ -222,6 +248,7 @@ jobs:
222248
needs: changes
223249
if: ${{ needs.changes.outputs.gateway == 'true' || github.event_name == 'workflow_dispatch' }}
224250
runs-on: ubuntu-latest
251+
timeout-minutes: 30
225252
env:
226253
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
227254

@@ -247,6 +274,7 @@ jobs:
247274
needs: build-gateway
248275
if: ${{ needs.build-gateway.result == 'success' || github.event_name == 'workflow_dispatch' }}
249276
runs-on: openblog-backend
277+
timeout-minutes: 30
250278

251279
steps:
252280
- name: Checkout(获取 deploy/gateway 下的 Docker 部署文件)
@@ -262,6 +290,16 @@ jobs:
262290
OPENBLOG_DEVICE_TOKEN_SECRET: ${{ secrets.OPENBLOG_DEVICE_TOKEN_SECRET }}
263291
run: |
264292
set -euo pipefail
293+
294+
# 只允许部署 master 的最新提交。旧 run(或被重跑的旧 run)若排在我们之后落到同一
295+
# TARGET_DIR,会把它那一版的 .env 覆写回来(实测同类问题会静默抹掉配置项)。
296+
# 取不到远端 SHA(网络故障)时 LATEST_SHA 为空,同样拒绝部署:宁可漏部署,不可覆写。
297+
LATEST_SHA=$(git ls-remote origin refs/heads/master | cut -f1)
298+
if [ "$GITHUB_SHA" != "$LATEST_SHA" ]; then
299+
echo "!! 本 run 提交 $GITHUB_SHA 不是 master 最新 $LATEST_SHA,拒绝部署以免覆写更新后的配置" >&2
300+
exit 1
301+
fi
302+
265303
TARGET_DIR="/www/wwwroot/java/openblog-gateway"
266304
TARGET_JAR="$TARGET_DIR/OpenBlog-gateway-1.0.0-SNAPSHOT.jar"
267305
@@ -305,6 +343,7 @@ jobs:
305343
needs: changes
306344
if: ${{ needs.changes.outputs.frontend == 'true' || github.event_name == 'workflow_dispatch' }}
307345
runs-on: ubuntu-latest
346+
timeout-minutes: 40
308347
env:
309348
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
310349

@@ -341,6 +380,7 @@ jobs:
341380
needs: build-frontend
342381
if: ${{ needs.build-frontend.result == 'success' }}
343382
runs-on: ubuntu-latest
383+
timeout-minutes: 45
344384

345385
steps:
346386
- name: Download release bundle

0 commit comments

Comments
 (0)