Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

第5章 CLI を使用したイメージの作成およびビルド

5.1. 概要

このスタートガイドでは、最もシンプルな方法で、OpenShift Container Platform でサンプルプロジェクトを稼働させる手順を説明しています。プロジェクトでイメージを起動する方法は複数ありますが、このトピックでは、最もすばやく簡単に起動する方法に焦点を当てていきます。

本書から読み始めており、OpenShift Container Platform バージョン 3 (v3) のコアとなる概念に慣れていない場合には、「What's New」を先に読んでみてください。本バージョンの OpenShift Container Platform は、バージョン 2 (v2) とは大きく異なります。

OpenShift Container Platform 3 では、開発者向けに、すぐアプリケーション開発を開始していただけるように、適切な実装およびチュートリアルと、追加設定なしに使用できる一連の「言語」および「データベース」を提供しています。言語サポートは、「クイックスタートテンプレート」を軸として展開されており、このテンプレートは、「ビルダーイメージ」順にを活用します。

言語実装およびチュートリアル

Ruby

Rails

Python

Django

Node.js

Node.js

PHP

CakePHP

Perl

Dancer

Java

 

OpenShift Container Platform が提供する他のイメージには以下が含まれます。

さらに、JBoss ミドルウェアでは、xPaaS サービスの一部として、幅広い種類の「OpenShift Container Platform テンプレート」だけでなく、「イメージ」がまとめられています。

特に xPaaS サービスで利用可能な技術は以下のとおりです。

  • JBoss EAP 6 が提供する Java EE 6 Application Server
  • JBoss Fuse および JBoss A-MQ が提供する統合およびメッセージサービス
  • JBoss Data Grid が提供する Data Grid サービス
  • JBoss BRMS が提供する Real Time Decision Service
  • Tomcat 7 および Tomcat 8 が提供する Java Web Server 3.0

上記のオファリングではそれぞれ、一連の組み合わせが提供されています。

  • HTTP のみ vs HTTP および HTTPS
  • データベースを必要としない場合や、MongoDB、PostgreSQL または MySQL のいずれかを使用する場合
  • 希望に応じた、A-MQ との統合

このようなアプリケーションの構築を例示するために、以下のセクションにはプロジェクトが含まれています。このプロジェクトには、ウェルカムページや現在の訪問者数 (データベースに保存) を提供するサンプルの Node.js アプリケーションが含まれています。

注記

このトピックでは、「クイックスタート」「インスタントアプリ」 のテンプレートとアプリケーションの両方について説明します。クイックスタートは、アプリケーション開発のスタート地点ではありますが、便利なアプリケーションを作成するには開発作業が必要です。反対に、Jenkins などのインスタントアプリは即座に利用できます。

5.2. 作業を開始する前に

作業を開始する前に、以下を確認してください。

5.3. サンプルリポジトリーのフォーク

  1. GitHub にログインした状態で 「Ruby の例」 のページに移動します。

    注記

    以下のトピックは、Ruby の例に沿っていますが、「OpenShift Container Platform GitHub プロジェクトで提供される」言語であればどれでも使用できます。

  2. 「リポジトリーをフォーク」します。

    新規のフォークにリダイレクトされます。

  3. フォーク用のクローン URL をコピーします。
  4. ローカルのマシンにリポジトリーをクローンします。

5.4. プロジェクトの作成

アプリケーションを作成するには、新規プロジェクトを作成して、ソースの場所を指定する必要があります。ここから、OpenShift Container Platform はビルドプロセスを開始して、新規デプロイメントを作成します。

  1. CLI で OpenShift Container Platform にログインします。

    • ユーザー名とパスワードを使用してログインする場合:

      $ oc login -u=<username> -p=<password> --server=<your-openshift-server> --insecure-skip-tls-verify
    • oauth トークンを使用してログインする場合:

      $ oc login <https://api.your-openshift-server.com> --token=<tokenID>
  2. 新規プロジェクトを作成するには、以下を実行します。

    $ oc new-project <projectname> --description="<description>" --display-name="<display_name>"

新規プロジェクトの作成後、新規プロジェクトの namespace に自動的に切り替えられます。

5.5. アプリケーションの作成

フォークしたリポジトリーにあるコードをもとに新規アプリケーションを作成します。

  1. コードのソースを指定してアプリケーションを作成します。

    $ oc new-app openshift/ruby-20-centos7~https://github.com/<your_github_username>/ruby-ex

    OpenShift Container Platform は一致するビルダーイメージを検索して (今回は ruby-20-centos7)、アプリケーションのリソース (イメージストリーム、ビルド設定、デプロイメント設定、サービス) を作成します。また、ビルドのスケジューリングも行います。

  2. ビルドの進捗を追跡します。

    $ oc logs -f bc/ruby-ex
  3. ビルドが完了し、作成されたイメージがレジストリーに正常にプッシュされたら、アプリケーションのステータスを確認します。

    $ oc status

    または、Web コンソールからビルドを表示できます。

アプリケーションの作成には時間がかかる可能性があります。Web コンソールの Overview ページでは、作成した新規リソースを表示し、ビルドやデプロイメントの進捗を確認できます。oc get pods コマンドでは、pod がいつ稼働しているかを確認し、oc get builds では、ビルドの統計を表示します。

Ruby pod が作成されても、pod のステータスは保留中と表示されます。次に、Ruby pod が起動し、新たに割り当てられた IP アドレスが表示されます。Ruby pod が実行されると、ビルドが完了します。

oc status コマンドでは、サービスが実行されている IP アドレスを表示します。デプロイ先のデフォルトのポートは、8080 です。

5.6. ルートの作成

OpenShift Container Platform ルートがホスト名でサービスを公開するので、対象の外部クライアントが名前を使用して到達できます。新規アプリケーションへのルートを作成するには、以下を実行します。

  1. ruby-ex のサービスを公開します。

    $ oc expose service ruby-ex
  2. 新規ルートを表示します。

    $ oc get route
  3. ルートの場所をコピーします。たとえば ruby-ex-my-test.example.openshiftapps.com などです。

5.7. アプリケーションの実行の確認

新規アプリケーションを表示するには、(前のセクションで) コピーしたルートの場所を Web ブラウザーのアドレスバーに貼り付けて、Enter を押します。

サンプルの ruby-ex アプリケーションは、単純なウェルカム画面となっており、コード変更のデプロイ、アプリケーションや他の開発リソースの管理方法に関する詳細が含まれます。

次に、GitHub Webhook トリガーを使用した自動化ビルドを設定し、フォークしたリポジトリーのコードが変更されると、アプリケーションがリビルドされます。

5.8. 自動化ビルドの設定

OpenShift Container Platform GitHub リポジトリー からこのアプリケーションのソースコードをフォークしたので、フォークしたリポジトリーにコードの変更がプッシュされるたびに、Webhook を使用して自動的にアプリケーションのリビルドをトリガーできます。

アプリケーションの Webhook を設定するには以下を実行します。

  1. BuildConfig のトリガーセクションを表示して、GitHub webhook トリガーが存在することを確認します。

    $ oc edit bc/ruby-ex

    以下のような内容が表示されているはずです。

    triggers
    - github:
        secret: Q1tGY0i9f1ZFihQbX07S
        type: GitHub

    シークレットは、ユーザー自身およびリポジトリーしか、ビルドをトリガーできないようにします。

  2. 以下のコマンドを実行して、BuildConfig に連携されている Webhook URL を表示します。

    $ oc describe bc ruby-ex
  3. 上記のコマンドで表示された GitHub webhook ペイロード URL の出力をコピーします。
  4. GitHub のフォークされたリポジトリーに移動してから Settings をクリックします。
  5. Webhooks & Services をクリックします。
  6. Add webhook をクリックします。
  7. webhook URL を Payload URL フィールドにコピーします。
  8. Add webhook をクリックして保存します。

GitHub は、ping のペイロードを OpenShift Container Platform サーバーに送信して、通信が成功したことを確認します。Webhook URL の横に緑のチェックマークが表示された場合には、正しく設定されています。チェックマークの上にマウスをかざして、最終配信のステータスを表示します。

フォークされたリポジトリーにコード変更をプッシュする次回のタイミングで、アプリケーションが自動的に再ビルドされます。

5.9. コード変更の記述

ローカルで作業して、アプリケーションに変更をプッシュします。

  1. ローカルマシンで、テキストエディターを使用して、ruby-ex/config.ru ファイルのサンプルアプリケーションのソースを変更します。
  2. コードの変更をアプリケーション内から表示できるようにします。 たとえば、行 229 で、タイトルを Welcome to your Ruby application on OpenShift から This is my Awesome OpenShift Application に変更してから、変更を保存します。
  3. Git に変更をコミットして、フォークに変更をプッシュします。

    webhook が正しく設定されている場合には、変更をもとに、アプリケーションは即座にリビルドされます。リビルドに成功した場合には、以前に作成したルートを使用すると、更新したアプリケーションが表示されます。

次に、必要な作業はコードの更新をプッシュするだけで、OpenShift Container Platform が残りを行います。

5.9.1. イメージの手動リビルド

Webook が機能しない場合や、ビルドに失敗して、コードを変更せずにビルドを再起動する場合には、イメージを手動でリビルドすると便利です。直近にコミットされた変更をもとに、イメージを手動でリビルドするには、フォークしたリポジトリーに移動します。

$ oc start-build ruby-ex

5.10. トラブルシューティング

プロジェクトの変更

oc new-project コマンドは自動的に現在プロジェクトをさきほど作成したプロジェクトに設定しますが、以下を実行することでいつでもプロジェクトを変更できます。

$ oc project <project-name>

プロジェクトの一覧を表示します。

$ oc get projects

ビルドの手動トリガー

ビルドが自動的に開始されない場合には、ビルドを開始して、ログをストリームします。

$ oc start-build ruby-ex --follow

または、上記のコマンドに --follow を追加せずに、ビルドのトリガー後に以下のコマンドを実行します。n は追跡するビルドの数に置き換えます。

$ oc logs -f build/ruby-ex-n