2.2.2. CLI を使用したアプリケーションの作成
2.2.2.1. ソースコードからのアプリケーションの作成
new-app
コマンドを使用して、ローカルまたはリモート Git リポジトリーのソースコードからアプリケーションを作成できます。
ローカルディレクトリーの Git リポジトリーを使用してアプリケーションを作成するには、以下を実行します。
$ oc new-app /path/to/source/code
ローカル Git リポジトリーを使用する場合には、リポジトリーで OpenShift Container Platform クラスターがアクセス可能な URL を参照する origin という名前のリモートリポジトリーが必要です。認識されているリモートがない場合は、new-app
により バイナリービルド が作成されます。
リモート 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
フラグを使用して、既存の ソースクローンのシークレット を指定できます。このシークレットは、BuildConfig
に挿入され、リポジトリーにアクセスできるようになります。
--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
new-app
コマンドは、ビルド設定 を作成し、これはソースコードから新規のアプリケーション イメージ を作成します。new-app
コマンドは通常、デプロイメント設定 を作成して新規のイメージをデプロイするほか、サービス を作成してイメージを実行するデプロイメントへの負荷分散したアクセスを提供します。
OpenShift Container Platform は、Docker
、Pipeline
または Source
ビルドストラテジー のいずれを使用すべきかを自動的に 検出 します。また、Source
ビルドの場合は、適切な言語のビルダーイメージを検出します。
ビルドストラテジーの検出
新規アプリケーションの作成時に Jenkinsfile がソースリポジトリーのルートまたは指定されたコンテキストディレクトリーに存在する場合に、OpenShift Container Platform は Pipeline
ビルドストラテジー を生成します。または、Dockerfile がある場合、OpenShift Container Platform は Docker
ビルドストラテジー を生成します。それ以外の場合は、Source
ビルドストラテジー が生成されます。
ビルドストラテジーを上書きするには、--strategy
フラグを docker
、pipeline
または source
のいずれかに設定します。
$ oc new-app /home/user/code/myapp --strategy=docker
oc
コマンドを使用するには、ビルドソースを含むファイルがリモートの git リポジトリーで利用可能である必要があります。ソースのすべてのビルドには、git remote -v
を使用する必要があります。
言語の検出
ソース
ビルドストラテジーを使用する場合に、new-app
はリポジトリーのルート または指定したコンテキストディレクトリーに特定のファイルが存在するかどうかで、使用する言語ビルダーを判別しようとします。
言語 | ファイル |
---|---|
| project.json、*.csproj |
| pom.xml |
| app.json、package.json |
| cpanfile、index.pl |
| composer.json、index.php |
| requirements.txt、setup.py |
| Gemfile、Rakefile、config.ru |
| build.sbt |
| Godeps、main.go |
言語の検出後、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
のクローンを作成する必要があります。