ローカル環境上でgulpでミニマイズするのが面倒なので、githubにpushしたタイミングでjenkinsでミニマイズして、DocumentRootに配置するような環境を構築してみました。
まずは、サーバーにjenkinsをインストールします。
CentOSではいきなりJenkinsをyumでインストールすることができないので、
レポジトリとか公開鍵をとってきます。
$ sudo rpm –import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
$ sudo yum install -y jenkins
インストールが完了したら、jenkinsの設定を行います。
#urlに/jenkinsさんを見せるため JENKINS_ARGS="--prefix=/jenkins"
次にポート番号8080にアクセスした場合にjenkinsにアクセスできるようにApacheの設定を変更します。
<virtualhost *:8080> ProxyPass / http://localhost:8080/jenkins ProxyPassReverse / http://localhost:8080/jenkins </virtualhost>
jenkinsユーザーでコマンドを実行するのでsudoが使えるようにします。
# Defaults requiretty Defaults:jenkins !requiretty jenkins ALL=(ALL) NOPASSWD:ALL
javaがインストールされていない場合はjavaをインストールしておきます。
もろもろの設定が完了したので、Apacheの再起動とJenkinsを起動しておきます。
$
$ sudo service jenkins start
$ sudo chkconfig jenkins on
ついでにgitをインストールしておきます。
github側でWebhookの設定を行います。
settigns -> Webhooks & Services -> Services で「Jenkins(Git plugin)」を選択します。
選択後、hook先のURLを設定する箇所にJenkinsのURLを設定します。
github側の設定はこれで完了です。
まずは新規ジョブを作成します。
ジョブ名を記入し、「フリースタイル・プロジェクトのビルド」にチェックを入れます。
続いて作成したプロジェクトの「設定」より詳細な設定を行います。
ソースコードの管理より「git」を選択し、githubのリポジトリURLを設定します。
次にビルドするブランチを設定します。ここでは「dev/html」というブランチを設定しています。
そして、「ビルド・トリガ」を設定します。
「Build when a change is pushed to GitHub」と「SCMをポーリング」にチェックをいれます。
ポーリング形式にはcronと同じ書式で登録しますが、今回は定期実行は行わないので「* * * * *」を入力しておきます。
最後に実行するシェルスクリプトを設定します。
#!/bin/sh dir=/var/lib/jenkins/workspace/kentei/node_modules # node_modulesディレクトリがなければ「npm install」を行う if [ ! -e $dir ]; then /usr/bin/npm install fi # gulp buildを行うためにディレクトリの移動 cd /var/lib/jenkins/workspace/githubのリポジトリ名 /usr/bin/gulp build &&: # gulp build での実行結果をDocumentRootに転送 sudo rsync -vr --delete --exclude ".git/" /var/lib/jenkins/workspace/githubのリポジトリ名/build結果 'DocuemtRootのパス'