Jenkins CI/CD自动化建站发布
Jenkins CI/CD自动化建站发布:零基础搭建网站自动部署流程
如果你每次更新网站都要手动上传文件、重启服务,既浪费时间又容易出错。
Jenkins 作为流行的持续集成工具,能帮你把“代码推送 → 构建 → 发布”这一套流程自动化。
本文我会站在服务器运维的角度,带你从零开始实现 Jenkins CI/CD 自动化建站发布,每一步都给你具体的命令和操作路径。
准备阶段:你需要哪些东西
在动手之前,先检查这几样:
- 一台能运行 Jenkins 的服务器(建议 2 核 4G 以上,系统用 Ubuntu 20.04 或 CentOS 7+)。
- 网站源码仓库(GitHub、GitLab 或自建 Git 服务器皆可)。
- 目标服务器(就是放网站文件并提供服务的那台机器),确保 Jenkins 服务器能通过 SSH 访问它。
- 已经安装好 Jenkins:官方推荐用 war 包或 docker 安装,新手建议直接用
apt或yum装长期支持的稳定版。比如 Ubuntu 下:
sudo apt update
sudo apt install openjdk-11-jdk -y
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt update
sudo apt install jenkins -y
安装完成后访问 http://你的服务器IP:8080,用初始化密码(在 /var/lib/jenkins/secrets/initialAdminPassword)解锁。
另外推荐安装几个常用插件:Git Plugin、Publish Over SSH、Timestamper、Build Timestamp,
在“系统管理 → 插件管理”里搜索安装即可。
设置 Jenkins 项目:关联仓库与部署任务
登录 Jenkins 后台,点击“新建任务”,输入任务名称(比如 my-website-deploy),选择“自由风格软件项目”。
然后在配置页依次完成:
- 源码管理:选择 Git,填入仓库地址。如果仓库需要认证,点“添加”输入账号密码或 SSH 密钥。
- 构建触发器:勾选“Poll SCM”,日程写
H/5 * * * *表示每 5 分钟检查一次代码变化(或者配合 Webhook 实时触发)。 - 构建环境:如果部署脚本依赖时间戳或版本号,可勾选“Set build timestamp”和“Add timestamps to the Console Output”。
- 构建步骤:点“增加构建步骤”,选择“Send files or execute commands over SSH”。提前在“系统管理 → 系统配置”的 Publish over SSH 里配置好目标服务器(SSH Server Name、主机地址、用户名、私钥)。
SSH 服务器配置示例:
- Name:
web-server - Hostname:
192.168.1.100 - Username:
deploy - Private Key:粘贴你的私钥内容
然后在构建步骤里填写:
- SSH Server:选择刚配的
web-server - Transfer Set Source files:留空(因为我们直接用 exec command 拉代码再部署)
- Exec command:输入部署脚本(见下文)
部署脚本怎么写:从拉代码到刷新服务
Exec command 里执行的 Shell 脚本是关键。
假设网站放在 /var/www/html,Nginx 负责静态文件服务。
一个通用脚本示例如下:
#!/bin/bash
cd /var/www/html
# 如果还没有仓库,先克隆;否则拉取最新
if [ ! -d ".git" ]; then
git clone git@github.com:yourname/yourrepo.git .
else
git pull origin main
fi
# 如果有构建步骤(如编译前端),这里执行
# npm install && npm run build
# 重启 Nginx 或相应服务(可选,静态站点不需要)
sudo systemctl reload nginx || echo "Nginx reload skipped"
echo "Deploy completed at $(date)"
注意:确保 Jenkins 服务器的 SSH 免密登录到目标服务器。
可以在 Jenkins 服务器上用 ssh-copy-id deploy@192.168.1.100 完成。
目标服务器上的 deploy 用户需要有对 /var/www/html 的写权限,以及 sudo 执行权限(需在 /etc/sudoers 中添加类似 deploy ALL=(ALL) NOPASSWD: /usr/sbin/nginx)。
高频问题与避坑指南
Q:构建时报 “Permission denied (publickey)”?
A:检查 Jenkins 系统配置里 SSH Server 的私钥是否正确,确保目标服务器 ~/.ssh/authorized_keys 有对应的公钥。可以通过 Jenkins 服务器的命令行先手动 ssh 测试。
Q:Git pull 失败,提示 “Host key verification failed”?
A:首次连接需要确认主机指纹。在 Jenkins 服务器上用 ssh -T git@github.com 手动接受一次,或把 StrictHostKeyChecking no 加到 .ssh/config。
Q:构建成功了,网站却没有更新?
A:分步排查:1)登录目标服务器检查目录文件是否更新;2)确认构建脚本中 git pull 的分支是否正确;3)静态站点如果用了 CDN 缓存,需要刷新 CDN。
验证效果:这次部署真的自动了吗?
手动修改代码推送到仓库(比如修改首页标题),等待 Poll SCM 触发(最多 5 分钟),或者你也可以在仓库设置 Webhook 指向 Jenkins(http://JenkinsIP:8080/github-webhook/)。
触发后进入任务页面查看构建历史,点进最新构建,查看“控制台输出”。
- 如果看到
git pull拉取了新代码,并且Exec command返回成功(Exit code 0),说明部署正常。 - 打开网站确认改动是否生效。对于纯静态站点,刷新页面就能看到;动态站点可能需要清缓存。
最后,建议把 Jenkins 和网站监控结合起来,比如部署失败时发邮件告警。
你还可以优化流程:加入测试步骤、使用 Pipeline 插件做可视化流水线。
本文示范的 Jenkins CI/CD 自动化建站发布流程,已经能覆盖绝大多数个人及团队网站的日常更新需求。
如果你在实操中遇到其他报错,欢迎在评论区留言截图,我会帮你看日志排查。