Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
sumeiqiao
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
xuchentao
sumeiqiao
Commits
0f249b2a
Commit
0f249b2a
authored
Jul 23, 2026
by
xuchentao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: simplify nginx ci job
parent
cba14336
Pipeline
#409
failed with stages
in 4 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
9 additions
and
52 deletions
+9
-52
.gitlab-ci.yml
.gitlab-ci.yml
+6
-46
CMS_README.md
CMS_README.md
+3
-6
No files found.
.gitlab-ci.yml
View file @
0f249b2a
...
@@ -93,7 +93,7 @@ deploy:
...
@@ -93,7 +93,7 @@ deploy:
-
echo "[deploy] 当前版本:$(readlink -f "$DEPLOY_ROOT/current")"
-
echo "[deploy] 当前版本:$(readlink -f "$DEPLOY_ROOT/current")"
# ── 4. 安装并验证 Nginx 配置 ─────────────────────────
# ── 4. 安装并验证 Nginx 配置 ─────────────────────────
#
使用参数固定的 sudo 命令安装 current release 中的配置,并在失败时恢复上一份
。
#
复制 current release 中的配置,检查语法后重新加载 Nginx
。
configure_nginx
:
configure_nginx
:
stage
:
nginx
stage
:
nginx
tags
:
tags
:
...
@@ -102,51 +102,11 @@ configure_nginx:
...
@@ -102,51 +102,11 @@ configure_nginx:
-
main
-
main
script
:
script
:
-
echo "[nginx] 开始配置公网入口:$PUBLIC_HOST"
-
echo "[nginx] 开始配置公网入口:$PUBLIC_HOST"
-
|
-
test -f "$DEPLOY_ROOT/current/deploy/nginx/sumeiqiao.conf" || (echo "缺少 Nginx 配置" && exit 2)
set -Eeuo pipefail
-
sudo -n /usr/bin/install -o root -g root -m 0644 "$DEPLOY_ROOT/current/deploy/nginx/sumeiqiao.conf" /etc/nginx/conf.d/sumeiqiao.conf
source_file="$DEPLOY_ROOT/current/deploy/nginx/sumeiqiao.conf"
-
sudo -n /usr/sbin/nginx -t
target_file="/etc/nginx/conf.d/sumeiqiao.conf"
-
sudo -n /usr/bin/systemctl reload nginx
backup_file="/etc/nginx/conf.d/sumeiqiao.conf.previous"
-
'
curl
--fail
--silent
--show-error
--max-time
5
--header
"Host:
$PUBLIC_HOST"
http://127.0.0.1/
>/dev/null'
resolved_source=$(readlink -f "$source_file")
case "$resolved_source" in
"$RELEASES_DIR"/*/deploy/nginx/sumeiqiao.conf) ;;
*) echo "Nginx 配置不在当前项目 release 中:$resolved_source" >&2; exit 2 ;;
esac
test -f "$source_file" || (echo "缺少 Nginx 配置:$source_file" && exit 2)
test ! -L "$target_file" || (echo "拒绝覆盖软链接:$target_file" && exit 2)
exec 9>"$SHARED_DIR/nginx-config.lock"
flock -x 9
had_previous=0
if [ -f "$target_file" ]; then
sudo -n /usr/bin/install -o root -g root -m 0644 "$target_file" "$backup_file"
had_previous=1
fi
restore_previous() {
if [ "$had_previous" = "1" ]; then
sudo -n /usr/bin/install -o root -g root -m 0644 "$backup_file" "$target_file"
else
sudo -n /usr/bin/rm -f -- "$target_file"
fi
sudo -n /usr/sbin/nginx -t || true
sudo -n /usr/bin/systemctl reload nginx || true
}
sudo -n /usr/bin/install -o root -g root -m 0644 "$source_file" "$target_file"
if ! sudo -n /usr/sbin/nginx -t; then
echo "Nginx 配置检查失败,正在恢复上一份配置" >&2
restore_previous
exit 1
fi
if ! sudo -n /usr/bin/systemctl reload nginx; then
echo "Nginx 重新加载失败,正在恢复上一份配置" >&2
restore_previous
exit 1
fi
-
curl --fail --silent --show-error --max-time 5 --header "Host
:
$PUBLIC_HOST" http://127.0.0.1/ >/dev/null
-
echo "[nginx] Nginx 配置与公网入口验证完成"
-
echo "[nginx] Nginx 配置与公网入口验证完成"
# ── 5. 验证并只保留当前 + 上一个成功版本 ─────────────
# ── 5. 验证并只保留当前 + 上一个成功版本 ─────────────
...
...
CMS_README.md
View file @
0f249b2a
...
@@ -106,7 +106,7 @@ CMS_DATA_DIR=/root/sumeiqiao/shared/cms-data
...
@@ -106,7 +106,7 @@ CMS_DATA_DIR=/root/sumeiqiao/shared/cms-data
CMS_BUILD_LOCK=/root/sumeiqiao/shared/site-build.lock
CMS_BUILD_LOCK=/root/sumeiqiao/shared/site-build.lock
```
```
CI/CD 应在新的 release 目录部署代码,不要在正在运行的目录执行
`git clean`
。仓库中的
`.gitlab-ci.yml`
兼容 GitLab 11.7,分为准备、安装、部署、配置 Nginx、验证五个阶段,每个阶段都会实时输出日志。安装依赖只操作尚未启用的独立 release;最终生产构建、切换 current 软链接、重启 PM2 和健康检查在同一把共享锁内完成。应用健康检查通过后才
安装 Nginx 配置,安装失败会恢复上一份配置
。健康检查失败时会自动切回上一版本。
CI/CD 应在新的 release 目录部署代码,不要在正在运行的目录执行
`git clean`
。仓库中的
`.gitlab-ci.yml`
兼容 GitLab 11.7,分为准备、安装、部署、配置 Nginx、验证五个阶段,每个阶段都会实时输出日志。安装依赖只操作尚未启用的独立 release;最终生产构建、切换 current 软链接、重启 PM2 和健康检查在同一把共享锁内完成。应用健康检查通过后才
复制 Nginx 配置、检查语法并 reload
。健康检查失败时会自动切回上一版本。
```
bash
```
bash
node
--env-file
=
/root/sumeiqiao/shared/.env scripts/run-with-site-lock.mjs
--
bash scripts/deploy-release.sh /root/sumeiqiao /root/sumeiqiao/releases/<release> sumeiqiao /usr/bin/pm2 /root/.pm2 1 http://127.0.0.1:8789/
node
--env-file
=
/root/sumeiqiao/shared/.env scripts/run-with-site-lock.mjs
--
bash scripts/deploy-release.sh /root/sumeiqiao /root/sumeiqiao/releases/<release> sumeiqiao /usr/bin/pm2 /root/.pm2 1 http://127.0.0.1:8789/
...
@@ -133,7 +133,7 @@ CMS_BUILD_LOCK=/root/sumeiqiao/shared/site-build.lock
...
@@ -133,7 +133,7 @@ CMS_BUILD_LOCK=/root/sumeiqiao/shared/site-build.lock
CMS_PORT=8789
CMS_PORT=8789
```
```
首次运行 pipeline 前,需要允许 Runner 执行参数固定的 Nginx 安装、检查
、恢复
和 reload 命令:
首次运行 pipeline 前,需要允许 Runner 执行参数固定的 Nginx 安装、检查和 reload 命令:
```
bash
```
bash
sudo
visudo
-f
/etc/sudoers.d/sumeiqiao-runner
sudo
visudo
-f
/etc/sudoers.d/sumeiqiao-runner
...
@@ -144,16 +144,13 @@ sudo visudo -f /etc/sudoers.d/sumeiqiao-runner
...
@@ -144,16 +144,13 @@ sudo visudo -f /etc/sudoers.d/sumeiqiao-runner
```
sudoers
```
sudoers
Cmnd_Alias SUMEIQIAO_NGINX = \
Cmnd_Alias SUMEIQIAO_NGINX = \
/usr/bin/install -o root -g root -m 0644 /root/sumeiqiao/current/deploy/nginx/sumeiqiao.conf /etc/nginx/conf.d/sumeiqiao.conf, \
/usr/bin/install -o root -g root -m 0644 /root/sumeiqiao/current/deploy/nginx/sumeiqiao.conf /etc/nginx/conf.d/sumeiqiao.conf, \
/usr/bin/install -o root -g root -m 0644 /etc/nginx/conf.d/sumeiqiao.conf /etc/nginx/conf.d/sumeiqiao.conf.previous, \
/usr/bin/install -o root -g root -m 0644 /etc/nginx/conf.d/sumeiqiao.conf.previous /etc/nginx/conf.d/sumeiqiao.conf, \
/usr/bin/rm -f -- /etc/nginx/conf.d/sumeiqiao.conf, \
/usr/sbin/nginx -t, \
/usr/sbin/nginx -t, \
/usr/bin/systemctl reload nginx
/usr/bin/systemctl reload nginx
gitlab-runner ALL=(root) NOPASSWD: SUMEIQIAO_NGINX
gitlab-runner ALL=(root) NOPASSWD: SUMEIQIAO_NGINX
```
```
保存后执行
`sudo visudo -cf /etc/sudoers.d/sumeiqiao-runner`
检查语法。CI 只会从
`/root/sumeiqiao/current`
读取本项目配置,并只会更新
`/etc/nginx/conf.d/sumeiqiao.conf`
。
不同 pipeline 的 Nginx 操作由共享目录中的文件锁串行执行。
保存后执行
`sudo visudo -cf /etc/sudoers.d/sumeiqiao-runner`
检查语法。CI 只会从
`/root/sumeiqiao/current`
读取本项目配置,并只会更新
`/etc/nginx/conf.d/sumeiqiao.conf`
。
多个 GitLab pipeline 即使同时进入部署阶段,也会由服务器共享锁依次执行;部署持锁时,文章后台不会排队受理发布操作,而会明确提示编辑人员稍后重试。
多个 GitLab pipeline 即使同时进入部署阶段,也会由服务器共享锁依次执行;部署持锁时,文章后台不会排队受理发布操作,而会明确提示编辑人员稍后重试。
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment