837 字
4 分钟
使用 Gitee Go 自动构建与部署 Astro 静态博客
使用 Gitee Go 自动构建与部署 Astro 静态博客
本文记录如何通过 Gitee Go 流水线(Pipeline),实现将 Astro 构建的静态博客自动部署到云主机,全程使用
pnpm并优化国内网络环境下的安装速度。
背景
我使用 Astro 搭建了一个静态博客,每次更新内容后都需要手动执行 pnpm run build 并上传 dist 目录到服务器。为了提升效率和自动化程度,我决定借助 Gitee Go(码云流水线) 实现:
- 代码推送到
master分支 - 自动安装依赖、构建项目
- 打包
dist为制品(Artifact) - 自动部署到我的云主机
整个过程无需人工干预,真正做到“提交即上线”。
一、项目配置要求
- 使用
pnpm作为包管理器(项目中包含preinstall: npx only-allow pnpm) - 构建输出目录为
./dist - 目标服务器路径:
/var/www/afishblog - Web 服务由 Nginx 提供
二、Gitee Go 流水线配置(gitee-go.yml)
version: '1.0'name: master-pipelinedisplayName: MasterPipelinetriggers: trigger: auto push: branches: include: - masterstages: - name: compile displayName: 编译 steps: - step: build@nodejs name: build_nodejs displayName: Node.js 构建 nodeVersion: 23.11.1 commands: - npm install -g pnpm - pnpm config set registry https://registry.npmmirror.com - pnpm install - pnpm run build artifacts: - name: BUILD_ARTIFACT path: - ./dist
- step: publish@general_artifacts name: publish_general_artifacts displayName: 上传制品 dependArtifact: BUILD_ARTIFACT artifactName: AfishBlogBuild
- name: deploy displayName: 部署 steps: - step: deploy@agent name: deploy_agent displayName: 主机部署 hostGroupID: ID: 2c2g hostID: - 2254eb10-cab9-424f-8455-95215da1e4de deployArtifact: - source: build name: AfishBlogBuild target: ~/gitee_go/deploy script: - '#!/bin/bash' - 'set -e' - 'ARTIFACT_PATH="/root/gitee_go/deploy/AfishBlogBuild.tar.gz"' - 'TARGET_DIR="/var/www/afishblog"' - 'TEMP_DIR="/tmp/deploy_temp"' - 'mkdir -p "$TARGET_DIR"' - 'rm -rf "${TARGET_DIR:?}"/*' - 'mkdir -p "$TEMP_DIR"' - 'tar -zxvf "$ARTIFACT_PATH" -C "$TEMP_DIR"' - 'if [ -d "$TEMP_DIR/dist" ]; then' - ' mv "$TEMP_DIR/dist"/* "$TARGET_DIR/"' - ' mv "$TEMP_DIR/dist"/.* "$TARGET_DIR/" 2>/dev/null || true' - 'elif [ -f "$TEMP_DIR/index.html" ]; then' - ' mv "$TEMP_DIR"/* "$TARGET_DIR/"' - 'else' - ' echo "错误: 无法识别制品结构"; ls -la "$TEMP_DIR/"; exit 1' - 'fi' - 'rm -rf "$TEMP_DIR"' - 'chmod -R 755 "$TARGET_DIR"'💡 关键点说明:
- 使用
https://registry.npmmirror.com(淘宝 NPM 镜像)加速pnpm install- 制品命名为
AfishBlogBuild,部署时自动下载为.tar.gz- 部署脚本正确识别
dist/目录结构并移动文件
三、常见问题与解决
❌ 问题1:pnpm install 太慢
原因:默认访问 registry.npmjs.org,国内网络延迟高。
解决:强制指定国内镜像源:
pnpm config set registry https://registry.npmmirror.com❌ 问题2:部署时报错 “无法识别制品包结构”
原因:脚本只检查了 build/ 目录,但 Astro 默认输出到 dist/。
解决:在部署脚本中增加对 dist/ 的判断(见上文 YAML 中的 if [ -d "$TEMP_DIR/dist" ])。
❌ 问题3:权限不足导致 Nginx 无法读取文件
解决:部署后设置权限:
chmod -R 755 /var/www/afishblog四、效果验证
- 在本地修改一篇博客文章
git push origin master- 几十秒后,Gitee Go 完成构建与部署
- 刷新网站,新内容已上线 ✅
五、总结
通过 Gitee Go,我们实现了:
- ✅ 全自动化构建与部署
- ✅ 利用国内镜像加速依赖安装
- ✅ 安全、可靠的制品传递机制
- ✅ 零停机更新(静态文件覆盖无影响)
这套方案适用于所有基于 Astro、Vite、Next.js(静态导出)等 的静态站点,只需微调输出目录即可复用。
小贴士可进一步集成缓存(如缓存
pnpm store)、失败通知(企业微信/钉钉)、或 CDN 刷新,打造更完善的 DevOps 流程。
相关链接:
作者:Afish
最后更新:2025-12-04
使用 Gitee Go 自动构建与部署 Astro 静态博客
https://fuwari.vercel.app/posts/nginx/gitee_go/