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 Middleware では広範囲に及ぶ 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 との統合 (必要な場合)

このようなアプリケーションの構築を例示するために、以下のセクションではプロジェクトの作成について説明します。このプロジェクトには、Welcome ページや現在の訪問者数 (データベースに保存) を提供するサンプルの 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

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

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

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

次に、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. Content Typeapplication/json に設定します。
  9. 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