概要
Oracle Application Container CloudではNode.jsアプリを稼働させることができます。アプリをデプロイする際、最も原始的な方法はソースコードを手元でzipし、そのアーカイブファイルをブラウザ経由でアップロードする形です。
より洗練された継続的インテグレーションをおこなうには、ソースコードのレポジトリ管理やテストと連動するデプロイの仕組みが必要です。この仕組みを提供するのがDeveloper Cloudで、このサービスは無償で利用できます。
Application Container Cloudは有償です
この記事では手元のコードをDeveloper Cloudのgitレポジトリにプッシュし、アプリをビルド、そしてApplication Container Cloudへデプロイする流れを解説します。
所要時間
30分
手順
新しいプロジェクトの作成
「New Project」ボタンをクリックして新しいプロジェクトを作成します。
- Name: node-bootcamp *任意の名前でOKです
- Security: Private
これで新しいプロジェクトが作成されました。
このプロジェクトの中には、ソースコードのレポジトリ、ビルド方法、デプロイ設定など、アプリケーションのライフサイクル管理に必要な一通りの機能が入っています。したがってアプリケーションごとにこのプロジェクトを一つ作成するのが最もシンプルな形でしょう。
レポジトリの作成
アプリのソースコードを管理するためのgitレポジトリを作成します。Codeメニューを選択し、「New Repository」ボタンをクリックします。
- Name: 任意の名前でOKです
- Initial Content: Empty Repository
下図のようにレポジトリが作成されます。URLは後ほどリモートレポジトリの登録時に必要になりますのでメモっておいてください。
コードの準備
それではアプリ本体を準備します。といっても今回はデプロイまでの流れを把握することが目的なので、アプリ自体はexpress-generatorで生成したものをそのまま利用します。したがってまずexpress-generatorでソースツリーを生成します。
$ express -e node-bootcamp
create : node-bootcamp
create : node-bootcamp/package.json
create : node-bootcamp/app.js
create : node-bootcamp/public
create : node-bootcamp/public/javascripts
create : node-bootcamp/public/images
create : node-bootcamp/public/stylesheets
create : node-bootcamp/public/stylesheets/style.css
create : node-bootcamp/routes
create : node-bootcamp/routes/index.js
create : node-bootcamp/routes/users.js
create : node-bootcamp/views
create : node-bootcamp/views/index.ejs
create : node-bootcamp/views/error.ejs
create : node-bootcamp/bin
create : node-bootcamp/bin/www
install dependencies:
$ cd node-bootcamp && npm install
run the app:
$ DEBUG=node-bootcamp:* npm start
NPMモジュールをインストールし、Nodeアプリを起動します。
$ cd node-bootcamp/
$ npm install
$ npm start
ブラウザで下記URLにアクセスし、トップページにアクセスできることを確認します。
manifest.jsonを作成します。これはApplication Container Cloudが必要とするメタデータで、アプリの起動方法やnode.jsのバージョンが定義されています。
{
"runtime":{
"majorVersion":"6" // Nodeのバージョン指定
},
"command": "npm start", // このコマンドでNodeアプリが起動されます。
"release": {},
"notes": ""
}
gulpおよび必要なgulp-zipをインストールします。gulpは必須ではなく、gruntなど他のオートメーションフレームワークでもOKです。今回はソースコードをまるっとzipするためにgulpを利用します。
$ npm install --save gulp gulp-zip
gulpfile.jsを作成し、ソースをアーカイブするタスク:artifactを追加します。
// モジュールをインポート
var gulp = require('gulp');
var zip = require('gulp-zip');
// ソースコードをすべてartifact.zipに固める
gulp.task('artifact', function(){
return gulp.src('./**')
.pipe(zip('artifact.zip'))
.pipe(gulp.dest('./'));
});
一度タスクを実行してartifact.zipが作成されるか確認します。
$ gulp artifact
[14:02:03] Using gulpfile ~/Workspaces/node-bootcamp/gulpfile.js
[14:02:03] Starting 'artifact'...
[14:02:05] Finished 'artifact' after 1.34 s
$ ls
app.js bin manifest.json package.json routes
artifact.zip gulpfile.js node_modules public views
ちゃんと作成されているようです。
このファイルはDeveloper CloudのBuildの中で作成されますので確認できたら消しておきます。
$ rm artifact.zip
gitレポジトリを初期化します。
$ git init
リモートレポジトリとしてDeveloper Cloudのgitレポジトリを追加します。先ほどDeveloper CloudのCodeメニューに表示されていたURLを使って登録します。
$ git remote add origin あなたのgitレポジトリのURL
.gitignoreファイルを作成し、gitで管理しないファイルを列挙します。
.gitignore
.DS_Store
node_modules
npm-debug.log
gitでコードをDevleoper Cloudにプッシュします。
$ git add .
$ git commit -m 'first commit'
$ git push origin master
Jobの作成とBuild実行
- Job Name: 任意の名前でOKです
- Create a free-style job: チェック
その新しいJobのSource Controlタブで下記の設定を追加します。
Build Stepsタブで下記のStepを追加します。
- タイプ: Execute Shell
- Command:
npm install
gulp artifact
まずnpm installによって必要なNPMモジュールをインストールしています。これはgitレポジトリにはこれらのNPMモジュールを含めていないため、完全な形のアーカイブを作るのに必要な処理です。
gulp artifactは先ほどテストした通り、ソースコード全体をまるっとzipで固める処理です。このzipで固めたファイル(今回だとartifact.zip)はartifactと呼ばれ、Application Container Cloudへソースコードをデプロイするために必要になります。
Post Buildタブで下記の設定を追加します。
- Archive the artifacts: チェック
- Files To Archive: artifact.zip
- Discard all but the last successful/stable artifact to save disk space: チェック
- Compression Type: NONE
これはBuild Stepsで作成したartifact.zipをartifactとしてデプロイ時に利用しますよ、という設定です。
「Build Now」ボタンをクリックして作成したジョブを実行します。
ジョブは実行待ちのキューに入り、しばらくすると実行されます。画面をそのままにしておくと、ほどなくして下図のように進捗が表示されます。
下図のようにStatusに緑のチェックがつけばビルド完了です。
Deployの設定と実行
下記のように設定します。
-
Configuration Name: 任意の名前
-
Application Name: 任意の名前
-
Deployment Target: NewをクリックしてApplication Container Cloudを選択。続けて表示されるフォームに、デプロイ先のApplication Container Cloudのアカウントを入力し、Test Connectionボタンをクリック、その後Use Connectionボタンをクリックします。
-
Runtime: Node
-
Subscription: 任意の課金単位
-
Type: On Demand
-
Job: 先ほど作成したJob
-
Build: 先ほど成功したジョブ
-
Artifact: 先ほど成功したBuildで作成したArtifact
画面右上の「Save and Deploy」ボタンをクリックします。するとApplication Container Cloudへのデプロイが開始されます。初回はそこそこ時間がかかりますが、5分くらいで完了すると思います。
Application Container Cloudの方を確認すると、下図のように新しいアプリケーションが作成され、稼働しているはずです。URLをクリックするとアプリケーションのトップページにアクセスできます。