aklump/post_commit

一个针对git仓库拉取和自动部署的后置提交调度器/运行器,用PHP编写,注重安全性。

1.0.14 2019-07-15 17:54 UTC

This package is auto-updated.

Last update: 2024-09-16 04:36:53 UTC


README

post_commit

摘要

提供一个端点供您的网站使用,作为git后置提交钩子的webhook。当触发时,该端点将排队执行git pull,由cron执行。这样,每当您向您的仓库推送时,您可以自动部署(以及您想要的任何东西,例如Drupal缓存清理)。通过利用cron,您可以保持严格的权限,并以cron用户的身份运行git pull,而不是apache等。旨在用于测试网站,而不是生产环境,在您想要手动部署的环境中。

访问https://aklump.github.io/post_commit以获取完整文档。

快速入门

第1部分/4

  1. 在仓库根目录中使用cloudy pm-install aklump/post_commit进行安装
  2. 打开bin/config/post_commit.yml并设置配置。我鼓励您首先使用通配符设置仓库和分支,以便使一切正常工作;您可以在以后进一步缩小范围。
  3. 创建上一步配置中的logs目录;确保在SCM中忽略此文件
  4. 打开bin/config/post_commit.local.yml并根据需要进行修改;确保在SCM中忽略此文件
  5. 根据需要进行修改,并将bin/auto_deploy.sh添加到SCM。
  6. 运行./bin/post_commit init以完成安装。
  7. logs/*的所有者和组赋予写入权限,例如chmod -R ug+w logs

提示:随时运行./bin/post_commit config-check以揭示配置问题。

第2部分/4:测试端点

  1. 确定webhook的URL端点,例如

     https://{website}/scheduler.php?key={url_private}
    
  2. 使用tail -f pending.txt开始监控pending.txt日志。

  3. 在浏览器中打开端点,您应该看到类似的内容

     origin user:
     repo:
     branch: *
     PHP user: apache
     127.0.0.1
     Tue, 30 Oct 2018 11:25:09 -0700
     jobs added: 1
     --------------------------------------------------------------------------------
    
  4. 断言作业的绝对路径已追加到pending.txt中。

  5. 使用tail -f complete.txt开始监控complete.txt日志。

  6. 使用./bin/post_commit run手动运行作业。

  7. 断言您在complete.txt中看到作业的输出。

  8. 如果您想测试端点对特定仓库或分支的响应,请使用?&repo={repo}&branch={master}

第3部分/4:注册Web钩子

  1. 登录到您的服务器并cd到日志目录。

  2. 使用tail -f orders.txt开始监控orders.txt日志。当您保存下面的webhook时,您应该看到内容追加--一个新订单,这表明一切正常。它将类似于

     $ tail -f orders.txt
     origin user: aklump
     repo: aklump/post_commit
     branch: *
     --------------------------------------------------------------------------------
    
  3. 如果您网站是HTTP授权的,您需要将凭据添加到URL中

     https://{user}:{password}@{website}/scheduler.php?key={url_private}
    
  4. 编译后置提交钩子URL并将其添加到您的github项目。

    • 请确保在URL中使用密钥,不要使用秘密文本字段。
    • 选择json格式。
    • 如果可能,请确保使用https,自签名证书应该可以正常工作。
    • 保存webhook并检查orders.txt中的更改。

GitHub Webhook

第4部分/4:设置cron作业

  1. 设置一个cron作业以执行./bin/post_commit run并记录输出。

     * * * * * ./bin/post_commit run >> /path/to/.../logs/cron.txt
    
  2. 使用tail -f cron.txt开始监控cron.txt。等待下一次cron运行并断言内容已追加到cron.txt

  3. 现在,通过提交到您的仓库并断言auto_pull.sh确实被cron执行来测试整个设置。

  4. 根据需要从配置中的repository_namebranch_name值中删除通配符。

  5. 使用以下命令在crontab中禁用cron日志记录

     * * * * * ./bin/post_commit run > /dev/null
    
  6. 最后,运行./bin/post_commit empty-logs以清空所有日志。

  7. 您完成了。

关于日志文件

与其删除日志文件,不如使用./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

故障排除

作业已安排但未运行?

  1. 请确保日志目录和所有日志文件的所有者属于cron用户,并且组属于php用户,并且用户和组都有读写权限。

  2. git存储库在拉取时需要密码吗?您将不得不禁用此功能。

  3. 尝试以cron用户身份登录到服务器并运行命令。

  4. 确保您可以使用ssh密钥等手动执行git pull。

贡献

如果您觉得这个项目很有用...请考虑捐款