megadreamsAWSを使用しているなら分かりやすさを重視するためにS3のエンドポイントにわかりやすいFQDNをつけてAWSのDNSであるRoute53に登録してみたが下記のようなエラーが出た。<HostId>...</HostId>エンドポイントに直接アクセスすれば、画像は表示されるのにRote53を経由した場合だとBucketがねぇよ!って怒られる。なんでだろと思ってリファレンスを見ていると、どうやらS3のバケット名とキーの命名規則について『バケットでは英数字が基本ではあるが、DNS(.s3.amazonaws.com)としても使われる』なんと!バケット名と指定するFQDNを同じにしなければいけないとは。バケット名とFQSNを同じにするとRoute53経由で見れるようになりました!!ちゃんと読めばわかるけど、意外にはまりそうなポイントでした。megadreams最近、サーバの自動構築にあたり、サーバ起動時のスクリプトをChefと組み合わせて書いているのですが、そこで問題が。onでサーバを再起動してみるとスクリプトが動いていない調べてみると両者実行時に、環境変数が違うためにコマンドやそれらの設定などが読み込まれずエラーとなるとのことrootユーザでのshコマンド実行時とデーモン起動終了時のスクリプトの環境変数の違いについては以下の記事がすごく参考になりました。コマンドを利用して実行しながら確認する必要があります。serviceコマンドで実行すると、デーモン起動・終了時のスクリプト実行時の環境変数と同じ環境変数で実行してくれるためいちいちサーバを再起動しなくても確認することはできます。同じrootで実行してるのなら環境変数も同じにしてくれたらいいのに。megadreams個人的にサービスを友人同士で行いたく、そのプロジェクト管理のためにRedmineを導入してみました!導入にあたり下記のサイトが非常に役に立ったので共有しておきます。-vと打っても動かず,,,gemコマンドも使えない状態だったが、一般ユーザに戻って実行すると動かすことが出来た。青山センターで行われた「第7回Jenkins勉強会」に参加してきた時のメモです。http://connpass.com/event/1690/今回の勉強会では、組み込み系が中心でC/C++のプロジェクトでJenkinsを利用している方などの発表でした。基本的には組み込み系であってもWeb系であっても裏側の構成は同じであるが組み込み系ならではの作りや注意点などのお話がありました。最近作っているプラグインの紹介Jenkinsのうみの親である川口さんの発表で現在開発中のプラグインについてお話されました。1分に1ジョブ回している『組み込み業界よくあるJenkins環境構築例』TechMatrixの天久さんによるお話で、品質に関わる製品を販売されていることからお客様方でのJenkins構築例などを紹介や自社内での導入事例といった内容でした。ソフトウェア検証室の馬場さんのお話で社内にJenkinsを導入するまでに苦労したことや実際の構築内容をお話されました。・Jenkinsボートはいつ公開されるの?ライセンスだけでも使えるようになればいいのになぁー^^財務の関係で厳しいw『Jenkinsを使うようになったきっかけとEclipseでの簡単にビルド』@atottoさんによる発表で、Jenkinsの便利なプラグインについてやEclipseでビルドを実行するお話でした。?を使ってやりたい以上、エンタープライズ系のお話が中心でしたがWeb系にも活かせるお話が盛りたくさんでした。同時に、自分にはまだまだ難しいと感じたため、もっとJenkinsについての勉強やそもそもテストの書き方について勉強していこうと感じることが出来た勉強会になりました。megadreams2012年10月17日にGMOで行われた、アプリ制作勉強会の参加メモです。(さとうようぞう)さんが「ゲーム開発におけるScrum実践例」という題名でお話されました。自分たちもScrumで開発を行なっていたので、凄くためになるお話でした。(さとうようぞう)さん発表のスライドを御覧ください。megadreams前回のお話でJenkinsとGitHubによる継続的インテグレーションの開発環境の設定を行いました。継続的インテグレーションを行うにあたり実際にJenkinsでテストを実行した際に「どんなテスト結果を表示してくれるのか?」ということをご紹介したいと思います。現在FuelPHPを用いて開発を行なっているためここでのテストの実行にはPHPUnitを使用して行っています。Jenkinsってイギリス人の執事をイメージした名前だそうです。プロジェクトに優秀な執事がいるような思いが込められてこの名前が付けられたと言われています。参考:Jenkinsで始める継続的インテグレーションでは、JenkinsというよりはPHPのUnitテストでどんなレポートを表示してくれるのか?たくさんあるのですが、大きく5つ紹介します。大きくこれら5つについての説明とJenkinsで表示した際の表示内容を見て行きましょう。テストの結果の表示テストの結果は、その名の通り成功したテストや失敗したテストの一覧を表示してくれます。コードカバレッジの表示コードカバレッジとは、作成したテストがテスト対象コードのうちどのくらいテストしているかを表している率のことを言います。コードカバレッジが高いほどテストコードがしっかり書かれていて、品質の良いコードを保つことが出来ています。ちなみにコードカバレッジの表示では、カバレッジ率の表示だけではなく、テストがされている行とされていない行を視覚的に分かりやすく表示することができます。テストの状況は、テストが実施されたファイル、クラス、行数と細かく表示されますテストがされた行とされていない行テストがされている行は緑色、されていない行は赤色で塗られています。バグになりそうな箇所や実装上の問題を検出3のバグになりそうな箇所や実装上の問題を検出については、独自のルールを取り入れることも出来、反していれば警告を表示するといった設定も行うことができます。独自のルールの詳しい設定などについては次回以降の記事で紹介します。冗長化したコードを自動で検出しコードの最適化4の冗長化したコードを自動で検出しコードの最適化については、フォルダ内の各ファイルの重複度合いがグラフで表示されます。そのため共通化出来るところなどが視覚化されコードの最適化につなげることができます。ドキュメントの自動生成5のドキュメントの自動生成については、作成しているクラスのリファレンスを自動で生成してくれるものになります。検索も可能であり、正しいフォーマットで記述することにより作成したメソッドの説明や引数などの情報をリファレンスとしてまとめてくれます。このように、PHPUnitで用意されている機能をJenkinsで実行するこによりテストの結果を見やすく表現してくれます。これらは品質の良いコードを保つきっかけになり、品質の良いサービス作りへの第一歩であると思います。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さんは、他にもブランチを切って作業している場合にはブランチの指定やテストが通った場合のみテスト環境へアップさせるなど色々と出来るため、もっと勉強して活用して行きたいと思います!!ご意見ご指摘、ご感想などありましたらコメント欄へどしどしお書き下さい。megadreams社会人1年目のエンジニアにおいて開発環境の構築にはかなり時間がかかるもの。わけの分からないエラーと戦ったり、他の人の環境では動いても自分の環境では動かないなどそういう経験がある人も多いのではないでしょうか?今回は、GitHubやJenkinsと連携した開発環境を構築する上で出会ったrsyncコマンドとの出会いについてお話したいと思います。rsyncコマンドとは、ファイルなどのバックアップや同期を行うために使用されるコマンドで、変更分を検出して差分のみを転送することができ、cpコマンドと違って効率的なバックアップを行うことができます。ネットワーク経由でもバックアップや同期が行えたり、sshなどのリモートシェル経由でも利用が可能であるためとても便利なコマンドだそうです!このrsyncコマンドを知った瞬間、自分たちが構築したい環境を簡単に出来るではないか!と凄く感動しました!まずは、使いたいと思った背景をご説明したいと思います。目指すべく開発環境は、ソースコードをGitHubで管理し、継続的インテグレーションを導入するためにJenkinsを利用してサーバへ自動デプロイされる仕組みを構築することです。上の図のようにローカル環境で実装し、ある機能が実装されるとcommitしてGitHubへpushします。その後GitHubからJenkinsへデプロイされテストが実行されます。テストが正しく通ればサーバへ反映されるという仕組みです。ローカル環境だけではテストが出来ない場合もあるため、テストサーバへはFTPを使ってファイルをあげてサーバ上でもチェックが出来る環境を構築したいと考えていました。テスト環境にFTPでファイルをあげた際にずっとそのファイルが残り続けるのは良くないため、ローカルからGitHubへpushされJenkinsが動いた時には、サーバにあるコードは全てGitHubにcommitされている最新版へ戻すような設定を行いたいと思っていました。それを実現するためにjenkinsでGitHubからとってきたファイルをコピーする方法やそもそもテストサーバのファイルもgitで管理しちゃおうなど色々考えました。1:ファイルをコピーして同期jenkinsはテストを行う前にgitHubから最新版のデータをpullしてきます。その時には/var/lib/jenkins/以下にworkspaceというディレクトリが出来、そこにソースコードがpullされる仕組みになっています。そのファイルをサーバで設定されているドキュメントルート以下にコピーしようという考えです。stashコマンドを使おうという考えです。stashは,変更を一時的に退避させるコマンドであり実行するとcommitされたところまで状態を戻すことが出来ます。とアドバイスを頂いたのがrsyncとの初めての出会いです。next/オプションの説明についてはこちらを参考にどうぞ:はじめてrsyncを使う方が知っておきたい6つのルール上記の例だとpreディレクトリ以下にあるファイルをnextディレクトリに同期させるコマンドになります。–deleteオプションをつけることでnextディレクトリにはあってpreディレクトリにないファイルを削除することができます。次回は、これらの開発環境を整えるための手順を書いていきたいと思います。category.プロフィール某IT企業エンジニアの社会人4年目。アジャイル開発.HTML5,Objective-CなどでWebアプリの開発。Chefを使ったサーバ構築の自動化にも取り組んでいます。