Plugin to operate automatic git-pull server with CakePHP 3 (Using WebHook from GitHub, GitLab and Bitbucket)
- CakePHP 3.5 or later
- PHP 5.6 or later
You can install this plugin into your CakePHP application using composer.
The recommended way to install composer packages is:
composer require node-link/cakephp-git-deploy
Please load the plugin manually as follows:
<?php
// In src/Application.php. Requires at least 3.6.0
use Cake\Http\BaseApplication;
class Application extends BaseApplication
{
public function bootstrap()
{
parent::bootstrap();
// Load the plugin
$this->addPlugin('NodeLink/GitDeploy');
}
}
Prior to 3.6.0, you should use Plugin::load()
:
<?php
// In config/bootstrap.php
use Cake\Core\Plugin;
Plugin::load('NodeLink/GitDeploy', ['bootstrap' => true, 'routes' => true]);
Or, use bin/cake
to load the plugin as follows:
bin/cake plugin load -b -r NodeLink/GitDeploy
Edit config/.env
or config/app.php
.
The full default configuration is as follows:
<?php
return [
'GitDeploy' => [
'enable' => filter_var(env('GIT_DEPLOY_ENABLE', false), FILTER_VALIDATE_BOOLEAN),
'token' => env('GIT_DEPLOY_TOKEN', 'secret'),
'branch' => env('GIT_DEPLOY_BRANCH', 'master'),
'git_path' => env('GIT_DEPLOY_GIT_PATH', '/usr/bin/git'),
'composer_path' => env('GIT_DEPLOY_COMPOSER_PATH', '/usr/local/bin/composer')
],
];
It is recommended to add following items to config/.env
.
export GIT_DEPLOY_ENABLE="true"
export GIT_DEPLOY_TOKEN="__TOKEN__"
export GIT_DEPLOY_BRANCH="master"
export GIT_DEPLOY_GIT_PATH="/usr/bin/git"
export GIT_DEPLOY_COMPOSER_PATH="/usr/local/bin/composer"
export COMPOSER_HOME="/var/www"
It may not work unless COMPOSER_HOME
is set correctly.
In your repository, navigate to Settings → Webhooks → Add webhook, and use the following settings:
- Payload URL: https://example.com/git-deploy
- Content type: application/json
- Secret: The value of
GIT_DEPLOY_TOKEN
inconfig/.env
- Which events would you like to trigger this webhook?: 🔘 Just the push event
- Active: ☑️
Click "Add webhook" to save your settings, and the script should start working.
In your repository, navigate to Settings → Integrations, and use the following settings:
- URL: https://example.com/git-deploy
- Secret Token: The value of
GIT_DEPLOY_TOKEN
inconfig/.env
- Trigger: ☑️ Push events
- Enable SSL verification: ☑️ (only if using SSL, see GitLab's documentation for more details)
Click "Add webhook" to save your settings, and the script should start working.
In your repository, navigate to Settings → Webhooks → Add webhook, and use the following settings:
- Title: Git Deploy
- URL: https://example.com/git-deploy?token=
GIT_DEPLOY_TOKEN
- Active: ☑️
- SSL / TLS: ⬜ Skip certificate verification (only if using SSL, see Bitbucket's documentation for more details)
- Triggers: 🔘 Repository push
Click "Save" to save your settings, and the script should start working.
If execution is not successful, please refer to logs/error.log
and logs/debug.log
.
Details of the error at the time of execution may be listed in some cases.
When it does not work well, in many cases, there is a problem with permissions.
Please set so that the web server user (www
, www-data
, apache
, etc...) can git pull
and composer install
.
It is suggested this be accomplished by changing the repository group to the web server user's and giving the group write permissions:
- Open a terminal to the directory containing the repository on the server.
- run
sudo chown -R yourusername:webserverusername project-dir/
to change the group of the repo. - run
sudo chmod -R g+s project-dir/
to make the group assignment inherited for new files/dirs. - run
sudo chmod -R 775 project-dir/
to set read & write for both owner and group.
Generate an SSH key and add it to your account so that git pull can be run without a password.
If you have a problem with the GitDeploy plugin, please send a pull request or open an issue on GitHub.
Also, I would appreciate it if you contribute to updating README.md
file.