2012年6月28日木曜日

JellyBeansがやってきた #io12 #io12j

おはようございます、numa08です。Google IO 12で配布されたGalaxyNexusとNexus7にAndroid4.1 JBが降って来ました。

jbのロック画面。ロック解除とカメラの起動に加えて、GoogleNowを立ち上げられる。



GoogleNowの起動画面。特に設定することなくすぐ利用可能。

USBデバッグのアイコンの形状が変わりました。

これはNexus7。Android4.1が搭載されている。

手元に、API依存を強く引き起こしそうなアプリが無いので詳細な検証は行えないのですが、とりあえず降ってきた報告だけ。
日本でも今夜辺りには配布されるのではないでしょうか・・・?

2012年6月16日土曜日

エミュレーターの画面を出力するディスプレイの設定

エミュレーターを実行するディスプレイを設定する。

Jenkinsの管理→Global properties
で、環境変数
DISPLAY=:0.0

に設定しておく。

とりあえず、こんだけ。これで、Jenkinsの動いているマシンで、エミュレーターを表示できる。


ローカルのマシンで、xhostを立ちあげてそこで表示できるようにしようかなとも思ったけど、常にxhost立ち上がっている訳でもないし、たぶんそれはやりすぎ。

確認したい時だけ、確認できるようになっていれば良いと思う。それが、Jenkinsの目指す所であるはずだし。

X Window System の設定は色々と面倒くさい。

Jenkinsを一般ユーザーで動かす

LinuxでJenkinsを動かすと、ユーザー jenkins が作成され、専用のホームディレクトリなどが生成されてその上で動作をする。

Linuxのデーモン達と同じ様な感じ。

ただ、今回は一般ユーザー numanuma08 で動作をさせたいと思う。

その目的は、Androidのエミュレーターの実行画面を見たいから。

ユーザー jenkins を一般ユーザーにするのもアリかもしれないけど、 なんかイヤなので。

以下、手順

/etc/sysconfig/jenkins の設定

JENKINS_USER="numanuma08"
JENKINS_PORT="8010"
JENKINS_ARGS="--prefix=/jenkins"


/etc/httpd/conf.d/jenkins.conf の設定


Order allow,deny
Allow from all
ProxyPass http://localhost:8010/jenkins
ProxyPassReverse http://localhost:8010/jenkins



パーミッションの変更

chown -R numanuma08 /var/lib/jenkins
chown -R numanuma08 /var/log/jenkins
chown -R numanuma08 /var/cache/jenkins

パスを通す

AndroidSDK


Jenkinsの管理→Global properties

からパスを通す必用あり。

Ant


自動インストールを選択しても実行されなかった。Antのパスを指定する必要あり。

一般ユーザーで動かしているからだろうか、様々な不具合が目に付く。

プラグイン関連がもう、火を拭きまくっていてヤバイ。

明日に続く。

2012年6月14日木曜日

さようなら、VMWareServer

節電の夏がやって来くる。

 正直な話、昨年の我が家の9月の電気代は結構酷かった。

ほぼ1か月間アメリカに旅行に行っていて家に居ないにもかかわらず、 請求された電気代が、家に居る時とほぼ同じだった。

 理由は明快で
  •  メインサーバー 
  • メディアサーバー 
  • サーキュレーター 
  • 換気扇
が、常時稼動していたためだ。

今年は、夏の間も家にいる。となると、対策を講じるべきかと思う。電気代も値上がるみたいだし。

という訳で、サーバーの一本化を行おうと考えた。メディアサーバーは、テレビ番組の録画を行うサーバーで、Windowsが動いている。

こいつに一本化するのが早道かな、と。

メインサーバーは、VMWareESXiを利用していくつかのLinuxが動いている。これらを、VMWare Vsphere Converter を利用して再利用可能な形に変換する必要がある。

とは言え、大した手間でもない。

変換対象の仮想マシンの電源を切り(!)、件のツールを動かすだけだ。

ただ、変換後にどのVMWareソリューションで動かすのかは大事なところだ。


