ラベル Google Compute Engine の投稿を表示しています。 すべての投稿を表示
ラベル Google Compute Engine の投稿を表示しています。 すべての投稿を表示

2014年2月19日水曜日

Google Compute Engine(CentOS6)にGoのCI環境を作る

今日、少し時間があったので、Google Compute Engine(以下、GCE)上でJenkinsを動かしてビルドとテストを行う環境を作ってみました。
GCEは、DebianとCentOS6が選べるのですが、私はCentOS6を選びました。

GCEのインスタンスを起動するには、Google Cloud Consoleからインスタンスを起動するのですが、まず、前提として、「課金設定をする」必要があります。(課金設定をしないと、GCEの初期化が成功しない。)インスタンスを生成して、起動するところまでのメモは以前投稿しているのでそちらをごらんください。Google Cloud SDKもダウンロード済みだということにします。(私は忘れていたけど…)

ファイアウォールの設定


まず、GCEのファイアウォールの設定を行います。これは、iptablesではなく、GCEのインスタンスに対するファイアウォールの設定です。Cloud Consoleからでもできますが、以下のコマンドを実行しました。ポートを8888を許可する設定にしていますが、Jenkinsのデフォルトポートをそのまま使えると思うので、デフォルトのポートを使う場合は、tcp:8080にしてください。
$ gcutil addfirewall [インスタンス名] --description="Jenkins用のポート" --allowed="tcp:8888"

そして、sshでログインして、iptablesを切る。(GCEのファイアウォールに委ねるので。これに気がつくのに時間がかかってしまいました…。二重にブロックされるので結構うっとうしい…。)

$ sudo service iptables save
$ sudo service iptables stop
$ sudo chkconfig iptables off

次回の起動でiptablesが動いてくれると困るので、chkconfigでoffにしておきます。

Javaのインストール


Javaもyumで入れましたが、公式のものが入れられなかった(多分、ブラウザでアクセスして、利用規約に同意のチェックがいる?)のでopenjdkを入れました。Jenkinsが動けば問題は無いので、細かいことは無視しました。
$ sudo yum search jdk

java-1.7.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.7.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.7.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.7.0-openjdk-javadoc.noarch : OpenJDK API Documentation
java-1.7.0-openjdk-src.x86_64 : OpenJDK Source Bundle
ldapjdk-javadoc.x86_64 : Javadoc for ldapjdk
icedtea-web.x86_64 : Additional Java components for OpenJDK - Java browser plug-in : and Web Start implementation
ldapjdk.x86_64 : The Mozilla LDAP Java SDK

$ sudo yum install java-1.7.0-openjdk-devel.x86_64

Jenkinsのインストール

Jenkinsをインストールします。Jenkinsのrpm版が提供されていたのでもしかしたら?と思ったら、yumでインストールも可能だったので、yumにKeyを登録してインストールしています。

$ sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo

$ sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

$ sudo yum install jenkins

Jenkinsの設定とサービスの登録

PORTを8888に変更する。(デフォルトが8080なので、そのままでもいいと思いますが)
$ sudo vi /etc/sysconfig/jenkins
JENKINS_PORT="8888"

Jenkinsのchkconfigをon
$ sudo chkconfig jenkins on

Jenkinsを起動させる。(初回だけ)
$ sudo service jenkins start

Jenkinsの起動確認


ブラウザで、http://[VM InstanceのEXTERNAL ADDRSSのipアドレス]:8888/
にアクセスしてJenkinsが表示されれば、成功です。

Gitも忘れずにインストールしておきましょう
Gitのインストール

$ sudo yum install git


Goをソースからインストールする。

私はこれしかしたことがないので(?)、今回もソースからGoをインストールしました。
Goをコンパイルするために、gccとmakeを、ソースコードをダウンロードするためにmercurialをインストールしました。

$ sudo yum install mercurial-hgk.x86_64

$ sudo yum install gcc

$ sudo yum install make

$ hg clone -u release https://code.google.com/p/go

$ cd go/src

$ ./all.bash

GCE上でGoのコンパイルをしてみたのですが、意外と早くて、1分30秒程度で終わったような気がします。そこからtestが始まりましたが、testはもう少しかかったかも?
で、喜んでいたら、一般ユーザのディレクトリでビルドしてしまったので、Jenkinsからコマンドを実行しようと思うと、Permissionで弾かれてしまいますから、これも良くないのですが、/home/ユーザのディレクトリにchmod o+rxしてしまいました。
次回以降は気をつけようと思います。基本は/usr/local以下ですかね。

Jenkinsのプロジェクト設定

Jenkinsにgitプラグインを入れたのですが、よく考えると、Goの場合は、go getでダウンロードしてからgo testですので、gitプラグインは無くても大丈夫です。
したがって、ビルドの設定の「シェルの実行」のところに、コマンドをいくつか書きました。

export GOPATH=${WORKSPACE}
/home/yokoyama/go/bin/go get github.com/taknb2nch/go-pop3

cd ${WORKSPACE}/
/home/yokoyama/go/bin/go test 

