Deployerを使った簡易的なデプロイシステムの使い方と構築方法

この記事の目次
chevron_right フォルダ構成
chevron_right deploy.php
chevron_right 実行

Deployerを使って、簡易的なデプロイシステムを構築します。

Jenkinsみたいに色々サーバサイドで弄る必要はありません。が、PHPが必要です。

まあ、composerを使えば一発なので、そこは割愛します。

フォルダ構成

┌ deployer.phar
├ deploy.php
├ dev1/
├ dev2/
├ gitdata
   ├ repository/
   └ source/

Deployerを使って、masterブランチ含む、任意のブランチを

dev1フォルダーまたはdev2フォルダーにデプロイします。

deploy.php

こんな感じで書きます。

<?php
namespace Deployer;

use SymfonyComponentConsoleInputInputArgument;

require 'recipe/common.php';


// デプロイ先を取得
argument('deploy', InputArgument::OPTIONAL, 'deploy path');
argument('branch', InputArgument::OPTIONAL, 'branch name');


task('deploy', function() {

    // デプロイ先が指定されているかの確認
    $deploy = input()->getArgument('deploy');
    if ( empty($deploy) === true ) {
        writeln('デプロイ先のフォルダー指定がない');
        return false;
    }

    // ブランチの取得
    $branch = input()->getArgument('branch');

    // ブランチの指定がなければmasterブランチをクローンする
    if ( empty($branch) === true ) {
        $branch = 'master';
    }

    // カレントフォルダ取得
    $pwd = run('pwd') . '/';        // 現在のカレントフォルダへのフルパスを取得

    // デプロイ先フォルダパスを設定
    $path = $pwd . $deploy . '/projects/';

    // フォルダの中身を削除
    run('rm -rf ' . $pwd . 'site/');
    run('rm -rf ' . $pwd . 'repository/');

    // ギットからブランチを指定してデータをクローン
    run('git clone --mirror [GitHubのURL] repository/');

    // 作業用フォルダの作成
    run('mkdir site/');

    // クローンしたフォルダに移動
    cd($pwd . 'repository/');

    // 作業用フォルダにデータをチェックアウト
    run('GIT_WORK_TREE='. $pwd .'site/ git checkout -f ' . $branch);

    // カレントディレクトリに戻る
    cd($pwd);

    // データを対象フォルダにデプロイ
    run('rsync -rlpgoDzv --delete --progress ' . $pwd . '/site/. ' . $path);

    // 終わり
    writeln('\(・ω・\)コピー(/・ω・)/オッケー');

});

実行

こんな感じで実行します。

$ ./deployer.phar deploy dev1                # master ブランチがdev1にデプロイされる
$ ./deployer.phar deploy dev2 test      # test ブランチがdev2にデプロイされる
[PR] おすすめの本
この記事を書いた人
Nな人(えぬなひと)。
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。