【git】GitHubにpushしたらブランチ毎に自動デプロイする仕組みをさくらVPS上に作ってみた

  • 2018.02.09
  • Git
【git】GitHubにpushしたらブランチ毎に自動デプロイする仕組みをさくらVPS上に作ってみた

本番のディレクトリとステージングのディレクトリを別々に用意して、githubのWebhookを使用してブランチごとに自動でデプロイする仕組みを作ってみた。

やりたいこと

pushした時に毎回pullするのが面倒だったので、
pushしたデータを「mastar」と「develop」のブランチごとにデプロイする仕組みを作る。
※ブランチ名は以下に記載しているコードを変更すればOK。

やったこと

簡単に仕組みを説明すると、githubのブランチごと(ここではdevelopとmaster)にpushした時にwebhookが発火。
pushした内容が「deploy.php」を通してブランチ名と同じディレクトリごとにデータを送信する仕組み。



前提条件は以下。
GitHubにリモートサーバーのSSHキーを登録
デプロイ用PHPプログラムの作成・配置
GitHubでwebhookの設定

動作確認
サーバーは「さくらのVPS」を使用してます。
サーバーにSSH接続出来ることと、githubへのhookの登録が済んでることが前提になります!

開発環境は以下
サーバー:さくらのVPS

ディレクトリ構成はこんな感じです。
/root
│ ├ master
│ └ develop
└ deploy.php

「deploy.php」には以下に記述をする。

<?php

# ──────────────────────────────
# 設定(基本的にここだけ環境に合わせて変更する)
# ──────────────────────────────

# ログファイル定義
$LOG_FILE = dirname(__FILE__).'/_hook.log/hook.log';

# エラーログファイル定義
$LOG_FILE_ERR = dirname(__FILE__).'/_hook.log/hook-error.log';

# GitHubに設定するパスワード的な物(お好きな文字列)
$SECRET_KEY = 'xxxxx';

# git pullしたいブランチ(配列)
# 「develop」と「master」のブランチを設定
$BRANCHS = array('develop','master');

# ──────────────────────────────

# 全てのHTTPリクエストヘッダを取得
$header = getallheaders();

# POSTの生データを取得
$post_data = file_get_contents( 'php://input' );

# ハッシュ値を生成
$hmac = hash_hmac('sha1', $post_data, $SECRET_KEY);

if ( isset($header['X-Hub-Signature']) && $header['X-Hub-Signature'] === 'sha1='.$hmac ) {

  
  $payload = json_decode($post_data, true);

  foreach ($BRANCHS as $branch) {

    
    if($payload['ref'] == 'refs/heads/'.$branch){

      chdir($payload['repository']['name'].'/'.$branch);

      exec('git pull origin '.$branch.' 2>&1', $output, $return);

      file_put_contents($LOG_FILE,
        date("[Y-m-d H:i:s]")." ".
        $_SERVER['REMOTE_ADDR']." ".
        $payload['repository']['name']."/".$branch." ".
        $payload['commits'][0]['message']." ".
        $output[0]." ".$return."\n",
        FILE_APPEND|LOCK_EX
      );
    }
  }

} else {

  file_put_contents($LOG_FILE_ERR,
    date("[Y-m-d H:i:s]")." ".
    $_SERVER['REMOTE_ADDR']." 認証失敗"."\n",
    FILE_APPEND|LOCK_EX
  );
}
?>



参考:
https://yosiakatsuki.net/blog/github-auto-deploy/

未経験からでもエンジニアにはなれる!

中堅の年代になり、最近よくどうやってエンジニアになったんですか?と聞かれる機会が多くなりました。私は転職組で未経験からエンジニアになりました。 そこら辺のストーリーは「未経験からWebデザイナーになった経緯を紹介」で書いているのでそちらをご覧ください。

当時はWebの技術を教えてくれるスクールがあまりなく、私はWebの勉強は独学で勉強し転職したのですが、今はスクールの数も多くなっていてオンラインで受講できるところも増えてきました。

もし私が未経験でエンジニアを目指すなら活用したいスクールを紹介してますので興味ある方はぜひ参考にしてくだいさい!

tech boostオンライン

tech boostはエンジニアに特化したキャリアサービスを展開しているBranding Engineerが運営するオンラインプログラミングスクールです。

エンジニアに特化したキャリアサービスを展開しているからこそのカリキュラムを実現しています。 また、転職サポート付きでスクール卒業後もキャリアも安心です。

オンラインスクールだからいつでもどこでも受講可能!これからプログラミングを学びたい方、エンジニアにキャリアチェンジを考えている方に、 特にオススメのサービスです。

初めてプログラミングを学ぶなら「tech boostオンライン」

CodeCamp(コードキャンプ)

オンライン・マンツーマン指導のプログラミングスクールとしてNo.1*の実績を持つサービスです。高い学習効果が評価されテレビや新聞、ビジネス誌など*多くのメディアで紹介されています。

講師は全て現役のエンジニア。未経験から確実に習得するために開発されたオリジナルカリキュラムでWebデザイン、Webサービス開発、アプリ開発などを幅広く学習することができます。

多くの受講生が、現役エンジニアの手厚いマンツーマン指導によって確実にプログラミングを習得し、キャリアアップ・転職・独立起業などの目標を実現しています。

プログラミングのオンラインスクールのCodeCamp

DMM WEBCAMP

転職を本気で考えている方向けのプログラミングスクールです。転職を保証しているため、未経験からIT業界へ転職を求めている方へおすすめです!

プログラミング未経験者でも安心のサポート体制をご用意しており、特に受講者アンケートでは『サポート体制がしっかりしていて魅力的』、『転職を保証していただいていることで安心』というレビーが多くしっかとしたサポートを提供しています。

実務に近い実践的なカリキュラムで、DMM WEBCAMPはチーム開発など、実務により近い実践的カリキュラムを導入しているため、転職先・就職後にいち早く活躍できるスキル・経験を積むことができます。

受講者満足度90%以上のプログラミングスクール【DMM WEBCAMP】

Udemy

私の周りの現役のエンジニアの人も活用しています。基礎をしっかり固めたい方や、実践向けの配信など幅広く解説している動画が豊富にアップされているので活用するのはオススメです。

習得したいスキル(プログラム言語)が明確で、年収アップのために学習している方やAI・機械学習を学んでスキルアップを目指しているエンジニアの方に支持されているます。

1講座あたり数千~数万円程度で実践的なスキルアップを経済的でオススメです。

【Web開発初心者向け!】Web開発入門完全攻略 充実の18時間コース