2011-09-23

DotCloudにJenkins+Nexus環境を構築してBitbucketと連携してみたよ(3/3)

こんにちは!aquilegiaです。

その2の続きになります。今回で最後になりますのでもう少しお付き合いください。

4、Bitbucketの準備
Bitbucketのアカウントを作成して動作確認用プロジェクトのリポジトリを作成します。

4-1、Bitbucketのアカウントを作成してログイン
Bitbucket公式サイトのSign up freeボタンからサインアップしてください。


例ではアカウント名をaquilegiaで登録しています。今後、BItbucket接続URLなどにaquilegiaと出てきた場合は適宜読み替えてください。

4-2、リポジトリを作成
サインアップが完了したらページ上部にあるRepositoriesからcreate repositoryを選択した後、以下の内容で入力してください。

Name: helloworld
Private: チェック有
Language: Java
Description: 動作確認用プロジェクト
Website: (なし)
Project management: (Wiki、Issue trackingはお好みで)

入力が終わったらCreate repositoryボタンを押下してください。これでBitbucketの準備は終わりです。

5、動作確認用プロジェクトの作成
4-2で作成したリポジトリにプッシュするプロジェクトを作成します。動作確認用なので手間をかけずにMavenで作ります。

5-1、プロジェクトを作成
下記コマンドを実行すると

$ cd ~
$ mvn archetype:generate -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=sample -DartifactId=helloworld -Dversion=0.1-SNAPSHOT
(実行を確認にYと応える)

次の構造のQuickStartプロジェクトが作成されます。

helloworld
├── pom.xml
└── src
    ├── main
    │  └── java
    │      └── sample
    │          └── App.java
    └── test
        └── java
            └── sample
                └── AppTest.java

このままでも動きますが動作確認が目的なので、このプロジェクトが依存しているJUnitを
Nexusから取得するようにpom.xmlにリポジトリ定義を追加します。
</dependencies>の後にDotCloudアカウント名を書き換えたrepositoriesを追加してください。

$ vi helloworld/pom.xml
  <repositories>
    <repository>
      <id>com.dotcloud.nexus</id>
      <url>http://nexus-(DotCloudアカウント名).dotcloud.com/content/groups/public</url>
    </repository>
  </repositories>

5-2、リポジトリへコミット→プッシュ
作成したプロジェクトをBitbucketへプッシュするためにMercurialをインストールします。

$ sudo yum -y install mercurial
$ hg --help

次に作成したプロジェクトにローカルリポジトリを作成してコミットしてください。