最初は、VMWareServer2で動かすことを考えていた。しかし、もう随分前に更新もストップしたこれは、対応しているOSも時代遅れのもの。

案の定、ScientificLinux6 64bitの動作は不可能だった。

結局、VMwarePlayerでその場しのぎ。

管理が面倒であるが、仕方ないのかなぁ。

テスト対象のデバイスを自動的に選択する Jenkins

先日から困っている、JenkinsのAndroid Emulator Pluginの不具合。

原因の特定もできず、解消の見込みも無いまますでに3日くらい経過してしまった。

このままうなり続けていても、ただいたずらに時間が経過するだけなので、別の手段を用いることにする。

そもそも、Jenkinsを利用する理由の一つは、自動的に様々な端末(エミュレーター)での動作をさせることが可能であるからである。

自動化大事だよ、自動化って話。

で、自動化したい項目をまとめると次の2点。

  1. エミュレーターの作成
  2. テストの実行
どちらも、簡単なスクリプトで実現できそうである。

一つ目に関しては。マルチ構成のプロジェクト設定にすれば、OSのバージョン、画面のサイズなどを変数として宣言することが出来る。バッチファイルの中で呼び出してあげればそれで終わり。

 二つ目も、

adb devices


コマンドから、動作中のエミュレーター、デバイスの一覧を取得できることから

adb devices | awk 'NR>1 {print $1}'


なんて やれば(多分)デバイスの一覧を取得できるのでうまう使ってやればいい。

結局、既存の問題はプラグインが悪いのか俺が悪いのかは不明。

しかし、どうも動いている人もいるから、なんともなぁ・・・。


プラグインのソースコードを眺めることも含めて検証を行いたいけど、まあこれで上手く行きそうなのでいいかな?って。

まあ、そんな分けでCIを周りに勧めていきたいとは思うけど、Androidの開発やってるの俺くらいだしなぁ・・・。

2012年6月12日火曜日

JennkinsOnWindowsでAndroid #Jenkins









昨日に引き続きJenkinsの設定。Linuxの時と違う部分が割りとあって、案外キツイ。

まず、そもそもエミュレーターが起動しない。コレに関しては未だに原因不明。コンソールの出力を見るに


$ "F:\Program Files\Android\android-sdk/platform-tools/adb.exe" start-server
$ "F:\Program Files\Android\android-sdk/tools/emulator.exe" -snapshot-list -no-window -avd hudson_ja-JP_240_WVGA_android-10
[android] Starting Android emulator and creating initial snapshot
[android] Erasing existing emulator data...
$ "F:\Program Files\Android\android-sdk/tools/emulator.exe" -no-boot-anim -ports 57373,57374 -prop persist.sys.language=ja -prop persist.sys.country=JP -avd hudson_ja-JP_240_WVGA_android-10 -no-snapshot-load -no-snapshot-save -wipe-data -no-window
WARNING: Data partition already in use. Changes will not persist!
WARNING: SD Card image already in use: C:\Users\numanuma08\.android\avd\hudson_ja-JP_240_WVGA_android-10.avd/sdcard.img
ko:Snapshot storage already in use: C:\Users\numanuma08\.android\avd\hudson_ja-JP_240_WVGA_android-10.avd/snapshots.img
* daemon not running. starting it now on port 57206 *
* daemon started successfully

どうも、"emulator.exe"が二回呼び出されてエミュレーターが起動していなような?

とりあえず、エミュレーターの起動は置いておいて、apkファイルを吐き出すため、デバッグビルドとテストのビルドの設定を先に。


antの設定