ポイントは、GOPATH変数を都度exportしているところでしょうか。go get/go testコマンドを実行しようと思うと、GOPATHに入れておかないといけませんからこのような形になります。
リポジトリは、+Takanobu Haginoさんが作られた、POP3のライブラリを対象にしてみました。(私のリポジトリにしようかと思いましたが、私のはどれもレガシーコードですので…w)

結果


ちゃんと、PASSの文字が輝いております。
Started by user anonymous
Building in workspace /var/lib/jenkins/jobs/Sample/workspace
[workspace] $ /bin/sh -xe /tmp/hudson5366985436882835859.sh
+ export GOPATH=/var/lib/jenkins/jobs/Sample/workspace
+ GOPATH=/var/lib/jenkins/jobs/Sample/workspace
+ /home/yokoyama/go/bin/go get github.com/taknb2nch/go-pop3
+ cd /var/lib/jenkins/jobs/Sample/workspace/
+ /home/yokoyama/go/bin/go test
PASS
ok   _/var/lib/jenkins/jobs/Sample/workspace 0.003s
Finished: SUCCESS

今回は、「手動実行」まででとどめました。常時起動するほどテストをすることがないということと、課金の問題があるので、無駄に起動しておくのはまずい。ということが大きな理由です。これで、GCEについてのノウハウが少しずつ貯めていけそうです。

参考サイト

https://developers.google.com/compute/docs/quickstart#centos
http://d.hatena.ne.jp/katsuren/20121030/1351569655
http://d.hatena.ne.jp/okinaka/20120404/1333524730

2013年10月13日日曜日

第22回GDG中国勉強会を開催しました。

10/12(土)の第22回GDG中国勉強会@岡山を開催しました。
今回は、Google Cloud Platformを使ってみるという会でしたので、参加者の皆さんもいろいろなサービス、APIを使われたことだろうと思っています。
見た限りでは、Google App Engineが多かったようです。
そのうち、Blogを書いてくれる事だろうと思うので待っていることにします。

私はGoogle Cloud SQLと、Google Compute Engineを動かしたので、その手順を書いておきます。

※事前にGoogle Cloud Consoleでプロジェクトを作っていること。

まず、Google Cloud SQLから。

  1. Cloud SDKをダウンロード、展開する。(Go版に萌えましたが、コマンドが少ないのでPython版か、Java版が無難です。もしかしたらPython版だと早い?)
  2. Google Cloud SQLに接続する場合は、
    1. ./gauth
    2. (プロジェクトIDなどを聞かれ、認証URLが出てくるのでブラウザで認証させる)
  3. ./google_sql.sh [インスタンス名]

とすると、Google Cloud SQLに接続できるので、これで、select version();とか実行すれば結果が取れます。
参考:G+の投稿

次に、Google Compute Engineの接続。ほぼ、Getting Startedの通りですが、Webのコンソールも利用しました。方法をメモしておきます。
  1. プロジェクトのメニューからAPIs&auth→APIsを選び、「Google Compute Engine」を探し、ONにする。
  2. メニューのCompute Engineを選択し、NEW INSTANCEボタンを押す。
    1. OSはDebian6、7とCentOS6が選べる。(私はCentOSにしました)。
    2. 以下の画像はDiskを再利用していますが、New Persistent Disk from Imageを選択すれば新規作成できます。
  3. ./gcutil auth --project=[プロジェクト名]
    1. 承認用のURLが表示されるので、ブラウザにコピペして承認する。
    2. 承認キーが表示されたら、コンソールにコピペ
  4. ./gcutil ssh [インスタンス名]
    1. sshで接続してCompute Engineのコンソールを利用する。
    2. 思ったより重たいので注意。
    3. ここからCompute Engine側でコマンド実行となる。
  5. sudo yum install httpdとかする。
    1. Apacheを動かすので。
  6. sudo /etc/rc.d/init.d/httpd startとかする。
    1. Apache起動。(service httpd startも可能ですが、私は上のコマンドを実行しました。)
  7. ここで、一旦Compute Engineからログアウト
  8. firewallを追加。
    1. ./gcutil addfirewall http2 --description="Incoming http allowed." --allowed="tcp:http"
    2. iptablesを書き換えても何も意味はありません。(Google側で管理されているそうです。)
  9. 適当にIPアドレスで接続。
  10. 表示されれば成功!
  11. 最後に、インスタンスを削除して終了。
    1. コンソール上で可能(削除とリブートしか無い)
    2. ./gcutil deleteinstance [インスタンス名]でも可能です。
    3. ちなみに、Compute Engineでshutdown -h nowしたら、削除するしかできなくなります。(REBOOT INSTANCEボタンはエラーになります)
私はスターターパックを使っていじり倒そうと思いましたが、多分プロジェクト名を間違って申し込んだので、$1000が設定されないと思うので、適当に払います…。

2013/10/27追記:
金額が表示されたのをG+に投稿したのですが、こちらにもリンクを張っておきます。
https://plus.google.com/114183076079015753160/posts/88dV7kCuTrL

よくある質問
Q1. お金…?
A. 今のところ、どれくらいかかっているか不明です。が、そこまで課金されない気がする。まだ、Cloud Console上には課金情報は出ていません。
https://cloud.google.com/resources/starterpack/から、$1000のスターターパックに申し込んでおくと吉…?(Promo Code「fuy-in」です)