OpenShiftを使ってみる - 3

OpenShiftを使ってみる、第三弾としてOpenShiftにアプリケーションをデプロイする方法をまとめます。
JBoss ASを利用した場合の一通りの導入はまとめたと思っているので、一旦このシリーズは終了です。

方法として大きく2種類あります。開発スタイルや好みに応じて選んでください。

  • ソースコードをOpenShiftにPushして、OpenShift上でビルド&デプロイ
  • 予めビルドしたものをOpenShiftにPushしてデプロイ

また、どちらの方法でもOpenShiftに対してPushを行うと以下のような挙動を行います。

  1. JBossの停止
  2. .openshift/action_hooks/pre-build.sh実行
  3. 「openshift」プロファイルでmavenのビルド実行
  4. .openshift/action_hooks/build.sh実行
  5. .openshift/action_hooks/deploy実行
  6. JBossの開始
  7. .openshift/action_hooks/post_deploy実行

ソースコードをOpenShiftにPushして、OpenShift上でビルド&デプロイ

OpenShiftではビルドにMavenを利用します。そのため、pom.xmlが必要になりますが、OpenShiftからCloneしたリポジトリにはWARプロジェクト用のpom.xmlがあります。
WARで開発を行う場合は、このpom.xmlをもとにして開発を行うと容易にOpenShiftでのビルドとデプロイが可能です。

EARの場合、pom.xmlを別途作成する必要があります。
ポイントはEARパッケージのpom.xmlに以下のような設定を加え、deploymentsフォルダにEARファイルを出力させることです。

    <profile>
      <id>openshift</id>
      <build>
        <finalName>ROOT</finalName>
        <plugins>
          <plugin>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.6</version>
            <configuration>
              <version>6</version>
              <defaultLibBundleDir>lib</defaultLibBundleDir>
              <outputDirectory>deployments</outputDirectory>
              <modules>
                <webModule>
                  <groupId>groupId</groupId>
                  <artifactId>artifactId</artifactId>
                  <contextRoot>/</contextRoot>
                </webModule>
                <ejbModule>
                  <groupId>groupId</groupId>
                  <artifactId>artifactId</artifactId>
                </ejbModule>
              </modules>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

予めビルドしたものをOpenShiftにPushしてデプロイ

この方法では予めビルドしておいたアプリケーションをOpenShiftにデプロイします。
GitやMavenを利用しない開発ではこの方法が良いかもしれません。

まずは誤ってビルドが実行されないように、以下を削除します。

次にデプロイ対象をdeploymentsに配置します。
そしてコミットを行いPushを行うことでデプロイします。

以下はこの方法を用いた場合のリポジトリディレクトリ構成となります。

├── .gitignore
├── .openshift
│   ├── action_hooks
│   │   ├── build
│   │   ├── deploy
│   │   ├── post_deploy
│   │   └── pre_build
│   ├── config
│   │   ├── modules
│   │   │   └── README
│   │   └── standalone.xml
│   ├── cron
│   │   ├── README.cron
│   │   ├── daily
│   │   │   └── .gitignore
│   │   ├── hourly
│   │   │   └── .gitignore
│   │   ├── minutely
│   │   │   └── .gitignore
│   │   ├── monthly
│   │   │   └── .gitignore
│   │   └── weekly
│   │       ├── README
│   │       ├── chrono.dat
│   │       ├── chronograph
│   │       ├── jobs.allow
│   │       └── jobs.deny
│   └── markers
│       └── README
├── README
└── deployments
    ├── .gitkeep
    └── ROOT.war