2.3. CLI を使用したアプリケーションの作成
OpenShift Container Platform CLI を使用して、ソースまたはバイナリーコード、イメージおよびテンプレートを含むコンポーネントから OpenShift Container Platform アプリケーションを作成できます。
new-app
で作成したオブジェクトのセットは、ソースリポジトリー、イメージまたはテンプレートなどのインプットとして渡されるアーティファクトによって異なります。
2.3.1. ソースコードからのアプリケーションの作成
new-app
コマンドを使用して、ローカルまたはリモート Git リポジトリーのソースコードからアプリケーションを作成できます。
new-app
コマンドは、ビルド設定を作成し、これはソースコードから新規のアプリケーションイメージを作成します。new-app
コマンドは通常、DeploymentConfig
オブジェクトを作成して新規のイメージをデプロイするほか、サービスを作成してイメージを実行するデプロイメントへの負荷分散したアクセスを提供します。
OpenShift Container Platform は、パイプラインまたはソースビルドストラテジーのいずれを使用すべきかを自動的に検出します。また、ソースビルドの場合は、適切な言語のビルダーイメージを検出します。
2.3.1.1. ローカル
ローカルディレクトリーの Git リポジトリーを使用してアプリケーションを作成するには、以下を実行します。
$ oc new-app /<path to source code>
ローカル Git リポジトリーを使用する場合には、リポジトリーで OpenShift Container Platform クラスターがアクセス可能な URL を参照する origin
という名前のリモートリポジトリーが必要です。認識されているリモートがない場合は、new-app
コマンドを実行してバイナリービルドを作成します。
2.3.1.2. リモート
リモート Git リポジトリーを使用してアプリケーションを作成するには、以下を実行します。
$ oc new-app https://github.com/sclorg/cakephp-ex
プライベートのリモート Git リポジトリーを使用してアプリケーションを作成するには、以下を実行します。
$ oc new-app https://github.com/youruser/yourprivaterepo --source-secret=yoursecret
プライベートリモート Git リポジトリーを使用する場合には、--source-secret
フラグを使用して、既存のソースクローンのシークレットを指定できます。このシークレットは、ビルド設定に挿入され、リポジトリーにアクセスできるようになります。
--context-dir
フラグを指定することで、ソースコードリポジトリーのサブディレクトリーを使用できます。リモート Git リポジトリーおよびコンテキストサブディレクトリーを使用してアプリケーションを作成する場合は、以下を実行します。
$ oc new-app https://github.com/sclorg/s2i-ruby-container.git \ --context-dir=2.0/test/puma-test-app
また、リモート URL を指定する場合は、以下のように URL の最後に #<branch_name>
を追加することで、使用する Git ブランチを指定できます。
$ oc new-app https://github.com/openshift/ruby-hello-world.git#beta4
2.3.1.3. ビルドストラテジーの検出
新規アプリケーションの作成時に Jenkinsfile がソースリポジトリーのルート または指定されたコンテキストディレクトリーに存在する場合に、OpenShift Container Platform はパイプラインビルドストラテジーを生成します。それ以外の場合は、ソースビルドストラテジーが生成されます。
ビルドストラテジーを上書きするには、--strategy
フラグを pipeline
または source
のいずれかに設定します。
$ oc new-app /home/user/code/myapp --strategy=docker
oc
コマンドを使用するには、ビルドソースを含むファイルがリモートの git リポジトリーで利用可能である必要があります。すべてのソースビルドには、git remote -v
を使用する必要があります。
2.3.1.4. 言語の検出
ソースビルドストラテジーを使用する場合に、new-app
はリポジトリーのルート または指定したコンテキストディレクトリーに特定のファイルが存在するかどうかで、使用する言語ビルダーを判別しようとします。
言語 | ファイル |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
言語の検出後、new-app
は OpenShift Container Platform サーバーで、検出言語と一致して supports
アノテーションが指定されたイメージストリームタグか、または検出された言語の名前に一致するイメージストリームの有無を検索します。一致するものが見つからない場合には、new-app
は Docker Hub レジストリー で名前をベースにした検出言語と一致するイメージの検索を行います。
~
をセパレーターとして使用し、イメージ (イメージストリームまたはコンテナーの仕様) とリポジトリーを指定して、ビルダーが特定のソースリポジトリーを使用するようにイメージを上書きすることができます。この方法を使用すると、ビルドストラテジーの検出および言語の検出は実行されない点に留意してください。
たとえば、リモートリポジトリーのソースを使用して myproject/my-ruby
イメージストリームを作成する場合は、以下を実行します。
$ oc new-app myproject/my-ruby~https://github.com/openshift/ruby-hello-world.git
ローカルリポジトリーのソースを使用して openshift/ruby-20-centos7:latest
コンテナーのイメージストリームを作成するには、以下を実行します。
$ oc new-app openshift/ruby-20-centos7:latest~/home/user/code/my-ruby-app
言語の検出では、リポジトリーのクローンを作成し、検査できるように Git クライアントをローカルにインストールする必要があります。Git が使用できない場合、<image>~<repository>
構文を指定し、リポジトリーで使用するビルダーイメージを指定して言語の検出手順を回避することができます。
-i <image> <repository>
呼び出しでは、アーティファクトのタイプを判別するために new-app
が repository
のクローンを試行する必要があります。そのため、これは Git が利用できない場合には失敗します。
-i <image> --code <repository>
呼び出しでは、image
がソースコードのビルダーとして使用されるか、またはデータベースイメージの場合のように別個にデプロイされる必要があるかどうかを判別するために、new-app
が repository
のクローンを作成する必要があります。