Jenkinsを使って社内テスト環境作成を自動化してみました。

ちっちゃなウェブ制作会社には、社内IT部門などはなく、たいてい何でも屋として

  • 新入り社員のパソコンセットアップやアカウント管理
  • 社内/社外サーバの管理
  • プロジェクト管理ツールの管理
  • テスト環境の作成

などを行なっています。

その中で、「テスト環境の作成」を今回は取り上げたいと思います。
これは基本的には似たような反復作業で、結果としてLAMP環境とftpアカウントが作れればよいので、
ずっと自動化したいなーっと思っていました。


通常、案件を受注したらウェブディレクター主導で案件を進めます。
その後制作に入ると、社外パートナーや、クライアント確認用にテストサイトが必要になります。
そういった時に、「いついつまでにテストサイトが欲しい」という依頼が舞い込むのが通例です。


pleskサーバなので、そんなに大変ではないのですが、
ドメイン作って、データベース作って、FTPユーザつくって・・・
あ、basic認証もかけておいて。


みたいな話だと、いちいちパスワード作るのも面倒だし、
疎通確認するのも面倒だし、コピペでアカウント名とか作ると、ミスも起きるし、
なんとかしたいなと思っていました。

最初のアイデア | DigitalOcean上にディレクターが自由に環境を作成する

DigitalOcean に自由にテストサイトを構築できたらなんか今風でカッコいいよね!
という単なる技術的好奇心から出てきた案です。


DigitalOceanについてはこちらの記事でも紹介しましたのでご参考にしてください。
id:go_nash:20140925
技術的なところでいうと、前の記事と同様に、ansibleを使ってDigitalOcean上にサーバを構築するというのは変わりません。
ただ今回は、ウェブディレクターが環境を構築するというところを鑑みて、Jenkinsでそれを行うという絵を書きました。


メリットとデメリットを書き出してみました。

メリット
  • 各テストサイトで独立していて安心。例えば、本番はPHP5.3 なんでちょっと古いけど、それで検証したい場合とか。
  • Digital Oceanのスナップショット機能を使えばバックアップが自動でできる。なんてすばらしい。
デメリット
  • なんだかんだ、サーバの作成からミドルのインストールまでするので、作成するまで30分ぐらいかかる。
  • ドメインどうしよう?(API使えばドメイン登録も自動化できますが)
  • 継続案件や、運用に入るケースも多々あるので、せっかくdisposableなのに結局そのまま残すことが多くなりそう(お金がかかる)。
  • もし、テストサイトを案件が終わるごとに消していく場合、制作物をどう残して管理していくかという問題もはらむ。


うちの会社だと、なんだかデメリットの方が多い気がしてきました。
ということで、実際に自動化した内容はこちら

Pleskコマンドラインツールを使って、自動化する

実はPleskにはCLIが付いているんですね。
サーバ管理をGUIで行うためのツールなんだけど、コマンドラインが使える。なんだか逆説的だけど。

http://docs.plesk.com/en-US/12.5/cli-linux/using-command-line-utilities.40984/


これを使ってサブドメインの作成を自動化しました。
順を追って手順をみていきましょう!


あらかじめパスワードを作成しておきます。

PASS=`mkpasswd -s 0 `;


PHPとSSIを有効にしてサブドメインを作成します

$ sudo plesk bin subdomain --create ${YOUR_SUBDOMAIN} -domain ${YOUR_DOMAIN} -www-root /subdomains/${YOUR_SUBDOMAIN} -ssi true -php true


FTPアカウントを作成します。

$ sudo plesk bin ftpsubaccount --create ${YOUR_SUBDOMAIN} -domain  ${YOUR_DOMAIN} -passwd $PASS -home /subdomains/${YOUR_SUBDOMAIN}


データベースを使用しないサイトも珍しくなりました。
なので、DBとユーザを作成します。
サブドメインと同じ名称のユーザを作り、データベース名は"サブドメイン名_db"とします。

sudo plesk bin database --create ${YOUR_SUBDOMAIN}_db -domain ${YOUR_DOMAIN} -type mysql -add_user ${YOUR_SUBDOMAIN} -passwd $PASS


最後に.htaccess を設置します。

#パスワードファイルを作成
htpasswd -c -b ./subdomains/{YOUR_SUBDOMAIN}/.htpasswd {YOUR_SUBDOMAIN} $PASS
#.htaccessの雛形ファイルを用意しておき、作成したサブドメイン配下にコピーします。
cp dot.htaccess ./subdomains/{YOUR_SUBDOMAIN}/.htaccess
# パスを置換
sed -i -e "s/{{YOUR_SUBDOMAIN}}/${YOUR_SUBDOMAIN}/g" ./subdomains/${YOUR_SUBDOMAIN}/.htaccess

これらをjenkinsさんに実行させればOKです。
ちなみに、サブドメインを削除するコマンドもあり、ジョブを作成しようとしたのですが、
Pleskのバージョンが古いからかうまく動作しませんでした。。

まあ、削除だけは怖いことは怖いので、マニュアル対応としました。
次は社内共有ファイルサーバについてお話しようかと思います。