You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过GitHub Action将构建产物提交至指定分支?

问题

摘要

能否通过GitHub Action将构建产物提交至特定分支(例如prod分支)?

背景/问题缘由

我正在搭建首条部署流水线,已尝试两种策略但均不满意:

  • 策略1:构建Laravel和Vue应用;打包产物后通过scp推送至服务器并解压。后续更新能力不佳,且应用内用于上传的storage app文件夹无法保持持久化。
  • 策略2:通过GitHub Action以SSH登录服务器,从master分支执行git pull。但git pull不会拉取node_modules这类依赖,需在部署时在服务器构建并删除node_modules和dev-dependencies,在服务器构建存在诸多问题。

解决方案:用GitHub Action推送构建产物至prod分支

完全可以实现这个需求,核心逻辑是在GitHub Action环境中完成项目构建,再将纯净的构建产物提交并推送到prod分支。以下是具体实现步骤:

1. 创建GitHub Action工作流文件

在项目根目录的.github/workflows下新建deploy-to-prod.yml文件,内容如下:

name: 构建并推送产物至prod分支

on:
  push:
    branches:
      - master  # 当master分支有代码推送时触发流程

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      # 拉取仓库完整代码(需拉取全量历史以操作分支)
      - name: 拉取代码
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      # 配置Node环境(根据项目实际版本调整)
      - name: 设置Node.js环境
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'  # 缓存依赖加速构建

      # Laravel+Vue项目构建流程
      - name: 安装Laravel生产依赖
        run: composer install --no-dev --optimize-autoloader

      - name: 安装前端依赖
        run: npm ci  # 基于lock文件安装,保证依赖版本一致

      - name: 构建前端资源
        run: npm run build

      # 清理非必要文件(按需调整)
      - name: 清理开发相关文件
        run: |
          rm -rf node_modules
          rm -rf composer.json composer.lock
          rm -rf .gitignore .env.example

      # 配置Git身份用于提交
      - name: 配置Git用户信息
        run: |
          git config --global user.name "GitHub Action"
          git config --global user.email "action@github.com"

      # 切换或创建prod分支
      - name: 切换到prod分支
        run: git checkout prod || git checkout -b prod

      # 清空prod分支现有内容(保留.git目录)
      - name: 清空prod分支旧内容
        run: ls -a | grep -v -E '^\.$|^\.\.$|^\.git$' | xargs rm -rf

      # 复制构建产物到prod分支根目录
      - name: 复制构建产物
        run: cp -r ../* .

      # 提交并推送
      - name: 提交推送产物
        run: |
          git add .
          git commit -m "Deploy build artifacts to prod"
          git push origin prod

2. 关键细节说明

  • 依赖安装:composer install --no-dev只安装生产环境依赖,避免冗余文件;npm ci保证依赖版本与本地开发环境一致。
  • 分支处理:通过git checkout prod || git checkout -b prod自动处理分支不存在的情况;清空分支时保留.git目录,确保分支结构正常。
  • 持久化目录:服务器上的storage/app可配置为Git忽略,部署时仅拉取prod分支代码,不会覆盖该目录的持久化内容。

3. 服务器部署优化

后续服务器只需从prod分支拉取代码即可直接运行,无需再执行构建步骤,彻底解决服务器构建的依赖问题。

内容的提问来源于stack exchange,提问作者MartinTTS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:25:56