如何在GitLab仓库有新commit时立即执行Python脚本
GitLab捕获push/commit事件并触发Python脚本的实现方法
你可以根据自己的使用场景选择以下两种方案:
方案1:使用GitLab CI/CD流水线(最简便,无需额外部署服务)
- 首先在仓库根目录创建名为
.gitlab-ci.yml的配置文件,GitLab会自动识别该文件加载流水线规则 - 配置文件中指定push事件作为触发条件,配置示例如下:
stages: - execute_script run_python_task: stage: execute_script # 仅在push事件发生时触发运行 only: - pushes # 选择包含Python环境的运行镜像,可根据自己的需求更换版本 image: python:3.11-slim script: # 若脚本有依赖的第三方库,先安装依赖 - pip install -r requirements.txt # 运行你仓库内的Python脚本,替换为你自己的脚本路径 - python ./your_script.py
- 配置提交到仓库后,后续所有push操作都会自动触发流水线运行指定的Python脚本,事件捕获逻辑由GitLab内置实现,无需额外开发。
方案2:使用GitLab Webhook(适合需要在自有服务器上运行脚本的场景)
如果你的脚本必须运行在自己的指定服务器上,可以通过Webhook实现事件捕获:
- 进入GitLab仓库的「设置」-「Webhooks」页面
- 触发条件勾选
Push events,可根据需求限定触发的分支范围 - 填写你自有服务器的接收接口URL,GitLab检测到push事件时会自动向该URL发送包含完整事件信息的POST请求
- 在自有服务器上部署一个简单的接口服务接收请求,校验通过后触发Python脚本即可,示例代码如下:
from fastapi import FastAPI, Request import subprocess app = FastAPI() @app.post("/gitlab-webhook-receiver") async def handle_gitlab_event(request: Request): # 可选:校验Webhook配置的Secret Token,避免恶意请求 # req_token = request.headers.get("X-Gitlab-Token") # if req_token != "你配置的Secret Token": # return {"status": "invalid token"} # 运行指定的Python脚本,替换为你自己的脚本路径 subprocess.Popen(["python", "/opt/your_script.py"]) return {"status": "success"}
- 注意确保你的服务器接口可以被GitLab服务正常访问,内网部署的GitLab只要保证和服务器网络互通即可。
方案选择建议
- 无特殊部署要求优先选择CI/CD方案,配置成本最低,不需要额外维护服务
- 有指定运行环境、内网资源访问等需求时选择Webhook方案,灵活性更高
内容的提问来源于stack exchange,提问作者TechWorksLAB
相关产品推荐
相关产品推荐

