megadreams前回の記事でGitHubとJenkinsを用いた自動デプロイ環境の概要をご説明しました。GitHubやJenkinsと連携した開発環境作成でのrsyncとの出会い今回は、その環境を実現するための設定手順を書いて行きたいと思います。大きく4つの手順があります。インストール済みJenkinsのインストールまずは、Jenkinsのインストール通常ならば、運用するサーバとJenkinsが動いているサーバを分けるべきですが、サーバコストの都合などで今回は同一サーバ上で動かすことにします。ApacheサーバとJenkinsサーバが同じport80で待つことはできないので、jenkinsをport:8080で動かすことにします。セキュリティ上必要最低限以外のportを開放したくないため、80番ポートのみ開放して内部的に8080に変換する方法をとります。仕組みとしては、port:80番で「あるURL」にアクセスが来た場合に、内部でport:8080に変換してアクセスするという方法です。この仕組みをリバースプロキシーと言います。この形を目指して設定していきます。前置きが長くなりましたが、早速JenkinsのインストールJenkinsは、yumでインストールしますが、まずはyumでインストール出来るようリポジトリに追加してから行います。jenkins次にJenkinsを実行するにはJavaが必要であるため、JDKがインストールされていない場合はインストールします。java-1.6.0-openjdk-devel.x86_64参考:http://kumagonjp2.blog.fc2.com/blog-entry-103.html次に『http://ホスト名/jenkins』でアクセスするとJenkinsにアクセス出来るように設定します。JENKINS_ARGS="––prefix=/jenkins"これでJenkins側の設定は終了です。Apacheの設定Apacheで起動する際には、バーチャルホストの設定を行ってください。(必須ではありません)バーチャルホストについては、こちらを参考に...http://www.atmarkit.co.jp/flinux/rensai/apache08/apache08a.htmlJenkinsにアクセスするためにリバースプロキシの設定を行います。8080これで『http://ホスト名/jenkins』にアクセスして、Jenkinsが開くかどうか確認する。追記〜上記設定では、~~URL~~/jenkinseでアクセス出来ないとの声が多数上がっています。何かの記入漏れだと思いますので、解決し次第追記させて頂きます。追記〜上記問題についてですが、ファイアーウォールで8080ポートが解放されていると上手くつながらないそうです。一度、ファイアーウォール(iptables)で8080ポートを閉じてみて、試してみて下さい。JenkinsとGitHubの連携ここからは、自動デプロイ環境構築に向けて、GitHubとの連携を構築していきたいと思います。前回のおさらいで今目指している形は以下の図の通りです。pluginをインストールします。Jenkinsの管理->プラグインの管理->利用可能で検索してインストール次にGitHubへは鍵認証が必要であるため、Jenkinsユーザで鍵の認証設定を行います。/var/lib/jenkinsにあります。../.ssh※パーミッションなどの問題が合った場合、root権限で鍵を作成し/root/.ssh以下に出来た鍵を/var/lib/jenkins/.sshに移動しchownで所有者をjenkinsに変えるという方法でも大丈夫です。これで、公開鍵(id_rsa.pub)と秘密鍵(id_rsa)の設定は終了。次に公開鍵をGitHubに登録します。プロジェクトごとのキーに設定すると重複してエラーなど出るのでユーザのSSHKeyとして登録するここで、先ほど作成した公開鍵(id_rsa.pub)の中身を貼り付ける。Titleは好きな名前で良い。次に大事なのは、GitHubにアクセスできるよう初期アクセスを行うことです。以下のコマンドでGitHugにアクセス出来るかどうか確認を行なって下さい。"jenkins"とりあえずuser.emailは適当で大丈夫です。次にJenkinsでGitHubからコードを取得するという設定を行います。そのために、まずは、自動デプロイしたいプロジェクトを作成します。新規ジョブ作成でフリースタイル・プロジェクトのビルドを選択し、ジョブ名を入力してOKを押しますすると、設定画面が出てくるので中段付近にある「ソースコード管理システム」でGitを選択します。URLに自動デプロイしたいリポジトリのアドレスを入力して下さい。ここで入力するURLは、http://から始まるURLではなくgit@github.com:から始まるURLを入力して下さい。これで保存を押して、Jenkinsの初期設定は終了です。次にGitHubへpushしたタイミングで最新のコードをpullしてくる設定を行いたいと思います。これには、フックという仕組みを利用します。簡単に説明すると何かアクションが起きたタイミングで、なんらかの処理を行う仕組みのことを言います。ここでは、GitHubへpushされたタイミングで、Jenkinsがコードをpullしてくるということを実装したいと思います。hooksという仕組みを使用します。hooksの設定には、Jenkinsの「ビルドを実行」というところのURLが必要になるためこのURLをコピーしておきます。右クリックでリンクアドレスをコピーします。hooksの設定を行います。先ほどコピーしたURLを貼り付けて保存します。これで、GitHubへPushしたタイミングで先ほど入力したURL(ビルドの実行)が呼び出され最新のコードがJenkinsへpullされるという仕組みの実装が出来ました。最後にWebサーバで公開しているディレクトリに最新のコードをデプロイする設定を行います。ここからは、先日の記事に書いたrsyncを使用します。公開しているディレクトリへの絶対パス上記設定で、GitHubへpushしたタイミングで自動デプロイが実行され、またテスト用に直接ファイルをサーバにあげてテスト実行後GitHubへPushしたタイミングで公開ディレクトリがGitHubの最新のコードの状態に保たれるという自分にとっての理想の開発環境を構築することが出来ました。user名@IPアドレス:公開ディレクトリ絶対パスってな感じで行けるはず,,,Jenkinsさんは、他にもブランチを切って作業している場合にはブランチの指定やテストが通った場合のみテスト環境へアップさせるなど色々と出来るため、もっと勉強して活用して行きたいと思います!!ご意見ご指摘、ご感想などありましたらコメント欄へどしどしお書き下さい。site.プロフィール某IT企業エンジニアの社会人4年目。アジャイル開発.HTML5,Objective-CなどでWebアプリの開発。Chefを使ったサーバ構築の自動化にも取り組んでいます。