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

如何通过GitHub Actions将同仓库不同分支部署到自定义目录?

解决方案

完全可行,你可以通过以下两种方式实现分支对应不同部署目录的需求:

方式一:直接指定checkout的目标路径

利用actions/checkout的path参数,将代码直接拉取到你想要的目标目录,跳过默认工作目录的限制。

示例工作流文件(.github/workflows/deploy.yml):

name: 分支部署
on:
  push:
    branches:
      - dev
      - stable

jobs:
  deploy:
    runs-on: self-hosted
    steps:
      - name: 确定分支对应的目标目录
        id: set-target
        run: |
          if [ "${{ github.ref_name }}" = "dev" ]; then
            echo "target_dir=~/actions_runner/_work/projectA/projectA-dev" >> $GITHUB_OUTPUT
          else
            echo "target_dir=~/actions_runner/_work/projectA/projectA-stable" >> $GITHUB_OUTPUT
          fi

      - name: 拉取代码到目标目录
        uses: actions/checkout@v4
        with:
          path: ${{ steps.set-target.outputs.target_dir }}

      - name: 关联对应ENV文件
        run: |
          TARGET_DIR=${{ steps.set-target.outputs.target_dir }}
          if [ "${{ github.ref_name }}" = "dev" ]; then
            cp $TARGET_DIR/.env.dev $TARGET_DIR/.env
          else
            cp $TARGET_DIR/.env.stable $TARGET_DIR/.env
          fi
          # 此处添加其他部署命令,如安装依赖、重启服务等

方式二:拉取后移动/复制到目标目录

如果需要保留默认的checkout流程,可在拉取代码后将默认工作目录的内容迁移到目标路径:

示例工作流核心片段:

jobs:
  deploy:
    runs-on: self-hosted
    steps:
      - name: 拉取代码到默认目录
        uses: actions/checkout@v4

      - name: 迁移代码到目标目录
        run: |
          # 定义目标目录
          if [ "${{ github.ref_name }}" = "dev" ]; then
            TARGET_DIR="~/actions_runner/_work/projectA/projectA-dev"
          else
            TARGET_DIR="~/actions_runner/_work/projectA/projectA-stable"
          fi
          # 创建目录并清空旧内容(可选)
          mkdir -p $TARGET_DIR && rm -rf $TARGET_DIR/*
          # 复制代码到目标目录
          cp -r ${{ github.workspace }}/* $TARGET_DIR/

      - name: 后续部署操作
        run: |
          cd $TARGET_DIR
          # 执行依赖安装、服务启动等命令

关键注意点

  • 用github.ref_name变量自动获取当前推送的分支名,无需为不同分支单独编写工作流
  • 确保自托管Runner用户拥有~/actions_runner/_work/projectA目录的读写权限
  • 若需要清理旧部署文件,可在复制前添加rm -rf $TARGET_DIR/*命令

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:30:49