どうやら、antの自動インストールはうまく起動しないみたい。公式サイト(http://ant.apache.org/) からant.1.8.3をダウンロードして、適当なフォルダに解凍。
Jenkinsの管理→システム設定→ant から、ANT_HOMEを設定。

バージョンがちょっと古いのは、開発機のantのバージョンに合わせているため。まあ、開発機のバージョン上げてもいいんだけども・・・。


JAVA_HOMEの設定


Windowsの環境変数%JAVA_HOME%を読みこんでくれるものと思っていたけど、どうやらそうでもないみたい。Linuxでは勝手に読み込んでくれたんだけどなぁ?

antと同じく
Jenkinsの管理→システム設定→JDK からJAVA_HOMEを設定

環境変数に注意


さて、各プロジェクトの設定に移るわけだけど、androidプロジェクトなので

android update project -p %WORKSPACE%\ProjectPath


の様に環境変数を使って、プロジェクトのパスを指定する必要がある。ただ、この時の環境変数けど

 バッチファイル:%WORKSPACE%

Jenkinsの設定:$WORKSPACE

と、Jenkinsの方はLinux,ライクな設定方法になっていた。だが、フォルダの区切り文字は\(バックスラッシュ)なので

ant でビルド の項目で、build.xml のパスを

$WORKSPACE\ProjectPath\build.xml

とする必要がある。面倒くさい...

Windowsバッチファイルのあれこれ


AndroidプロジェクトとAndroidTestプロジェクトを同じバッチファイル内でUpdateしようとするとなぜか失敗する。



これは落ちる


  • AndroidプロジェクトのUdate
  • 何か処理
  • AndroidTestプロジェクトのUpdate

としないと通らなかった。
これは通る



とは言え、まだまだ問題は残っていて、そもそもテストの実行ができないとかもう色々と・・・。

エミュレーターの実行ができない件に関しては、原因が分からない・・・。

環境完成の先は長いです・・・。

2012年6月11日月曜日

WindowsにJenkinsを入れてCI #Jenkns

散歩していたら思いついた。

非力なメインサーバーでJenkinsを入れて、ビルドをするよりも実はCorei7-2600Kなメディアサーバーさんでビルドすればいいんじゃね?

Windowsに入れることが、なんか色々とハードル高そうだけど、わりとやってる人がいるっぽいので挑戦。

Windows上でJenkinsを動作、Linuxで動いているGitリポジトリからプロジェクトをクローンし、antでビルドする感じ。

インストール

インストール自体は簡単。公式サイト(http://jenkins-ci.org/)から、インストール用のファイルをダウンロードしてきて、実行するだけ。

色々と設定

とりあえず、URLを変更。ちなみに、今回は
F:\/Program Files/

にインストールしたので。

F:\Program Files\Jenkins\jenkis.xml

を開いて

 <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080</arguments>



  <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --prefix=/jenkins --httpPort=80</arguments>

これで http://localhost/jenkins でアクセスできるようになる。

次いで、実行ユーザーの変更。

タスクマネージャー→サービス→サービス から Jenkins を選び プロパティ

ログオンタブで アカウント を設定する。


Gitと言うか、SSHでリポジトリにアクセスするためのユーザに設定。

ちなみに、gitはCygwinのgitを使っています。

 この辺まで来たら再起動。サービス画面から停止、開始でも良いけどコマンドでやるなら

NET STOP Jenkins

NET START Jenkins

とする。

次に、Jenkinsの設定をブラウザから行う。

JenkinsのWorkspaceはデフォルトでは

インストールしたフォルダ\jobs 以下に作られるらしい。Program File なんてスペースの入ったフォルダの下で作業しようものなら、何が起こるか分からんので変更。

システムの管理→高度な設定


から、適当な場所を選択する。

プラグイン

使っているプラグインは

Jenkins git plugin : https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin

android emulator plugin : https://wiki.jenkins-ci.org/display/JENKINS/Android+Emulator+Plugin

それぞれインストールしたら、パスの設定なんかをやっておく。Android SDK や Gitのインストールは省略。

とりあえずこんなもん。

現状

残念ながらこれでビルドをしようとすると失敗する。エミュレーターの立ちあげでコケてる感じがする。

スペック不足はたぶん無いので、プロジェクトの設定かなと疑ってみる。

まあ、気長にやっていきましょうかね。

2012年6月10日日曜日

WordPressのパーマリンク

Wordpressでパーマリンク設定時に詰まったことをチョット。

どうも、.htaccessが無視されてるなー、と思ったらどうやらAllowOverrideが無効だった模様。

<Directory /var/www/html>
 AllowOverrited All
</Directory>

で解決。

メモ程度と言うことで。