根本原因: archive-to-main步骤中仍有大量使用单引号的命令,包含双引号嵌套, 导致Woodpecker CI解析失败。 解决方案: 1. 创建scripts/archive-to-main.sh脚本封装所有archive操作 2. 简化.woodpecker.yml中的archive-to-main步骤为调用脚本 3. 彻底避免YAML引号嵌套问题 优势: - 完全避免YAML引号问题 - 脚本更易维护和调试 - 清晰的职责分离
This commit is contained in:
+2
-64
@@ -168,70 +168,8 @@ steps:
|
||||
depends_on:
|
||||
- build-and-deploy
|
||||
commands:
|
||||
- echo "=== Archiving to main branch (增强可靠性版本) ==="
|
||||
- echo "当前容器信息:"
|
||||
- 'echo "主机名: $(hostname)"'
|
||||
- 'echo "IP地址: $(hostname -i)"'
|
||||
- echo ""
|
||||
- echo ""
|
||||
- echo "2. 配置SSH环境"
|
||||
- mkdir -p ~/.ssh
|
||||
- printf '%s\n' "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
|
||||
- chmod 600 ~/.ssh/id_rsa
|
||||
- echo "✅ SSH私钥文件已创建"
|
||||
- 'ls -la ~/.ssh/id_rsa'
|
||||
- 'wc -c < ~/.ssh/id_rsa'
|
||||
- echo ""
|
||||
- echo "3. 配置Git服务器主机密钥"
|
||||
- ssh-keyscan -H -p 22 git.f.novalon.cn >> ~/.ssh/known_hosts
|
||||
- echo "✅ Git服务器主机密钥已添加"
|
||||
- echo ""
|
||||
- echo "4. 增强网络连接测试"
|
||||
- echo "测试DNS解析:"
|
||||
- 'dig +short git.f.novalon.cn || nslookup git.f.novalon.cn || echo "DNS解析测试完成"'
|
||||
- echo "测试端口连通性:"
|
||||
- 'timeout 10 nc -zv git.f.novalon.cn 22 && echo "✅ SSH端口可达" || echo "❌ SSH端口不可达"'
|
||||
- echo ""
|
||||
- echo "5. 增强SSH连接测试"
|
||||
- echo "测试SSH连接到Git服务器..."
|
||||
- 'timeout 15 ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 -o BatchMode=yes -T git@git.f.novalon.cn "echo \"✅ SSH连接成功\"" 2>&1 || echo "❌ SSH连接失败,但继续执行"'
|
||||
- echo ""
|
||||
- echo "6. 配置Git用户信息"
|
||||
- git config --global user.email "ci@novalon.cn"
|
||||
- git config --global user.name "Woodpecker CI"
|
||||
- echo "✅ Git用户信息已配置"
|
||||
- echo ""
|
||||
- echo "7. 配置Git远程仓库"
|
||||
- git remote set-url origin git@git.f.novalon.cn:novalon/novalon-website.git
|
||||
- echo "✅ Git远程仓库已配置"
|
||||
- echo ""
|
||||
- echo "8. 增强Git远程访问测试"
|
||||
- echo "测试Git远程仓库访问权限..."
|
||||
- 'timeout 10 git ls-remote origin --heads 2>&1 | head -5 && echo "✅ Git远程访问成功" || echo "❌ Git远程访问失败,但继续执行"'
|
||||
- echo ""
|
||||
- echo "9. 执行归档操作(增强错误处理)"
|
||||
- 'export CURRENT_BRANCH="${CI_COMMIT_BRANCH}"'
|
||||
- 'echo "当前分支: $CURRENT_BRANCH"'
|
||||
- 'echo "提交SHA: ${CI_COMMIT_SHA:0:7}"'
|
||||
- echo ""
|
||||
- echo "9.1 切换到main分支"
|
||||
- 'git checkout main || { echo "❌ 切换到main分支失败"; exit 1; }'
|
||||
- echo ""
|
||||
- echo "9.2 拉取最新main分支"
|
||||
- 'git pull origin main --no-rebase || { echo "❌ 拉取main分支失败"; exit 1; }'
|
||||
- echo ""
|
||||
- echo "9.3 合并当前分支到main"
|
||||
- 'git merge "$CURRENT_BRANCH" --no-ff -m "archive: $CURRENT_BRANCH → main [CI]" || { echo "❌ 合并分支失败"; exit 1; }'
|
||||
- echo ""
|
||||
- echo "9.4 创建版本标签"
|
||||
- 'export VERSION_TAG="v$(date +%Y.%m.%d)-${CI_COMMIT_SHA:0:7}"'
|
||||
- 'git tag -a "$VERSION_TAG" -m "Release: $CURRENT_BRANCH → $VERSION_TAG [CI]" || { echo "❌ 创建标签失败"; exit 1; }'
|
||||
- echo ""
|
||||
- echo "9.5 推送到远程仓库"
|
||||
- 'git push origin main || { echo "❌ 推送main分支失败"; exit 1; }'
|
||||
- 'git push origin --tags || { echo "❌ 推送标签失败"; exit 1; }'
|
||||
- echo ""
|
||||
- 'echo "✅ 归档成功完成!版本: $VERSION_TAG"'
|
||||
- chmod +x scripts/archive-to-main.sh
|
||||
- ./scripts/archive-to-main.sh
|
||||
when:
|
||||
event:
|
||||
- push
|
||||
|
||||
Executable
+80
@@ -0,0 +1,80 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "=== Archiving to main branch ==="
|
||||
echo "当前容器信息:"
|
||||
echo "主机名: $(hostname)"
|
||||
echo "IP地址: $(hostname -i)"
|
||||
echo ""
|
||||
|
||||
echo "2. 配置SSH环境"
|
||||
mkdir -p ~/.ssh
|
||||
printf '%s\n' "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
|
||||
chmod 600 ~/.ssh/id_rsa
|
||||
echo "✅ SSH私钥文件已创建"
|
||||
ls -la ~/.ssh/id_rsa
|
||||
wc -c < ~/.ssh/id_rsa
|
||||
echo ""
|
||||
|
||||
echo "3. 配置Git服务器主机密钥"
|
||||
ssh-keyscan -H -p 22 git.f.novalon.cn >> ~/.ssh/known_hosts
|
||||
echo "✅ Git服务器主机密钥已添加"
|
||||
echo ""
|
||||
|
||||
echo "4. 增强网络连接测试"
|
||||
echo "测试DNS解析:"
|
||||
dig +short git.f.novalon.cn || nslookup git.f.novalon.cn || echo "DNS解析测试完成"
|
||||
echo "测试端口连通性:"
|
||||
timeout 10 nc -zv git.f.novalon.cn 22 && echo "✅ SSH端口可达" || echo "❌ SSH端口不可达"
|
||||
echo ""
|
||||
|
||||
echo "5. 增强SSH连接测试"
|
||||
echo "测试SSH连接到Git服务器..."
|
||||
timeout 15 ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 -o BatchMode=yes -T git@git.f.novalon.cn "echo '✅ SSH连接成功'" 2>&1 || echo "❌ SSH连接失败,但继续执行"
|
||||
echo ""
|
||||
|
||||
echo "6. 配置Git用户信息"
|
||||
git config --global user.email "ci@novalon.cn"
|
||||
git config --global user.name "Woodpecker CI"
|
||||
echo "✅ Git用户信息已配置"
|
||||
echo ""
|
||||
|
||||
echo "7. 配置Git远程仓库"
|
||||
git remote set-url origin git@git.f.novalon.cn:novalon/novalon-website.git
|
||||
echo "✅ Git远程仓库已配置"
|
||||
echo ""
|
||||
|
||||
echo "8. 增强Git远程访问测试"
|
||||
echo "测试Git远程仓库访问权限..."
|
||||
timeout 10 git ls-remote origin --heads 2>&1 | head -5 && echo "✅ Git远程访问成功" || echo "❌ Git远程访问失败,但继续执行"
|
||||
echo ""
|
||||
|
||||
echo "9. 执行归档操作(增强错误处理)"
|
||||
export CURRENT_BRANCH="${CI_COMMIT_BRANCH}"
|
||||
echo "当前分支: $CURRENT_BRANCH"
|
||||
echo "提交SHA: ${CI_COMMIT_SHA:0:7}"
|
||||
echo ""
|
||||
|
||||
echo "9.1 切换到main分支"
|
||||
git checkout main || { echo "❌ 切换到main分支失败"; exit 1; }
|
||||
echo ""
|
||||
|
||||
echo "9.2 拉取最新main分支"
|
||||
git pull origin main --no-rebase || { echo "❌ 拉取main分支失败"; exit 1; }
|
||||
echo ""
|
||||
|
||||
echo "9.3 合并当前分支到main"
|
||||
git merge "$CURRENT_BRANCH" --no-ff -m "archive: $CURRENT_BRANCH → main [CI]" || { echo "❌ 合并分支失败"; exit 1; }
|
||||
echo ""
|
||||
|
||||
echo "9.4 创建版本标签"
|
||||
export VERSION_TAG="v$(date +%Y.%m.%d)-${CI_COMMIT_SHA:0:7}"
|
||||
git tag -a "$VERSION_TAG" -m "Release: $CURRENT_BRANCH → $VERSION_TAG [CI]" || { echo "❌ 创建标签失败"; exit 1; }
|
||||
echo ""
|
||||
|
||||
echo "9.5 推送到远程仓库"
|
||||
git push origin main || { echo "❌ 推送main分支失败"; exit 1; }
|
||||
git push origin --tags || { echo "❌ 推送标签失败"; exit 1; }
|
||||
echo ""
|
||||
|
||||
echo "✅ 归档成功完成!版本: $VERSION_TAG"
|
||||
Reference in New Issue
Block a user