senangprint / git-deploy
一个PHP脚本,用于从代码仓库自动拉取到Web服务器(使用GitHub、GitLab或Bitbucket的webhook)。
Requires
- php: ^7.1
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服务器用户(www
、www-data
、apache
等)将尝试运行git pull ...
。由于您很可能以自己的用户身份克隆到仓库中,因此您的用户拥有它,因此需要给Web服务器用户写入权限。建议通过更改仓库组为Web服务器用户并给予组写入权限来实现。
- 打开包含服务器上仓库的目录的终端。
- 运行
sudo chown -R yourusername:webserverusername custom-project-repo-dir/
以更改仓库的组。 - 运行
sudo chmod -R g+s custom-project-repo-dir/
以使组分配对新文件/目录继承。 - 运行
sudo chmod -R 775 custom-project-repo-dir/
以设置所有者和组的读写权限。
在GitHub | GitLab | Bitbucket
GitHub
在您的仓库中,转到设置 → Webhooks → 添加Webhook,并使用以下设置
- 有效载荷URL: https://www.yoursite.com/git-deploy/deploy.php
- 内容类型: application/json
- 密钥: config.php中TOKEN的值
- 您希望触发此webhook的事件有哪些?🔘 仅推送事件
- 激活: ☑️
点击“添加webhook”以保存您的设置,然后脚本应该开始工作。
GitLab
在您的仓库中,转到设置 → 集成,并使用以下设置
- URL: https://www.yoursite.com/git-deploy/deploy.php
- 密钥令牌: config.php中TOKEN的值
- 触发: ☑️ 推送事件
- 启用SSL验证: ☑️(仅当使用SSL时,有关更多详细信息,请参阅GitLab的文档)
点击“添加webhook”以保存您的设置,然后脚本应该开始工作。
Bitbucket
在您的仓库中,转到设置 → Webhooks → 添加Webhook,并使用以下设置
- 标题: git-deploy
- URL: https://www.yoursite.com/git-deploy/deploy.php?token=secret-token
- 激活: ☑️
- SSL / TLS: ⬜ 跳过证书验证(仅当使用SSL时,有关更多详细信息,请参阅Bitbucket的文档)
- 触发器: 🔘 仓库推送
点击“保存”以保存您的设置,然后脚本应该开始工作。
与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_HASH
和 reset=true
添加到 URL 中,以便指示 git-deploy 重置到特定的提交。 请注意,这将覆盖您可能已做出的任何本地更改。 这对于与类似 GitLab 的环境功能 的集成很有用。
感谢 @JacobDB 的协作。