はじめに

はいさい!沖縄支店の石原です。
前回の記事以降、日常生活で「はいさい」を使う機会はありませんでしたので危うく忘れるところでした。

さて、今日のテーマは前回の記事の続きになります。

弊社では Capistrano + Jenkins の構成を導入することで、
継続的インテグレーション,CI(continuous integration)を行っています。


まずは結論から

  1. 新規ジョブの設定時、apache実行ユーザとしてシェルを実行する
  2. sudoをJenkins で実行するにはvisudoの設定が必要


Capistranoのインストール

前回、終わりにCapistranoのインストールコマンドを記載するつもりでしたが、
書いていなかったので一応ここで補足しておきます。

capistrano_colors ・・・ ターミナルでCapistranoを実行した際、結果を色付けして表示します。
railsless-deploy ・・・ Railsアプリ以外でCapistranoを使うためのプラグイン

複数の環境(ステージ)にデプロイするために capistrano-ext というプラグインがありますが、Capistrano3からはデフォルトでONになっており、個別のインストールは不要のようです。

インストールされたCapistranoのバージョン情報等は、以下のコマンドから確認できます。
gem list capistrano


Jenkinsのインストール

Jenkinsのインストールは下記のコマンドで行います。



/etc/sysconfig/jenkins に設定ファイルがあるため、ポート番号などを必要に応じて変更し、サービスを起動してください。
# service Jenkins start
起動後の画面は http://(ホスト名またはIP):(設定したポート番号)/ で確認することができます。


新規ジョブの登録

Jenkinsから新規ジョブを作成し、 ビルド > シェルの実行を選択して次のように記載することでCapistranoを実行することができます。

555a0b4acd3a4f83e6768172fffef2ab

パーミッションの問題でjenkinsユーザではデプロイに失敗したり、デプロイしたサービス上からファイルのアップロード処理ができなくなるケースなどもあるため、sudo コマンドにてapacheを実行しているユーザとしてデプロイを行います。

ただし、Jenkinsからsudoコマンドを実行しようとした場合、次のようなエラーが表示されます。
sudo を実行するには tty がなければいけません。
といわれてしまうため、サーバー側にログインし、Jenkins ユーザでtty が無くても sudo できるよう変更します。


下記のように変更します。
#Defaults    requiretty
Defaults:jenkins !requiretty
jenkins ALL=(ALL) NOPASSWD:ALL
特定のスクリプトのみ許可したい場合は、NOPASSWD:ALL となっている箇所にファイルパスを記入してください。また、apacheを実行しているユーザにも権限が必要な場合は、併せて追記しておきます。



設定完了後、Jenkinsの新規ジョブが正常に動作すれば完了です。

おわりに

前回、今回とインストールに関する話ばかりだったので、Capistrano + Jenkinsの組み合わせがどのようなメリットが生むのか伝わりにくかったかもしれません。

次回は、LAMP環境でのCapistranoの設定などを紹介していきたいと思います。

第3回の記事はこちら