You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何让BitBucket直接推送代码至Web服务器以替代手动上传?

当然有办法!完全可以让Bitbucket自动把代码部署到Web服务器,彻底告别手动FTP上传的麻烦,既发挥Git的版本控制优势,还能避免漏传、错传文件的问题。下面是几种实用的方案,按推荐度排序:

方案1:Bitbucket Pipelines(官方推荐,最可靠)

这是Bitbucket自带的CI/CD工具,配置完成后,每次你推代码到Bitbucket,它都会自动触发部署流程,全程无需手动干预。

步骤如下:

  1. 先启用Pipelines:打开你的Bitbucket仓库,进入「Settings」→「Pipelines」,点击启用开关。
  2. 在本地项目根目录创建bitbucket-pipelines.yml配置文件,示例脚本(用SFTP上传,比FTP安全):
# 用Python镜像做基础环境,也可以选其他适合你项目的镜像
image: python:3.9

pipelines:
  default:
    - step:
        name: 部署到Web服务器
        script:
          # 安装SSH客户端,用于SFTP上传
          - apt-get update && apt-get install -y openssh-client
          # 把Bitbucket仓库变量里的私钥存到本地,设置权限
          - echo "$SSH_PRIVATE_KEY" > private_key && chmod 600 private_key
          # 把项目文件上传到服务器的Web根目录,替换成你的实际路径和账号
          - scp -i private_key -r ./dist/* your-server-user@your-server-ip:/var/www/html/
        # 如果需要保存构建产物,可以配置artifacts,这里按需添加
        artifacts:
          - dist/**
  1. 配置仓库变量:回到Bitbucket仓库的「Settings」→「Repository variables」,添加SSH_PRIVATE_KEY变量,值为你的Web服务器SSH私钥内容(注意不要带多余空格)。另外,服务器用户名、IP也可以存成变量,方便后续修改。
  2. 测试:把bitbucket-pipelines.yml推到Bitbucket,看看Pipelines会不会自动执行部署,检查服务器上的代码是否更新。

如果你的服务器只支持FTP,也可以用lftp工具替代scp,在脚本里安装lftp后执行上传命令即可。

方案2:Webhook + 服务器端Git拉取脚本

如果不想用Pipelines,也可以通过Webhook触发服务器上的自定义脚本,实时拉取最新代码:

  1. 配置Bitbucket Webhook:进入仓库「Settings」→「Webhooks」,新建一个Webhook,URL填你服务器上的部署脚本地址(比如https://your-domain.com/deploy.php),触发事件选择「Repository push」。
  2. 服务器端准备部署脚本:
    • 先把Web服务器的根目录初始化为Git仓库,执行git init,然后关联你的Bitbucket远程仓库:git remote add origin git@bitbucket.org:your-username/your-repo.git
    • 写一个脚本(比如PHP或Shell),核心逻辑是:
      • 验证Bitbucket的Webhook签名(防止恶意请求,Bitbucket会在请求头里带签名信息)
      • 切换到Web根目录,执行git pull origin main(替换成你的主分支名)
    • 给脚本设置正确的权限,确保服务器能执行它。
  3. 测试:推代码到Bitbucket,看服务器是否自动拉取了最新代码。
方案3:定时拉取(简易版,适合小型项目)

如果以上两种都觉得复杂,还有个零配置成本的简易方案:

  1. 在Bitbucket仓库的「Settings」→「Deploy keys」里添加服务器的SSH公钥,这样服务器可以无密码拉取仓库代码。
  2. 在服务器上设置cron定时任务,比如每隔10分钟拉一次代码:
# 编辑cron任务
crontab -e
# 添加一行,替换成你的Web目录路径
*/10 * * * * cd /var/www/html && git pull origin main

这个方案的缺点是不能实时部署,有一定延迟,但胜在配置简单,适合个人小型项目。

一些注意事项

  • 不管用哪种方案,都要确保服务器上的Web目录权限正确,避免部署后网站无法访问(比如给文件设置www-data用户权限)。
  • 建议先在测试服务器上验证部署流程,没问题再用到生产环境。
  • 如果你的项目需要构建(比如前端项目需要npm run build,后端需要编译),Bitbucket Pipelines可以先执行构建命令,再把构建后的产物上传,非常适合这类场景。

内容的提问来源于stack exchange,提问作者Jesse Luke Orange

火山引擎 最新活动