【问题标题】:Is there a way to run a script on a Linux machine when master is changed in a git repo?当在 git repo 中更改 master 时,有没有办法在 Linux 机器上运行脚本?
【发布时间】:2021-11-23 23:19:45
【问题描述】:

我有一个运行 Ubuntu 的树莓派,我用它来托管一个不和谐的机器人。我试图弄清楚是否有任何方法可以检测何时更改了机器人代码存储库的主控,然后在 pi 上运行脚本以停止机器人,拉动更改然后重新启动它?脚本我已经写好了,只是不知道怎么触发。

【问题讨论】:

  • 这就是cronjobs 的任务。
  • 您可以轮询存储库(例如,运行git pull 并查看HEAD 的值是否发生变化)。根据您的存储库所在的位置,您还可以利用网络挂钩或其他一些事件在它发生更改时接收通知。
  • 这就是 git hooks 的用途。
  • 你使用什么 git 服务器?

标签: bash git discord.js raspberry-pi3


【解决方案1】:

对此有两个主要的解决方案 - cronjobs 和 webhook。 cronjob 可能是最简单的,但 webhook 提供了更多的外部控制。

定时任务

cronjob 将以给定的时间间隔运行脚本。如果您在 pi 上设置 cronjob 以运行 git fetch,它将更新遥控器的 refs。然后您可以通过git rev-parse <branch> 获取给定分支的提交 ID。所以在 bash 中你可以这样做:

#!/bin/bash
REMOTE=origin
BRANCH=master
git fetch
if [[ "$(git rev-parse $BRANCH)" != "$(git rev-parse "$REMOTE/$BRANCH")" ]]; then
  # Run your script
fi

网络钩子

如果您将代码托管在主要平台上 - 例如 GitLab、GitHub 或 BitBucket - 它可能支持 webhook 来执行此操作。 Webhook 是您为 repo 主机提供一个 URL,当某个事件发生时他们将调用该 URL。如果您使用的是其他人的存储库,您可以创建一个镜像他们的分支并将 webhook 添加到您的分支中。

这要求您的 pi 可以从 Web 访问并运行 HTTP 服务器,您需要静态 IP 地址或 DDNS 服务才能使其工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多