Jenkins CI/CD自动化发布跨境网站更新新手实操教程
使用 Jenkins 实现跨境网站的 CI/CD 自动化发布,核心思路是:在代码仓库(如 GitHub)配置 Webhook,每次提交代码后自动触发 Jenkins 流水线,拉取最新代码、运行构建、再将制品上传至海外服务器并重启服务。
这套流程可以消除手动连接海外服务器的延迟,让更新在几分钟内完成。
本文以宝塔面板 + Jenkins + 泽御云香港云服务器为例,零基础读者按步骤操作即可落地。
环境准备:你需要哪些条件
在动手配置之前,请先确认以下三样东西已就绪:
- 一台能连通内外网的 Jenkins 服务器(建议使用 2GB 以上内存的云服务器,例如泽御云香港节点,拉取 GitHub 代码更快)
- 一台目标跨境服务器(运行你的网站,本文假设系统为 CentOS 7+,已安装宝塔面板或 Nginx)
- 一个 Git 仓库(托管你的网站代码,推荐 GitHub 或 Gitee)
如果你还没有 Jenkins,可以登录服务器执行以下命令安装(以 CentOS 为例):
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
sudo yum install -y jenkins
sudo systemctl start jenkins && sudo systemctl enable jenkins
安装完成后访问 http:,
//你的服务器IP:
8080
按提示获取初始密码(cat /var/lib/jenkins/secrets/initialAdminPassword)并安装推荐插件。
配置 Jenkins Pipeline:从拉取代码到远程部署
登录 Jenkins 后,点击“新建任务” -> “Pipeline”,命名为 cross-border-deploy。
然后在流水线定义中选择“Pipeline script”,粘贴以下脚本(按你的信息替换仓库地址、服务器 IP 和路径):
pipeline {
agent any
stages {
stage('Checkout') {
steps {
git branch: 'main', url: 'https://github.com/你的用户名/你的仓库.git'
}
}
stage('Build') {
steps {
sh 'npm install && npm run build' // 根据项目技术栈调整
}
}
stage('Deploy') {
steps {
sshPublisher(publishers: [
sshPublisherDesc(
configName: 'target-server',
transfers: [
sshTransfer(
sourceFiles: 'dist/**', // 构建产物的相对路径
remoteDirectory: '/www/wwwroot/你的网站目录',
removePrefix: 'dist'
)
]
)
])
}
}
stage('Restart Service') {
steps {
sshCommand remote: 'target-server', command: 'sudo systemctl restart nginx || /etc/init.d/nginx restart'
}
}
}
}
注意:
使用 sshPublisher 需要先安装“Publish Over SSH”插件,
并在“系统管理”->“系统配置”中添加 SSH Server,
填写目标服务器的 IP、
用户名和私钥。
配置 Git Webhook 实现自动触发
为了让每次代码推送都自动跑流水线,需要在 GitHub 仓库设置 Webhook。
- 进入 GitHub 仓库 -> Settings -> Webhooks -> Add webhook
- Payload URL 填写
http://你的Jenkins服务器IP:8080/github-webhook/(注意最后的斜杠) - Content type 选择
application/json - 勾选“Just the push event”
- 点击 Add webhook
回到 Jenkins,在 Pipeline 任务的“构建触发器”中勾选“GitHub hook trigger for GITScm polling”。
保存后,往仓库推送一次代码,观察是否自动触发构建。
跨境部署的常见坑与避障指南
- SSH 连接超时:跨境网络不稳定,建议在 Jenkins 系统配置里将 SSH Server 的“Timeout”调大到 30 秒以上。
- 权限不足:目标服务器上 Jenkins 使用的用户(一般是 root 或 www)需要具有目标目录的写权限。宝塔面板默认目录为
/www/wwwroot/,可使用chown -R www:www /www/wwwroot/调整。 - 构建产物路径错误:务必确认
sourceFiles和removePrefix匹配实际目录结构。可以先手动在 Jenkins 工作空间运行ls dist/检查。 - Webhook 未触发:检查 Jenkins 服务器防火墙是否放行 8080 端口,GitHub 的 Webhook 日志里会显示请求状态(http 200 为成功)。
验证自动化发布是否生效
完成以上配置后,测试流程:
- 本地修改网站首页(例如将标题改为“v2”),
git commit并push到 main 分支 - 观察 Jenkins 控制台输出:Pipeline 应依次执行 Checkout -> Build -> Deploy -> Restart
- 打开跨境网站,刷新页面,查看修改是否已上线
- 如果失败,进入 Jenkins 任务的历史记录,点击对应构建编号,查看“Console Output”中的报错信息
常见问题解答(FAQ)
Q1:Jenkins 部署后网站没有变化,怎么回事?
A:先检查 Deploy 步骤中远程目录是否正确;再确认目标服务器上的 Nginx 或 Apache 是否已经重启。可以在 Console Output 中 grep “Restart”看看是否执行成功。
Q2:国内服务器 Jenkins 连接海外服务器特别慢,有哪些优化方法?
A:建议将 Jenkins 服务器也部署在靠近目标的位置,例如使用泽御云香港节点作为 Jenkins 主机;或使用 SSH 多路复用(在 ~/.ssh/config 添加 ControlMaster auto)。
Q3:使用宝塔面板时,如何配合 Jenkins 实现自动发布?
A:宝塔自带“宝塔插件”可放行端口,但更简单的方法是把 Jenkins 的 SSH 目标指向宝塔服务器,部署到 /www/wwwroot/你的站点,然后通过 Jenkins 的 Remote SSH 执行 bt restart(需要宝塔API)或重启 Nginx。
Q4:Pipeline 中如何在部署前备份原文件?
A:在 Deploy 步骤前增加一个 stage,使用 sshCommand 执行备份命令,例如 tar czf /backup/$(date +%Y%m%d%H%M%S).tar.gz /www/wwwroot/你的目录,然后再覆盖部署。