$ cd ~
$ mkdir bitbucket
$ hg clone https://(Bitbucketアカウント名)@bitbucket.org/(Bitbucketアカウント名)/helloworld bitbucket/helloworld
$ mv helloworld/* ./bitbucket/helloworld/
$ rm -rf helloworld
$ cd bitbucket/helloworld
$ hg status
$ hg add
$ hg commit -u (Bitbucketアカウント名) -m '初回コミット'

コミット時にユーザ名を指定しておくとBitbucketにリンク付きで表示されます。Bitbucketに存在しないユーザ名を指定するとデッドリンクになるので取得したアカウント名を指定するのが無難です。
最後にBitbucketへプッシュします。

$ hg push https://(Bitbucketアカウント名)@bitbucket.org/(Bitbucketアカウント名)/helloworld

プッシュが成功すればBitbucketのSourceタブにソースが表示されます。


6、動作確認
6-1、Nexus接続情報を設定
Nexusリポジトリは匿名ユーザではアクセスできないように設定したので、 Mavenでビルド時にNexusリポジトリを参照できるよう接続情報を設定したsettings.xmlを作成してください。
またJenkinsがNexusからDLした依存ファイルを保存するローカルリポジトリをjettyユーザが書き込める場所に変更するためlocalRepositoryを指定してください。

$ dotcloud run jenkins.www -- mkdir -p .m2/repository \&\& ls -al
$ dotcloud run jenkins.www -- chmod 775 .m2/repository \&\& ls -l .m2/
$ dotcloud run jenkins.www -- vi .m2/settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings>
  <localRepository>/home/dotcloud/.m2/repository</localRepository>
  <servers>
    <server>
      <id>com.dotcloud.nexus</id>
      <username>nexus</username>
      <password>(Nexusパスワード)</password>
    </server>
  </servers>
</settings>

$ dotcloud run jenkins.www -- cat .m2/settings.xml

6-2、動作確認用プロジェクトをビルドするジョブを登録
ブラウザからJenkinsにログインし、左メニューから新規ジョブ作成を選択してください。
以下の内容を入力しOKボタンを押下する

ジョブ名: helloworld
ビルド: フリースタイル・プロジェクトのビルド

ビルドにMaven2/3プロジェクトを指定しないのはsettings.xmlを指定するためです。
次にジョブの細かな設定をします。

ソースコード管理システム: Mercurial
Repository URL: https://(Bitbucketアカウント名):(Bitbucketパスワード)@bitbucket.org/aquilegia/helloworld/

ビルド手順の追加: Mavenの呼び出し
使用するMaven: maven_2.2.1
ゴール: package
高度な設定
JVMオプション: -Dorg.apache.maven.user-settings=/home/dotcloud/.m2/settings.xml

JVMオプションのsettings.xmlファイルの指定は忘れないようにしてください。

6-3、ジョブを実行
登録したジョブの左メニューにあるビルド実行リンクを押下してジョブを実行してください。
ビルド履歴の日付リンクを押下し、左メニューのコンソール出力リンクから詳細を見ることができます。問題がなければ下のようにBUILD SUCCESSFULと表示されるはずです。


画像はわかりやすくするため何回か実行した後のものになりますが、初回はこれに加えてプラグインや依存のDLログが出力されます。



お疲れ様でした。これでDotCloud上にプライベートビルド環境ができました。Jenkinsのジョブ設定で「SCMをポーリング」を指定すればプッシュした後に変更を検知して自動でビルドすることもできます。また今回は手間を省くために動作確認用プロジェクトの作成にEclipseを使いませんでしたが、EclipseのMercurialEclipseプラグイン(updateサイト)を使うとBitbucketとのやり取りが簡単になります。

また注意点としてJenkinsとNexusはどちらもその機能上ディスクを多く使いますがDotCloudはまだディスクの使用制限がはっきりしていません。そのため過度な利用は避けたほうがよさそうです。

開発に使うツールをクラウド上に置くといつでも作業ができて便利です。他のサービスも組み合わせて快適な開発環境を構築してみてください。それではまた。

DotCloudにJenkins+Nexus環境を構築してBitbucketと連携してみたよ(2/3)

こんにちは!aquilegiaです。

その1の続きです。今回はDotCloudにJenkinsを構築します。
Jenkinsは少し面倒ですがお付き合いください。

3、DotCloudにJenkinsを構築
3-1、DotCloud用カスタムWARを作成
JenkinsもNexus同様にjettyユーザが書き込めるJENKINS_HOMEディレクトリが必要ですが、DotCloud環境だとJenkinsが提供する外部指定(JNDIや環境変数、システムプロパティなど)が全て利用できません。その為、あまりやりたくありませんがJenkinsのソースを直接変更してJENKINS_HOMEを指定します。

変更後のJENKINS_HOMEは/home/dotcloud/jenkinsとします。

3-1-1、GitHubからJenkinsのソースコードをDL
ローカルにgitがインストールされていない場合は事前にインストールしてください。

$ rpm -qa | grep git
$ sudo yum -y install git

次にカスタムWARを作るために編集対象のソースが含まれるcoreプロジェクトをcloneします。

$ mkdir -p jenkins/src
$ cd jenkins/src
$ git clone git://github.com/jenkinsci/jenkins.git core

最新ソースの状態になっているので安定してるリリースタグをチェックアウト(後でDLするWARファイルとバージョンを合わせておく)

$ cd core
$ git checkout jenkins-1.430

3-1-2、WebAppMain.javaを編集してJENKINS_HOMEを変更
WebAppMain.javaを開き

$ cd core/core/src/main/java/hudson/
$ cp -p WebAppMain.java WebAppMain.java.org
$ vi WebAppMain.java

getHomeDirメソッドの内容を次の2行にしてください。

        File newHome = new File("/home/dotcloud/jenkins");
        return new FileAndDescription(newHome,"/home/dotcloud/jenkins");

3-1-3、ソースをコンパイル
コンパイルはMavenを利用します。JDKも必要になるので無い場合はインストールしてください。

$ wget http://download.oracle.com/otn-pub/java/jdk/6u27-b07/jdk-6u27-linux-x64-rpm.bin
$ mv jdk-6u27-linux-x64-rpm.bin\?e\=1316438935\&h\=38edd1ecfcdb35d6dd0aa91215bb62fb jdk-6u27-linux-x64-rpm.bin
$ chmod u+x jdk-6u27-linux-x64-rpm.bin
$ sudo ./jdk-6u27-linux-x64-rpm.bin
$ java -version

次にMavenをインストールします。インストールはrootで作業します。

$ su -
# wget http://ftp.kddilabs.jp/infosystems/apache//maven/binaries/apache-maven-2.2.1-bin.tar.gz
# tar xzvf apache-maven-2.2.1-bin.tar.gz
# mv apache-maven-2.2.1-bin /opt/maven2
# rm -f apache-maven-2.2.1-bin.tar.gz
# vi /etc/profile.d/maven2.sh
export M2_HOME=/opt/maven2
export PATH=$PATH:$M2_HOME/bin
# exit
$ source /etc/profile
$ mvn -v

最後のmvnコマンドでバージョン情報が表示されればインストール成功です。

coreディレクトリの直下に移動した後、下記コマンドを実行してコンパイルします。(※数分かかります)

$ cd ~/jenkins/src/core/core
$ mvn compile

OpenJDKを使うとcom.sun.toolsが見つからないというエラーでビルドが失敗するかもしれません。その場合はOpenJDKをアンインストール後、OracleのJDKを入れて試してみてください。

3-1-4、JenkinsのWARファイルをDL
MavenでWARまで作っても構いませんが、無難にリリースされたWARファイルを利用します。

$ cd ~/jenkins/
$ wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war

3-1-5、WAR内のclassesに作成したWebAppMain.classを追加
$ mkdir -p WEB-INF/classes/hudson
$ cp -p src/core/core/target/classes/hudson/WebAppMain.class ./WEB-INF/classes/hudson/
$ cp -p jenkins.war jenkins.war.org
$ zip jenkins.war WEB-INF/classes/hudson/WebAppMain.class

3-2、DotCloudにjenkinsアプリケーションを作成
下記コマンドを実行し、jenkinsアプリケーションを作成してください。

$ dotcloud create jenkins

3-4、DotCloudへデプロイ
デプロイはNexusと同様にビルドファイルを作成し、ビルドファイルとWARファイルのみのディレクトリを作成した後にpushコマンドを実行します。

$ cat > dotcloud.yml <<EOF
www:
  type: java
EOF
$ mkdir deploy
$ mv jenkins.war deploy/ROOT.war
$ mv dotcloud.yml deploy/
$ dotcloud push jenkins deploy/
upload deploy/ ssh://dotcloud@uploader.dotcloud.com:443/jenkins
rsync
Pseudo-terminal will not be allocated because stdin is not a terminal.
building file list ... done
./
ROOT.war
dotcloud.yml

sent 45.19M bytes  received 53 bytes  772.50K bytes/sec
total size is 45.37M  speedup is 1.00
Deployment for "jenkins" triggered. Will be available in a few seconds.
2011-09-19 15:39:50 [api] Deploy jenkins scheduled for revision=latest
2011-09-19 15:39:51 [api] Waiting for the build. (It may take a few minutes)
2011-09-19 15:39:51 [www.0] Deploying...
2011-09-19 15:40:12 [www.0] Service booted
2011-09-19 15:40:12 [api] All the services are ready. Beginning the build.
2011-09-19 15:40:13 [www.0] The build started
2011-09-19 15:40:16 [www.0] Fetched code revision rsync-xxxxxxxxxx.xx
2011-09-19 15:40:18 [www.0]  * Stopping Jetty servlet engine (was reachable on http://jenkins-default-www-0:8080/). jetty
2011-09-19 15:40:21 [www.0]  * Jetty servlet engine stopped. jetty
2011-09-19 15:40:21 [www.0]    ...done.
2011-09-19 15:40:21 [www.0]  * Starting Jetty servlet engine. jetty
2011-09-19 15:40:21 [www.0]  * Jetty servlet engine started, reachable on http://jenkins-default-www-0:8080/. jetty
2011-09-19 15:40:26 [www.0]    ...done.
2011-09-19 15:40:26 [www.0] The build finished successfully
2011-09-19 15:40:26 [api] Deploy finished

Deployment finished. Your application is available at the following URLs
www: http://jenkins-aquilegia.dotcloud.com/

この状態ではNexusと同じ理由でまだ正常に動きませんので、ディレクトリを作成する手順を進めてください。

3-5、DotCloudにJENKINS_HOMEを作成
下記コマンドを実行し、jenkinsディレクトリを作成してください。

$ dotcloud run jenkins.www -- mkdir jenkins \&\& ls -l

Nexusと同様にグループに書込権限を付与してください。

$ dotcloud run jenkins.www -- chmod g+w jenkins \&\& ls -l

3-6、Jenkinsを再起動
これでJenkinsを起動するまでの準備が整いました。
別コンソールでログをtailしつつ、Jenkinsを再起動します。

$ dotcloud logs jenkins.www
$ dotcloud restart jenkins.www

ログにスタックとレースが表示されず、最後に以下のログが表示されれば成功です。

INFO: JNLP slave agent listener started on TCP port 58600
Sep 19, 2011 3:48:56 PM hudson.WebAppMain$2 run
INFO: Jenkins is fully up and running

正常に起動すればブラウザでアクセスするとTOPページが表示されます。

3-7、Jenkinsの初期設定
初期状態は外部に公開されている状態なので自分だけが利用できるように設定します。

3-7-1、ログインユーザを作成
Jenkinsにユーザを作成します。
  • 左メニューから「Jenkinsの管理→システム設定」を選択し、システム設定ページを表示
  • 6番目ぐらいにある「セキュリティを有効化」チェックボックスをON
  • アクセス制御のユーザ情報から「Jenkinsのユーザデータベース」を選択
  • 保存ボタンを押下
保存した後、ページ右上にサインアップリンクが表示されるようになるので
リンクを押下してユーザを作成してください。(例ではjenkinsとします)

ユーザ名: jenkins
パスワード: (パスワードを入力)
パスワードの確認: (パスワードを入力)
フルネーム: jenkins
メールアドレス: (メールアドレスを入力)

サインアップが完了すると作成したユーザでログインした状態になります。
その後はサインアップできないようにします。

  • 左メニューから「Jenkinsの管理→システム設定」を選択し、システム設定ページを表示
  • アクセス制御のユーザ情報にある「ユーザにサインアップを許可」チェックボックスを外す
  • 保存ボタンを押下
これでページ右上からサインアップリンクが消えたはずです。


3-7-2、権限を設定
Jenkinsを利用できるユーザをログインユーザのみにします。
  • 左メニューから「Jenkinsの管理→システム設定」を選択し、システム設定ページを表示
  • アクセス制御の管理権限を行列による権限設定に変更
  • 匿名ユーザはそのままでauthenticatedという名前のユーザを追加
  • 全権限を与える(チェックを全て入れる)
  • 保存ボタンを押下
権限のチェックを終えると次のようになります。


これでログアウトするとホームページにログインフォームが表示されます。ログインしなければ何も利用できなくなっているはずです。

3-7-3、Mavenの自動インストール設定
DotCloud上にMavenをインストールするのは手間なのでJenkinsにやってもらいます。
ですがJenkinsがインストールしたMavenではMavenリポジトリに書き込めないという
おなじみの問題が発生するので後で対処します。
  • 左メニューから「Jenkinsの管理→システム設定」を選択し、システム設定ページを表示
  • ページ中央にあるMeven追加ボタンを押下
  • 名前とバージョンを指定
名前: maven_2.2.1
バージョン: 2.2.1
  • 自動インストールはONのままとしてください。
  • 保存ボタンを押下
また少し下に「利用状況とクラッシュレポートをJenkinsプロジェクトに匿名で報告」という項目がありますが好みで変更してください。

3-7-4、Jenkins Mercurial pluginをインストール
次はBitbucketからソースコードを取得するプラグインをインストールします。
  • 左メニューから「Jenkinsの管理→プラグインの管理」を選択し、プラグインページを表示
  • 利用可能タブから「Mercurial Plugin」を探し、チェックを入れる
  • ページ下部にあるインストールボタンを押下してインストール
この時「インストール後ジョブがなければ再起動する」にチェックを入れると
DotCloudコマンドで再起動しなくて済むので簡単です。



お疲れ様です。以上でJenkinsの構築が終わりました。
次回は動作確認用プロジェクトを作成して動作確認します。

DotCloudにJenkins+Nexus環境を構築してBitbucketと連携してみたよ(1/3)

こんにちは!極稀に記事を書くaquilegiaです。

まずは手順を作るために下記ページを参考にさせて頂きました。多謝!
 * dotcloud いいね!jenkins 編
 * Jenkins Mercurial Pluginでbitbucketにアクセスする

今回は3arrowsやソーシャルから少し離れて、開発者の間で話題?のDotCloudとBitbucketを連携したJavaのコーディング環境を構築する手順をご紹介します。

サービスの詳細は割愛しますが、DotCloudは多くのプログラム言語を実行できるPaaSで無料で2アプリケーションまで作成できます。Bitbucketはプロジェクトホスティングサービスでソースコード管理にMercurialを利用しており、5人までのチームは無料でIssueとWikiがついたプライベートなプロジェクトを無制限に作ることができます。

今回はこの二つを利用して個人向けプライベートビルド環境を作りましょ~というお話になります。手順のアウトラインは次の通りで、少し長いため3回に分けて紹介します。作業はLinux上で行ってだいたい1時間程度かかると思います。

・DotCloudを利用するための準備 ・DotCloudアカウントを取得 ・DotCloudクライアントをインストール ・DotCloudにNexusを構築 ・NexusのWARファイルをDL ・WARファイルから編集ファイルを抽出 ・ベースディレクトリの設定を変更 ・編集したファイルをWARファイルに戻す ・DotCloudにnexusアプリケーションを作成 ・DotCloudへデプロイ ・DotCloudにベースディレクトリを作成 ・Nexusを再起動 ・Nexusの初期設定 ・ログインユーザを作成 ・既存ユーザを無効にする ・DotCloudにJenkinsを構築 ・DotCloud用カスタムWARを作成 ・GitHubからJenkinsのソースコードをDL ・WebAppMain.javaを編集してJENKINS_HOMEを変更 ・ソースをコンパイル ・JenkinsのWARファイルをDL ・WAR内のclassesに作成したWebAppMain.classを追加 ・DotCloudにjenkinsアプリケーションを作成 ・DotCloudへデプロイ ・DotCloudにJENKINS_HOMEを作成 ・Jenkinsを再起動 ・Jenkinsの初期設定 ・ログインユーザを作成 ・権限を設定 ・Mavenの自動インストール設定 ・Jenkins Mercurial pluginをインストール ・Bitbucketの準備 ・Bitbucketのアカウントを作成してログイン ・リポジトリを作成 ・動作確認用プロジェクトの作成 ・プロジェクトを作成 ・リポジトリへコミット→プッシュ ・動作確認 ・Nexus認証情報を設定 ・動作確認用プロジェクトをビルドするジョブを登録 ・ジョブを実行

1、DotCloudを利用するための準備
DotCloud公式サイトのホームページにある緑色のSing Up Freeボタンを押下してアカウントを登録してください。


次にインストールマニュアルに従ってCLIをインストールしてください。DotCloudとやりとりする時にこのCLIを使います。
※CLIはWindows以外をお勧めします。というのも最初Windows版をインストールしてみたところ私のCygwin環境が悪かったのか、コマンド実行時に頻繁にエラーが発生しました。エラーを無視して根気よくコマンドを送れば使えますが、ストレスが溜まるのでLinux版へ替えました。

CLIをインストール後は任意のユーザでdotcloudコマンドを実行してください。初回実行時のみAPIキーの入力が求められます。

$ dotcloud
Warning: /home/aquilegia/.dotcloud/dotcloud.conf does not exist.
Enter your api key (You can find it at http://www.dotcloud.com/accounts/settings): (settingsページに表示されるAPIキーを入力する)
error: usage: dotcloud [-h]

                {info,status,stats,run,logs,versions,url,setup,list,rollback,alias,ssh,push,destroy,create,restart,history}
                ...

コンソールに表示されたURL(http://www.dotcloud.com/accounts/settings)へアクセスすればAPIキーが表示されるはずです。引数なしで実行すると上記のようにエラーになりますが問題ありません。

2、DotCloudにNexusを構築
NexusはそのままではDotCloud上で動きません。これはDotCloud上で動いているサーブレットコンテナはJettyでJettyユーザによって実行されていますが、Nexusがファイルを書き出すruntimeとnexus-workディレクトリに書込権限がなくエラーになるためです。

そのため私達が自由に使えるdotcloudユーザのホームディレクトリにnexusディレクトリを作成してそこを使わせるようにします。

2-1、NexusのWARファイルをDL
作業用のディレクトリを作成した後、ここからNexusのWARファイルをDLしてください。

$ mkdir -p nexus
$ cd nexus
$ wget http://nexus.sonatype.org/downloads/nexus-webapp-1.9.2.2.war

2-2、WARファイルから編集ファイルを抽出
WARから編集するファイルのみ展開してください。

$ unzip nexus-webapp-1.9.2.2.war WEB-INF/plexus.properties

2-3、ベースディレクトリの設定を変更
展開したディレクトリ内のWEB-INF/plexus.propertiesをエディタで開いてruntimeとnexus-workが/home/dotcloud/nexus配下になるよう編集してください。
(例はオリジナルからnexus-homeを追加し、runtimeとnexus-workがnexus-homeの子ディレクトリになるよう変更しました)

$ cd WEB-INF
$ cp -p plexus.properties plexus.properties.org
$ vi plexus.properties
nexus-home=/home/dotcloud/nexus
runtime=${nexus-home}/runtime
apps=${runtime}/apps
nexus-work=${nexus-home}/sonatype-work/nexus
nexus-app=${runtime}/apps/nexus
webapp=${runtime}/apps/nexus/webapp
security-xml-file=${nexus-work}/conf/security.xml
application-conf=${nexus-work}/conf
runtime-tmp=${runtime}/tmp

2-4、編集したファイルをWARファイルに戻す
編集したファイルをWARファイルに戻します。

$ cd ../
$ cp -p nexus-webapp-1.9.2.2.war nexus-webapp-1.9.2.2.war.org
$ zip nexus-webapp-1.9.2.2.war WEB-INF/plexus.propertie

2-5、DotCloudにnexusアプリケーションを作成
ここからはDotCloudへのデプロイ作業に移ります。コンソールから下記コマンドを実行し、DotCloudにnexusアプリケーションを作成してください。

$ dotcloud create nexus
Created application "nexus"

2-6、DotCloudへデプロイ
デプロイにはWARファイルとビルドファイルが必要になります。ビルドファイルは以下の内容でdotcloud.ymlという名前で作成してください。wwwはサービス名で任意の文字でかまいません。(ここでは公式ドキュメントと同じwwwとします)

$ cat > dotcloud.yml <<EOF
www:
type: java
EOF

次に適当な名前のディレクトリ(ここではdeployとします)を作成してWARファイルとビルドファイルと移してください。DotCloudのデプロイは内部でrsyncを使うのですが、指定したディレクトリの全ファイルを同期してしまうので無関係なファイルが送られないようにします。

$ mkdir deploy
$ mv nexus-webapp-1.9.2.2.war deploy/ROOT.war
$ mv dotcloud.yml deploy/

コンテキストルートは/にしたいのでWARファイルは名前をROOT.warに変更しておきます。
最後にコンソールから下記コマンドを実行し、DotCloudにnexusをデプロイする。

$ dotcloud push nexus deploy/
upload deploy/ ssh://dotcloud@uploader.dotcloud.com:443/nexus
rsync
Pseudo-terminal will not be allocated because stdin is not a terminal.
building file list ... done
./
ROOT.war
dotcloud.yml

sent 25.57M bytes received 53 bytes 616.03K bytes/sec
total size is 25.67M speedup is 1.00
Deployment for "nexus" triggered. Will be available in a few seconds.
2011-09-19 10:35:32 [api] Deploy nexus scheduled for revision=latest
2011-09-19 10:35:32 [api] Waiting for the build. (It may take a few minutes)
2011-09-19 10:35:32 [www.0] Deploying...
2011-09-19 10:35:57 [www.0] Service booted
2011-09-19 10:35:57 [api] All the services are ready. Beginning the build.
2011-09-19 10:35:57 [www.0] The build started
2011-09-19 10:35:58 [www.0] Fetched code revision rsync-xxxxxxxxx.xx
2011-09-19 10:36:01 [www.0] * Stopping Jetty servlet engine (was reachable on http://nexus-default-www-0:8080/). jetty
2011-09-19 10:36:03 [www.0] * Jetty servlet engine stopped. jetty
2011-09-19 10:36:03 [www.0] ...done.
2011-09-19 10:36:03 [www.0] * Starting Jetty servlet engine. jetty
2011-09-19 10:36:04 [www.0] * Jetty servlet engine started, reachable on http://nexus-default-www-0:8080/. jetty
2011-09-19 10:36:09 [www.0] ...done.
2011-09-19 10:36:09 [www.0] The build finished successfully
2011-09-19 10:36:09 [api] Deploy finished

Deployment finished. Your application is available at the following URLs
www: http://nexus-aquilegia.dotcloud.com/

ここでデプロイ結果を確認したくなりますがもう少し我慢してください。まだこの時点だと/home/dotcloud/nexusディレクトリが無いので正常に動いていません。

2-7、DotCloudにベースディレクトリを作成
コンソールから下記コマンドを実行し、DotCloudにNexusが使うディレクトリを作成してください。

$ dotcloud run nexus.www -- mkdir nexus \&\& ls -l

次にnexusディレクトリにグループ書込権限を追加します。こうすることでjettyユーザで実行されているNexusからディレクトリへファイルを書き込めるようになります。

$ dotcloud run nexus.www -- chmod g+w nexus \&\& ls -l

2-8、Nexusを再起動
今度は正常に起動できるはずなのでログを監視しながら再起動します。別のコンソールで下記コマンドを実行してログをtailしてください。

$ dotcloud logs nexus.www

そしてnexusアプリケーションを再起動してください。

$ dotcloud restart nexus.www

正常に起動すればログにスタックトレース等は出力されずに最終行が

15632 [main] INFO org.mortbay.log - Started SelectChannelConnector@0.0.0.0:8080
となるはずです。

2-8、Nexusの初期設定
初期状態は外部に公開されている状態なので自分だけが利用できるように設定を変更します。

2-8-1、ログインユーザを作成
ダッシュボードでアプリ名の右側に表示されたサービス名をクリックするとデプロイしたNexusが表示されます。URLは"デプロイ名-アカウント名"を第4レベルドメインにしたものなので覚えられると思います。

http://nexus-aquilegia.dotcloud.com/

右上のLog Inリンクを押下し、下記ID/パスで管理者としてログインしてください。ログイン後は左のSecurityからChange Passwordを選択してパスワードを変更してください。

admin
admin123

ユーザの作成はSecurity→Usersから行います。Usersを選択すると右側に一覧が表示されるので上部に表示された緑色のAddボタンを押下し、Nexusユーザを作成してください。
(ここではnexusというIDで作成したとします)

ID: nexus
EMail: (メールアドレスを入力)
Status: Active
New Password: (パスワードを入力)
Confirm Password: (パスワードを入力)

Role Management: Nexus Developer Role
※メールアドレスは必須項目のため設定していますがAdministration → ServerでSMTPサーバや通知設定をしないと実際には送信されません。必要な方は試してみてください。

2-8-2、既存ユーザを無効にする
Usersの一覧にはもとからadmin、deployment、anonymousがありますがdeploymentは不要なので削除してください。またanonymousは非ログイン状態のユーザになり、削除不可ユーザです。今回は個人で利用するのでリポジトリを匿名ユーザに参照されないようStatusをDisabledへ変更してください。変更後のTOPページは以下のようにRespositoriesも参照できなくなります。


お疲れ様です。これでNexus環境ができました。
今回はここまでです。続きは次回ご紹介します。