70 lines
4.2 KiB
Diff
70 lines
4.2 KiB
Diff
From 4d39afd23f84e151bc03488cf47661b3ba9db843 Mon Sep 17 00:00:00 2001
|
||
From: HenryDu8133 <813367384@qq.com>
|
||
Date: Sat, 12 Sep 2026 00:54:20 +0800
|
||
Subject: [PATCH 41/58] =?UTF-8?q?fix(ci):=20replace=20heredoc-based=20ENV?=
|
||
=?UTF-8?q?=5FSH=20with=20printf=20%q=20pipe=20=E2=86=92=20resolve=20yaml?=
|
||
=?UTF-8?q?=20L544=20could=20not=20find=20expected=20':'=20colon=20false-p?=
|
||
=?UTF-8?q?ositive=20+=20bash=20-s=20positional=20arg=20for=20env=20source?=
|
||
MIME-Version: 1.0
|
||
Content-Type: text/plain; charset=UTF-8
|
||
Content-Transfer-Encoding: 8bit
|
||
|
||
---
|
||
.gitea/workflows/deploy.yml | 37 ++++++++++++-------------------------
|
||
1 file changed, 12 insertions(+), 25 deletions(-)
|
||
|
||
diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml
|
||
index acfbcaa..4b4df13 100644
|
||
--- a/.gitea/workflows/deploy.yml
|
||
+++ b/.gitea/workflows/deploy.yml
|
||
@@ -536,34 +536,21 @@ jobs:
|
||
# 本地预检查:ssh 先连上跑 whoami 确认连通,避免 20 分钟后才发现连不上
|
||
ssh "${SSH_OPTS[@]}" "${DEPLOY_USER}@${DEPLOY_HOST}" "whoami; docker --version; docker compose version"
|
||
|
||
- # 关键修复:远端 bash 前置 ENV=val 语法在 dash/sh 远端不认,
|
||
- # 改为先把变量用 printf 写到远端 /tmp/deploy_env.$$ 再远端 source 它,100% 可靠
|
||
+ # 关键修复:远端 bash 前置 ENV=val 语法在 dash/sh 远端不认,变量全空。
|
||
+ # 用 printf + \n 拼接完整 shell 脚本通过 stdin 注入到 ssh 远端 cat,
|
||
+ # 不用 heredoc,避免 YAML 冒号/缩进解析误判。
|
||
ENV_SH="/tmp/deploy_env_$$"
|
||
- # 注意:${IMAGE_NEW} / ${DEPLOY_PATH} 等在本地 shell 展开,不是远端,所以 heredoc 用 "" 双引号
|
||
- ssh "${SSH_OPTS[@]}" "${DEPLOY_USER}@${DEPLOY_HOST}" "cat > ${ENV_SH}" <<ENV_SH_EOF
|
||
-export IMAGE_NEW="${IMAGE_NEW}"
|
||
-export IMAGE_LATEST="${IMAGE_LATEST}"
|
||
-export DEPLOY_PATH="${DEPLOY_PATH}"
|
||
-export GITEA_HOST="${GITEA_HOST}"
|
||
-export GH_PROXY_PREFIX="${GH_PROXY_PREFIX}"
|
||
-export REGISTRY_PULL_USER="${REGISTRY_PULL_USER}"
|
||
-export REGISTRY_PULL_TOKEN="${REGISTRY_PULL_TOKEN}"
|
||
-export IMAGE_NAME="${IMAGE_NAME}"
|
||
-export NUXT_PUBLIC_SITE_URL="${NUXT_PUBLIC_SITE_URL}"
|
||
-export GITHUB_SERVER_URL="${GITHUB_SERVER_URL}"
|
||
-export GITHUB_REPOSITORY="${GITHUB_REPOSITORY}"
|
||
-export GITHUB_REF_NAME="${GITHUB_REF_NAME}"
|
||
-ENV_SH_EOF
|
||
+ ENV_PAYLOAD="$(printf 'export IMAGE_NEW=%q\nexport IMAGE_LATEST=%q\nexport DEPLOY_PATH=%q\nexport GITEA_HOST=%q\nexport GH_PROXY_PREFIX=%q\nexport REGISTRY_PULL_USER=%q\nexport REGISTRY_PULL_TOKEN=%q\nexport IMAGE_NAME=%q\nexport NUXT_PUBLIC_SITE_URL=%q\nexport GITHUB_SERVER_URL=%q\nexport GITHUB_REPOSITORY=%q\nexport GITHUB_REF_NAME=%q\n' \
|
||
+ "${IMAGE_NEW}" "${IMAGE_LATEST}" "${DEPLOY_PATH}" "${GITEA_HOST}" "${GH_PROXY_PREFIX}" \
|
||
+ "${REGISTRY_PULL_USER}" "${REGISTRY_PULL_TOKEN}" "${IMAGE_NAME}" "${NUXT_PUBLIC_SITE_URL}" \
|
||
+ "${GITHUB_SERVER_URL}" "${GITHUB_REPOSITORY}" "${GITHUB_REF_NAME}")"
|
||
+ printf '%s' "${ENV_PAYLOAD}" | ssh "${SSH_OPTS[@]}" "${DEPLOY_USER}@${DEPLOY_HOST}" "cat > ${ENV_SH}"
|
||
echo "[Deploy] env script written to ${ENV_SH} on remote"
|
||
+ # 立即回读验证远端文件非空 & IMAGE_NEW 非空,避免后面空跑
|
||
+ ssh "${SSH_OPTS[@]}" "${DEPLOY_USER}@${DEPLOY_HOST}" "set -e; ls -la ${ENV_SH}; grep -q IMAGE_NEW ${ENV_SH} && echo '[Deploy] env_sh IMAGE_NEW line OK'"
|
||
|
||
- ssh "${SSH_OPTS[@]}" "${DEPLOY_USER}@${DEPLOY_HOST}" \
|
||
- "chmod +x ${ENV_SH} && bash -c 'source ${ENV_SH} && rm -f ${ENV_SH}'" <<'REMOTE_SCRIPT'
|
||
- # 注意:上面 source 的环境变量会自动继承到后面的 REMOTE_SCRIPT bash 子进程中
|
||
- true
|
||
-REMOTE_SCRIPT
|
||
-
|
||
- # 再次用 bash 显式 source env,然后执行真正的 deploy 脚本(双源保证)
|
||
- ssh "${SSH_OPTS[@]}" "${DEPLOY_USER}@${DEPLOY_HOST}" "bash -s -- ${ENV_SH}" <<'REMOTE_SCRIPT_MAIN'
|
||
+ # ssh 远端 bash -s 第一个参数传 $ENV_SH 路径,主脚本 source 它并做非空断言
|
||
+ ssh "${SSH_OPTS[@]}" "${DEPLOY_USER}@${DEPLOY_HOST}" "bash -s -- '${ENV_SH}'" <<'REMOTE_SCRIPT_MAIN'
|
||
set -euxo pipefail
|
||
ENV_SH="$1"
|
||
if [ -f "$ENV_SH" ]; then
|
||
--
|
||
2.45.1.windows.1
|
||
|