Bitbucket远程Git仓库指定分支代码变更时如何触发本地PowerShell脚本
实现方案
提供两种可落地的实现方式,可根据你的实际环境选择:
方案1:Webhook主动触发(实时性高,推荐)
通过Bitbucket的Webhook能力主动推送变更事件到本地服务,无额外轮询开销。
- 第一步:本地启动HTTP监听服务
运行如下PowerShell脚本,即可在本地启动Webhook监听服务,检测到指定分支变更时自动触发目标脚本:# 配置项 $listenPort = 8080 $targetBranch = "refs/heads/main" # 替换为你要监听的分支,格式为refs/heads/分支名 $triggerScriptPath = "C:\path\to\your\script.ps1" # 替换为你要执行的PowerShell脚本路径 $listener = New-Object System.Net.HttpListener $listener.Prefixes.Add("http://+:$listenPort/bitbucket-webhook/") $listener.Start() Write-Host "Webhook服务已启动,监听端口$listenPort" while ($listener.IsListening) { $context = $listener.GetContext() $request = $context.Request $response = $context.Response # 读取Webhook请求体 $reader = New-Object System.IO.StreamReader($request.InputStream) $body = $reader.ReadToEnd() $payload = $body | ConvertFrom-Json # 校验分支匹配后触发脚本 if ($payload.push.changes.new.name -eq $targetBranch) { & $triggerScriptPath } $response.StatusCode = 200 $response.Close() } - 第二步:配置可访问地址
如果是公网Bitbucket服务,需要将本地监听的端口映射到公网(可通过路由器端口映射或内网穿透工具实现),确保Bitbucket可以访问到http://你的公网IP:监听端口/bitbucket-webhook/地址。如果是企业内网部署的Bitbucket,和本地设备在同一内网的话直接填写本地IP+端口即可。 - 第三步:配置Bitbucket Webhook
进入对应Bitbucket仓库的设置页面,找到Webhook配置项,新建Webhook:URL填写上一步的访问地址,触发条件选择Repository push,保存即可。可额外配置Webhook密钥,在本地脚本中校验请求签名,避免非法请求触发脚本。
方案2:本地轮询检测(无需公网端口,配置简单,延迟稍高)
不需要暴露本地端口到公网,通过定时拉取远程分支状态判断是否有变更,适合不想做端口映射的场景。
- 第一步:在本地设备克隆目标Git仓库,配置好Git认证,确保可以正常拉取远程分支信息。
- 第二步:运行如下轮询检测脚本:
# 配置项 $localRepoPath = "C:\path\to\your\local\repo" # 替换为本地仓库的路径 $targetBranch = "main" # 替换为你要监听的分支名 $checkInterval = 300 # 检测间隔,单位秒,此处为5分钟 $triggerScriptPath = "C:\path\to\your\script.ps1" # 替换为你要执行的PowerShell脚本路径 $lastCommitHash = "" while ($true) { Set-Location $localRepoPath # 拉取最新远程分支信息 git fetch origin | Out-Null # 获取远程分支最新提交哈希 $latestCommitHash = git rev-parse "origin/$targetBranch" # 非首次检测且有变更时触发脚本 if ($latestCommitHash -ne $lastCommitHash -and $lastCommitHash -ne "") { & $triggerScriptPath } $lastCommitHash = $latestCommitHash Start-Sleep $checkInterval } - 第三步:将该轮询脚本设置为开机自启、后台运行即可,可根据对实时性的要求调整检测间隔。
注意事项
- 两种方案均需要确保运行脚本的用户拥有Git仓库的拉取权限、以及目标PowerShell脚本的执行权限。
- 生产环境使用Webhook方案时,务必添加签名校验逻辑,避免恶意请求触发脚本执行。
内容的提问来源于stack exchange,提问作者vikraman arut
相关产品推荐
相关产品推荐

