LoginSignup
1
6

More than 3 years have passed since last update.

PHP 製デプロイツール Deployer でブランチ選択を実装する

Posted at

PHP で書かれた Deployer というデプロイツールについての話です
👉 https://deployer.org/

Deployer の特徴に レシピ という単位で、デプロイ時の機能を PHP で拡張できることがあります (Slack に投稿など):

この記事では、実際に Deployer を使ってデプロイするときに追加した機能を紹介します。

デプロイするブランチをユーザーに選択させる

通常 Deployer ではデプロイするブランチは固定 or オプション指定なので、ユーザーがデプロイするときに CLI でデプロイ対象のブランチをインタラクティブに選択できるようにします:

set_brancy_by_selection.php
<?php
use function Deployer\{askConfirmation, askChoice, get, set, writeln, input};

// ブランチをユーザー選択式に
set('branch', function () {
    // --branch=<branch> でオプション指定されてるときはそれを使用できる
    if ($branch = input()->getOption('branch')) {
        return $branch;
    }

    $repository = get('repository');
    exec("git ls-remote -h {$repository}", $outputLines);
    $branches = [];
    foreach ($outputLines as $line) {
        if (preg_match('#refs/heads/(.*)$#', $line, $matches)) {
            $branches[] = $matches[1];
        }
    }

    $branch = askChoice("Choose a branch to deploy:", $branches);
    writeln("> Branch chosen: {$branch}");
    if (!askConfirmation("Are you sure to work with '{$branch}' ?")) {
        exit();
    }

    return $branch;
});

このコードによりブランチが必要になった時点で、ブランチの選択ができるようになります:

php.png

コマンドライン引数で渡した場合はそれがそのまま使われます:

./dep deploy <stage> --branch=master

zsh.png

Deployer のコマンド

Deployer recipe で使える CLI でのユーザー入出力まわりのコマンドの紹介です。

askChoice

function askChoice($message, array $availableChoices, $default = null, $multiselect = false)

$availableChocies で指定した array をもとに選択肢を出してくれる感じです。

php.png

askConfirmation

function askConfirmation($message, $default = null)

y / n で二択の確認を出してくれます。

php 2.png

writeln

function writeln($message, $options = 0)

メッセージを出力します。

そのほかにもリモートでコマンド実行など、ひととおり必要な機能が用意されています: https://deployer.org/docs/api.html

あとは PHP のコードがそのまま使えるので、慣れていれば特に造作なく使えるかんじです。

1
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
6