senangprint/git-deploy

此包的最新版本(dev-master)没有提供许可证信息。

一个PHP脚本,用于从代码仓库自动拉取到Web服务器(使用GitHub、GitLab或Bitbucket的webhook)。

dev-master 2023-09-27 04:35 UTC

This package is not auto-updated.

Last update: 2024-10-02 11:11:00 UTC


README

一个PHP脚本,用于从代码仓库自动拉取到Web服务器(使用GitHub、GitLab或Bitbucket的webhook)。

您可以配置此脚本从哪个分支拉取。此脚本适用于开发和生产服务器。

在您的服务器上

SSH

生成SSH密钥并将其添加到您的账户,以便可以无密码运行git pull

配置

git-deploy文件夹及其内容复制到您的公开文件夹中(通常是public_html)。注意,如果需要,您可以更改文件夹的名称。

git-deploy/deploy.sample.php重命名为git-deploy/deploy.php,并更新每个变量为符合您需求的值。可以为多个项目或版本创建多个git-deploy/deploy.sample.php副本(只需更改webhook URL以匹配新名称即可)。以下是一个实时配置的示例。

define("TOKEN", "secret-token");
define("REMOTE_REPOSITORY", "git@github.com:username/custom-project.git");
define("DIR", "/var/www/vhosts/repositories/custom-project");
define("BRANCH", "refs/heads/master");
define("LOGFILE", "deploy.log");
define("GIT", "/usr/bin/git");
define("MAX_EXECUTION_TIME", 180);
define("BEFORE_PULL", "/usr/bin/git reset --hard @{u}");
define("AFTER_PULL", "/usr/bin/node ./node_modules/gulp/bin/gulp.js default");

权限

deploy.php被webhook调用时,Web服务器用户(wwwwww-dataapache等)将尝试运行git pull ...。由于您很可能以自己的用户身份克隆到仓库中,因此您的用户拥有它,因此需要给Web服务器用户写入权限。建议通过更改仓库组为Web服务器用户并给予组写入权限来实现。

  1. 打开包含服务器上仓库的目录的终端。
  2. 运行sudo chown -R yourusername:webserverusername custom-project-repo-dir/以更改仓库的组。
  3. 运行sudo chmod -R g+s custom-project-repo-dir/以使组分配对新文件/目录继承。
  4. 运行sudo chmod -R 775 custom-project-repo-dir/以设置所有者和组的读写权限。

在GitHub | GitLab | Bitbucket

GitHub

在您的仓库中,转到设置 → Webhooks → 添加Webhook,并使用以下设置

点击“添加webhook”以保存您的设置,然后脚本应该开始工作。

Example screenshot showing GitHub webhook settings

GitLab

在您的仓库中,转到设置 → 集成,并使用以下设置

点击“添加webhook”以保存您的设置,然后脚本应该开始工作。

Example screenshot showing GitLab webhook settings

Bitbucket

在您的仓库中,转到设置 → Webhooks → 添加Webhook,并使用以下设置

点击“保存”以保存您的设置,然后脚本应该开始工作。

Example screenshot showing Bitbucket webhook settings

与CI/CD集成

如果您希望将git-deploy与CI脚本集成而不是使用传统Webhooks,您可以通过以下wget命令触发钩子。

wget --quiet --output-document=- --content-on-error --header="Content-Type: application/json" --post-data='{"ref":"refs/heads/master"}' 'https://www.example.com/git-deploy/deploy.php?token=secret-token'

此外,您可以将参数 sha=COMMIT_HASHreset=true 添加到 URL 中,以便指示 git-deploy 重置到特定的提交。 请注意,这将覆盖您可能已做出的任何本地更改。 这对于与类似 GitLab 的环境功能 的集成很有用。

感谢 @JacobDB 的协作。