如何在GitHub合并Dev到Master分支时自动执行自定义脚本?
实现Dev分支合并/推送至Master时自动执行自定义脚本的方案
完全可以通过GitHub自带的GitHub Actions实现这个需求,以下是具体的实现步骤:
1. 创建GitHub Actions工作流文件
在仓库根目录下新建.github/workflows文件夹,然后在其中创建一个YAML格式的工作流配置文件,比如auto-run-script.yml。
2. 配置工作流触发条件
设置工作流在以下场景触发:
- 从Dev分支向Master分支发起的PR被合并
- 直接将Dev分支的代码推送(或合并)到Master分支
示例配置:
on: # 当PR合并到master时触发 pull_request: branches: [ master ] types: [ closed ] paths-ignore: - '.github/workflows/**' # 当代码推送到master时触发(含直接合并Dev到Master后推送的情况) push: branches: [ master ] paths-ignore: - '.github/workflows/**'
3. 编写工作流执行步骤
在工作流中拉取Dev分支的代码、执行自定义脚本,若脚本修改了代码,还可以自动提交并推送到Dev分支(可选)。
完整示例配置:
name: Auto Run Script on Dev When Merge to Master on: pull_request: branches: [ master ] types: [ closed ] paths-ignore: - '.github/workflows/**' push: branches: [ master ] paths-ignore: - '.github/workflows/**' jobs: run-script-on-dev: runs-on: ubuntu-latest steps: # 检查PR是否真的被合并,避免PR关闭但未合并时执行 - name: Skip if PR not merged if: github.event_name == 'pull_request' && github.event.pull_request.merged == false run: exit 1 # 拉取仓库代码并切换到Dev分支 - name: Checkout Dev branch uses: actions/checkout@v4 with: ref: dev fetch-depth: 0 # 拉取完整提交历史 # 执行自定义shell脚本 - name: Execute custom script run: | # 替换为你的脚本实际路径,比如./scripts/env-update.sh chmod +x ./scripts/your-custom-script.sh ./scripts/your-custom-script.sh # (可选)脚本修改代码后自动提交推送到Dev分支 - name: Commit and push changes to Dev if: success() run: | git config --global user.name "GitHub Actions" git config --global user.email "actions@github.com" git add . git commit -m "Auto update after merge to master via GitHub Actions" || echo "No changes to commit" git push origin dev env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
4. 关键说明
- 触发逻辑:PR触发时会先校验是否真的完成合并,避免误触发;直接推送Master分支时会直接执行后续流程。
- 脚本权限:通过
chmod +x确保自定义脚本拥有执行权限,避免报错。 - 自动提交:如果脚本修改了Dev分支的代码(比如替换硬编码环境变量),工作流会自动提交并推送回Dev分支,无需手动操作。
- 权限配置:
GITHUB_TOKEN是GitHub自动生成的秘钥,默认拥有仓库读写权限,无需额外配置。
内容的提问来源于stack exchange,提问作者Atul
相关产品推荐
相关产品推荐

