jenkins と ghprb,github commit status を使った仕事が楽になる 10 の設定


「ぐるぐるイーグル」チームでエンジニアをしている @takesato こと佐藤(たけ)です.

「ぐるぐるイーグル」では,エンジニアだけでなく企画もデザイナも github を使用して仕事をし,お互いレビューをするという環境ができあがっています.
see. 【GGG#4】Aiming『ぐるぐるイーグル』にみるゲーム性を左右する背景マップの作り方…職種を超えた挑戦が効率的なワークフローを生む | Social Game Info

プロジェクト開始当初から Jenkins も導入しており,Jenkins の結果を github に反映していました.
しかし,github の表示できるステータスは長い間1つのみだった為, 「ぐるぐるイーグル」 での Jenkins の Job は色々なチェックを全て一つの Job でおこなっていました.
Job の分割を行なうと色々なメリットがあるので,今回 Job の分割を行ないました.
いくつかその時に得た知見を紹介してみようと思います.

ちなみにメリットはこのようなものがあります.

  • 分割した Job 単位で成功失敗がわかる.
    • 1つの Job の場合,途中で失敗した場合,残りの処理が成功するのか失敗するのかがわからない.

  • 依存しない Job であれば,複数同時に実行する事ができ,時間の短縮にも繋る.
  • A(Unity), B(Ruby) のようなテストの場合, B を実行するサーバだけ Linux のサーバに移すといった事もやりやすくなる.
  • 失敗した Job だけを再開できる(要 rebuild plugin)

続きを読む


運用時の Ansible の使い方(一例)


こんにちは。15年度入社の新卒、大澤です。

私はインフラエンジニアとして Aiming に入社し、ほぼ毎日新しい技術やサービスに触れています( Git, Jenkins, Ansible, などなど… )。その中でも今回は、私が最近覚えた運用時に使う Ansible の一例を紹介したいと思います。

Ansible shell module を用いて、複数サーバへコマンドを実行

同じコマンドを実行したいサーバが複数台ある場合( Slave DB2台に “show slave status\G” とか、Web Server 5台のアクセスログを見るとか…)、私のような未熟者だと「一台ずつ入ってコマンドを実行しよう!」と考えがちですが、そのやり方だと非効率だと叱咤を受けます。そこで、 Ansible の shell module を使用します。

例えば、下記のような inventory file を用意して…

[web-server]
webserver01
webserver02
webserver03

[slave-server]
slave01
slave02

以下のコマンドを実行します。

ansible -i hosts web-server -m shell -s -a "tail -2 access.log" | less

(オプションの説明)
-i <inventory_file> <group>: inventory file を指定する。group 名を指定しないとエラー。
-m <module>: 実行する module を指定する。
-s: sudo で実行する。
-a <command>: 実行する command を書く。

すると、 web-server group に書かれている server(webserver01~ 03) 全てに “tail -2 access.log” が実行され、サーバごとの結果が less に渡されて表示されます。上記のコマンドだと、access.log の中身が末尾2行ずつ表示されます。結果をパイプで渡すことも出来ますし、実行するコマンド内でもパイプは使用できます。

↓ access.log を見ている様子(見えてはいけない部分は隠しています。)
https://gyazo.com/fe7b1c9cc5ce01e3a06c8b49920aec51

もちろん、for 文でも同じことができますが、inventory file の group 分けが便利だと感じます(上記の例でいうと、 web-server と slave-server )。-i hosts all とすると、inventory file に書かれている全てのサーバに実行されます(重複はしない)。もちろん1つのサーバを指定することもできます。

以上、私が最近覚えた運用時の Ansible の使い方の一例でした。
来年の新卒にきちんと教えられるよう今後も Aiming で頑張りたいと思います。


「関西ゲーム勉強会 2015冬」に参加させて頂きました!


初めまして、Aimingエンジニアの山藤です。

先日、11月28日に大阪で行われた「関西ゲーム勉強会 2015冬」で発表させて頂きました、当日はかなりの盛況でした。勉強会運営の皆様、参加者の皆様、ありがとうございました。

内容は「ログレスの戦闘からみるデータ同期」という事で、「剣と魔法のログレス〜いにしえの女神〜」の戦闘コンテンツでのゲームサーバ・クライアントのやりとりや、通信遅延をフォローする実装例についてです。

 

ログレスでは、クライアントがサーバからの返答を待ってから動かす、クライアント間の厳密な同期が必要になる戦闘コンテンツや、返答を待たずに動作を開始するマップ移動等、ユーザー様が不快感の少ない操作ができ、ゲームが破綻しない様に、コンテンツ毎に同期の取り方を微妙に変えていたりします。

また機会があれば他のコンテンツの実装例も紹介させて頂きます。

丁度この記事を書かせて頂いてる間に、12月4日台湾のAppleStoreで台湾版のログレスがセールストップ取りました。これからも応援よろしくお願いします。