github에서 webhook을 사용한 자동 배포
동기
로컬 환경에서 개발 후에 github에 push하고, 프로덕션 서버에 로그인하고, 매회 gitpull을 하고 있었습니다만, 상당히 수고를 느끼고 있었습니다.
push 하면 곧바로 프로덕션에도 반영시키고 싶다! 라고 생각해, 여러가지 google로 조사하고 있으면(자) GitHub로부터의 WebHook로 하고 싶을 수가 있을 것 같았으므로, 실천했습니다.
설정 순서
1.gitpull 할 스크립트 작성
2.GitHub로 설정하기
git pull 할 스크립트 작성
webhook.php
<?php
// 設定
$LOG_FILE = dirname(__FILE__).'/hook.log';
$SECRET_KEY = '◯◯◯'; //githubで設定するSECRETと同内容(好きに決めます)
if (!function_exists('getallheaders'))
{
function getallheaders()
{
$headers = [];
foreach ($_SERVER as $name => $value)
{
if (substr($name, 0, 5) == 'HTTP_')
{
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
}
return $headers;
}
}
$header = getallheaders();
$hmac = hash_hmac('sha1', file_get_contents("php://input"), $SECRET_KEY);
if ( isset($header['X-Hub-Signature']) && $header['X-Hub-Signature'] === 'sha1='.$hmac ) {
$payload = json_decode(file_get_contents("php://input"), true);
//gitpullする対象のフォルダへ移動する
exec('cd /var/www/html/◯◯◯ ; git pull');
file_put_contents($LOG_FILE, date("[Y-m-d H:i:s]")." ".$_SERVER['REMOTE_ADDR']." git pulled: ".$payload['after']." ".$payload['commits'][0]['message']."\n", FILE_APPEND|LOCK_EX);
} else {
file_put_contents($LOG_FILE, date("[Y-m-d H:i:s]")." invalid access: ".$_SERVER['REMOTE_ADDR']."\n", FILE_APPEND|LOCK_EX);
}
?>
작성한 스크립트는
GitHub에서 http로 액세스해야하기 때문에,
문서 루트 아래에 배치합니다.
GitHub에서 설정하기
GitHub에서 대상 리포지토리로 이동합니다.
Setting → Webhooks를 선택합니다.
PayLoadURL은 작성한 스크립트를 지정합니다.
또한 Secret에는 스크립트에 기재된 동일한 내용을 입력합니다.
마지막으로
여기까지 작성하면 push한 시점에서 프로덕션 환경에도 변경이 반영됩니다!
Reference
이 문제에 관하여(github에서 webhook을 사용한 자동 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nakm/items/f3e0bc98c78dc014c632
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
1.gitpull 할 스크립트 작성
2.GitHub로 설정하기
git pull 할 스크립트 작성
webhook.php
<?php
// 設定
$LOG_FILE = dirname(__FILE__).'/hook.log';
$SECRET_KEY = '◯◯◯'; //githubで設定するSECRETと同内容(好きに決めます)
if (!function_exists('getallheaders'))
{
function getallheaders()
{
$headers = [];
foreach ($_SERVER as $name => $value)
{
if (substr($name, 0, 5) == 'HTTP_')
{
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
}
return $headers;
}
}
$header = getallheaders();
$hmac = hash_hmac('sha1', file_get_contents("php://input"), $SECRET_KEY);
if ( isset($header['X-Hub-Signature']) && $header['X-Hub-Signature'] === 'sha1='.$hmac ) {
$payload = json_decode(file_get_contents("php://input"), true);
//gitpullする対象のフォルダへ移動する
exec('cd /var/www/html/◯◯◯ ; git pull');
file_put_contents($LOG_FILE, date("[Y-m-d H:i:s]")." ".$_SERVER['REMOTE_ADDR']." git pulled: ".$payload['after']." ".$payload['commits'][0]['message']."\n", FILE_APPEND|LOCK_EX);
} else {
file_put_contents($LOG_FILE, date("[Y-m-d H:i:s]")." invalid access: ".$_SERVER['REMOTE_ADDR']."\n", FILE_APPEND|LOCK_EX);
}
?>
작성한 스크립트는
GitHub에서 http로 액세스해야하기 때문에,
문서 루트 아래에 배치합니다.
GitHub에서 설정하기
GitHub에서 대상 리포지토리로 이동합니다.
Setting → Webhooks를 선택합니다.
PayLoadURL은 작성한 스크립트를 지정합니다.
또한 Secret에는 스크립트에 기재된 동일한 내용을 입력합니다.
마지막으로
여기까지 작성하면 push한 시점에서 프로덕션 환경에도 변경이 반영됩니다!
Reference
이 문제에 관하여(github에서 webhook을 사용한 자동 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nakm/items/f3e0bc98c78dc014c632
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<?php
// 設定
$LOG_FILE = dirname(__FILE__).'/hook.log';
$SECRET_KEY = '◯◯◯'; //githubで設定するSECRETと同内容(好きに決めます)
if (!function_exists('getallheaders'))
{
function getallheaders()
{
$headers = [];
foreach ($_SERVER as $name => $value)
{
if (substr($name, 0, 5) == 'HTTP_')
{
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
}
return $headers;
}
}
$header = getallheaders();
$hmac = hash_hmac('sha1', file_get_contents("php://input"), $SECRET_KEY);
if ( isset($header['X-Hub-Signature']) && $header['X-Hub-Signature'] === 'sha1='.$hmac ) {
$payload = json_decode(file_get_contents("php://input"), true);
//gitpullする対象のフォルダへ移動する
exec('cd /var/www/html/◯◯◯ ; git pull');
file_put_contents($LOG_FILE, date("[Y-m-d H:i:s]")." ".$_SERVER['REMOTE_ADDR']." git pulled: ".$payload['after']." ".$payload['commits'][0]['message']."\n", FILE_APPEND|LOCK_EX);
} else {
file_put_contents($LOG_FILE, date("[Y-m-d H:i:s]")." invalid access: ".$_SERVER['REMOTE_ADDR']."\n", FILE_APPEND|LOCK_EX);
}
?>
GitHub에서 대상 리포지토리로 이동합니다.
Setting → Webhooks를 선택합니다.
PayLoadURL은 작성한 스크립트를 지정합니다.
또한 Secret에는 스크립트에 기재된 동일한 내용을 입력합니다.
마지막으로
여기까지 작성하면 push한 시점에서 프로덕션 환경에도 변경이 반영됩니다!
Reference
이 문제에 관하여(github에서 webhook을 사용한 자동 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nakm/items/f3e0bc98c78dc014c632
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(github에서 webhook을 사용한 자동 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nakm/items/f3e0bc98c78dc014c632텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)