aklump / post_commit
一个针对git仓库拉取和自动部署的后置提交调度器/运行器,用PHP编写,注重安全性。
Requires
- php: >=5.3.0
README
摘要
提供一个端点供您的网站使用,作为git后置提交钩子的webhook。当触发时,该端点将排队执行git pull
,由cron执行。这样,每当您向您的仓库推送时,您可以自动部署(以及您想要的任何东西,例如Drupal缓存清理)。通过利用cron,您可以保持严格的权限,并以cron用户的身份运行git pull,而不是apache
等。旨在用于测试网站,而不是生产环境,在您想要手动部署的环境中。
访问https://aklump.github.io/post_commit以获取完整文档。
快速入门
第1部分/4
- 在仓库根目录中使用
cloudy pm-install aklump/post_commit
进行安装 - 打开bin/config/post_commit.yml并设置配置。我鼓励您首先使用通配符设置仓库和分支,以便使一切正常工作;您可以在以后进一步缩小范围。
- 创建上一步配置中的logs目录;确保在SCM中忽略此文件。
- 打开bin/config/post_commit.local.yml并根据需要进行修改;确保在SCM中忽略此文件。
- 根据需要进行修改,并将bin/auto_deploy.sh添加到SCM。
- 运行
./bin/post_commit init
以完成安装。 - 为logs/*的所有者和组赋予写入权限,例如
chmod -R ug+w logs
提示:随时运行
./bin/post_commit config-check
以揭示配置问题。
第2部分/4:测试端点
-
确定webhook的URL端点,例如
https://{website}/scheduler.php?key={url_private}
-
使用
tail -f pending.txt
开始监控pending.txt日志。 -
在浏览器中打开端点,您应该看到类似的内容
origin user: repo: branch: * PHP user: apache 127.0.0.1 Tue, 30 Oct 2018 11:25:09 -0700 jobs added: 1 --------------------------------------------------------------------------------
-
断言作业的绝对路径已追加到pending.txt中。
-
使用
tail -f complete.txt
开始监控complete.txt日志。 -
使用
./bin/post_commit run
手动运行作业。 -
断言您在complete.txt中看到作业的输出。
-
如果您想测试端点对特定仓库或分支的响应,请使用
?&repo={repo}&branch={master}
。
第3部分/4:注册Web钩子
-
登录到您的服务器并
cd
到日志目录。 -
使用
tail -f orders.txt
开始监控orders.txt日志。当您保存下面的webhook时,您应该看到内容追加--一个新订单,这表明一切正常。它将类似于$ tail -f orders.txt origin user: aklump repo: aklump/post_commit branch: * --------------------------------------------------------------------------------
-
如果您网站是HTTP授权的,您需要将凭据添加到URL中
https://{user}:{password}@{website}/scheduler.php?key={url_private}
-
编译后置提交钩子URL并将其添加到您的github项目。
- 请确保在URL中使用密钥,不要使用秘密文本字段。
- 选择json格式。
- 如果可能,请确保使用https,自签名证书应该可以正常工作。
- 保存webhook并检查orders.txt中的更改。
第4部分/4:设置cron作业
-
设置一个cron作业以执行
./bin/post_commit run
并记录输出。* * * * * ./bin/post_commit run >> /path/to/.../logs/cron.txt
-
使用
tail -f cron.txt
开始监控cron.txt。等待下一次cron运行并断言内容已追加到cron.txt。 -
现在,通过提交到您的仓库并断言auto_pull.sh确实被cron执行来测试整个设置。
-
根据需要从配置中的
repository_name
和branch_name
值中删除通配符。 -
使用以下命令在crontab中禁用cron日志记录
* * * * * ./bin/post_commit run > /dev/null
-
最后,运行
./bin/post_commit empty-logs
以清空所有日志。 -
您完成了。
关于日志文件
与其删除日志文件,不如使用./bin/post_commit empty-logs
截断它们。这将保持正确的权限。
需求
-
您必须在您的系统上安装Cloudy才能安装此包。
-
您的存储库可能不需要密码,因为这会阻止自动git pull。
安装
上面的安装脚本将在.
(您的存储库根目录)生成以下结构。
.
├── bin
│ ├── post_commit -> ../opt/post_commit/post_commit.sh
│ └── config
│ ├── post_commit.yml
│ └── post_commit.local.yml
├── opt
│ ├── cloudy
│ └── aklump
│ └── post_commit
└── {public web root}
更新
- 从您的存储库根目录更新到最新版本:
cloudy pm-update aklump/post_commit
配置文件
用法
- 要查看所有命令,请使用
./bin/post_commit help
故障排除
作业已安排但未运行?
-
请确保日志目录和所有日志文件的所有者属于cron用户,并且组属于php用户,并且用户和组都有读写权限。
-
git存储库在拉取时需要密码吗?您将不得不禁用此功能。
-
尝试以cron用户身份登录到服务器并运行命令。
-
确保您可以使用ssh密钥等手动执行git pull。
贡献
如果您觉得这个项目很有用...请考虑捐款。