837 字
4 分钟
使用 Gitee Go 自动构建与部署 Astro 静态博客

使用 Gitee Go 自动构建与部署 Astro 静态博客#

本文记录如何通过 Gitee Go 流水线(Pipeline),实现将 Astro 构建的静态博客自动部署到云主机,全程使用 pnpm 并优化国内网络环境下的安装速度。

背景#

我使用 Astro 搭建了一个静态博客,每次更新内容后都需要手动执行 pnpm run build 并上传 dist 目录到服务器。为了提升效率和自动化程度,我决定借助 Gitee Go(码云流水线) 实现:

  1. 代码推送到 master 分支
  2. 自动安装依赖、构建项目
  3. 打包 dist 为制品(Artifact)
  4. 自动部署到我的云主机

整个过程无需人工干预,真正做到“提交即上线”。


一、项目配置要求#

  • 使用 pnpm 作为包管理器(项目中包含 preinstall: npx only-allow pnpm
  • 构建输出目录为 ./dist
  • 目标服务器路径:/var/www/afishblog
  • Web 服务由 Nginx 提供

二、Gitee Go 流水线配置(gitee-go.yml#

version: '1.0'
name: master-pipeline
displayName: MasterPipeline
triggers:
trigger: auto
push:
branches:
include:
- master
stages:
- 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,国内网络延迟高。
解决:强制指定国内镜像源:

Terminal window
pnpm config set registry https://registry.npmmirror.com

❌ 问题2:部署时报错 “无法识别制品包结构”#

原因:脚本只检查了 build/ 目录,但 Astro 默认输出到 dist/
解决:在部署脚本中增加对 dist/ 的判断(见上文 YAML 中的 if [ -d "$TEMP_DIR/dist" ])。

❌ 问题3:权限不足导致 Nginx 无法读取文件#

解决:部署后设置权限:

Terminal window
chmod -R 755 /var/www/afishblog

四、效果验证#

  1. 在本地修改一篇博客文章
  2. git push origin master
  3. 几十秒后,Gitee Go 完成构建与部署
  4. 刷新网站,新内容已上线 ✅

五、总结#

通过 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/
作者
江湖一条鱼
发布于
2025-12-01
许可协议
CC BY-NC-SA 4.0