7.6. バイナリービルド
7.6.1. はじめに リンクのコピーリンクがクリップボードにコピーされました!
OpenShift のバイナリービルドの機能では、開発者はビルドで Git リポジトリーの URL からソースをプルするのではなく、ソースまたはアーティファクトをビルドに直接アップロードします。ソース、Docker またはカスタムのストラテジーが指定された BuildConfig はバイナリービルドとして起動できます。ローカルのアーティファクトからビルドを起動する場合は、既存のソース参照をローカルユーザーのマシンのソースに置き換えます。
ソースは複数の方法で提供できます。 これは、start-build コマンドの使用時に利用可能な引数に相当します。
-
ファイルから (
--from-file
): これは、ビルドのソース全体が単一ファイルで構成されている場合です。たとえば、Docker ビルドはDockerfile
、Wildfly ビルドはpom.xml
、Ruby ビルドはGemfile
です。 -
ディレクトリーから (
--from-directory
): ソースがローカルのディレクトリーにあり、Git リポジトリーにコミットされていない場合に使用します。start-build
コマンドは指定のディレクトリーのアーカイブを作成して、ビルダーにソースとしてアップロードします。 -
アーカイブから (
--from-archive
): ソースが含まれるアーカイブがすでに存在する場合に使用します。アーカイブはtar
、tar.gz
またはzip
形式のいずれかを使用できます。 -
Git リポジトリーから (
--from-repo
): これはソースがユーザーのローカルマシンで Git リポジトリーの一部となっている場合に使用します。現在のリポジトリーの HEAD コミットがアーカイブされ、ビルド用に OpenShift に送信されます。
7.6.1.1. 使用例 リンクのコピーリンクがクリップボードにコピーされました!
バイナリービルドの場合は、ビルドでソースを既存の git リポジトリーからプルする必要がありません。バイナリービルドを使用する理由は以下のとおりです。
- ローカルコードの変更をビルドし、テストする。パブリックリポジトリーからのソースはクローンでき、ローカルの変更を OpenShift にアップロードしてビルドできます。ローカルの変更はコミットまたはプッシュする必要はありません。
- プロイベートコードをビルドする。新規ビルドをゼロからバイナリービルドとして起動することができます。ソースは、SCM にチェックインする必要なく、ローカルのワークステションから OpenShift に直接アップロードできます。
- 別のソースからアーティファクトを含むイメージをビルドする。Jenkins Pipeline では、Maven または C コンパイラー、これらのビルドを活用するランタイムイメージなどのツールでビルドしたアーティファクトを組み合わせる場合に、バイナリービルドが役立ちます。
7.6.1.2. 制限 リンクのコピーリンクがクリップボードにコピーされました!
- バイナリービルドは反復できません。バイナリービルドは、ビルドの開始時にアーティファクトをアップロードするユーザーに依存するため、そのユーザーが毎回同じアップロードを繰り返さない限り、OpenShift は同じビルドを反復できません。
- バイナリービルドは自動的にトリガーできません。バイナリービルドは、ユーザーが必要なバイナリーアーティファクトをアップロードする時にのみ手動で起動できます。
バイナリービルドとして起動したビルドには設定済みのソース URL が含まれる場合があります。その場合、トリガーでビルドが正常に起動しますが、ソースはビルドの最終実行時にユーザーが指定した URL ではなく、設定済みのソース URL から取得されます。
7.6.2. チュートリアルの概要 リンクのコピーリンクがクリップボードにコピーされました!
以下のチュートリアルは、OpenShift クラスターが利用可能であり、アーティファクトを作成できるプロジェクトが用意されていることを前提としています。このチュートリアルでは、git
と oc
がローカルで使用できる必要があります。
7.6.2.1. チュートリアル: ローカルコードの変更のビルド リンクのコピーリンクがクリップボードにコピーされました!
既存のソースリポジトリーをベースにして新規アプリケーションを作成し、そのルートを作成します。
oc new-app https://github.com/openshift/ruby-hello-world.git oc expose svc/ruby-hello-world
$ oc new-app https://github.com/openshift/ruby-hello-world.git $ oc expose svc/ruby-hello-world
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 初期ビルドが完了するまで待機し、ルートのホストに移動してアプリケーションのページを表示します。Welcome ページが表示されるはずです。
oc get route ruby-hello-world
$ oc get route ruby-hello-world
Copy to Clipboard Copied! Toggle word wrap Toggle overflow リポジトリーをローカルにクローンします。
git clone https://github.com/openshift/ruby-hello-world.git cd ruby-hello-world
$ git clone https://github.com/openshift/ruby-hello-world.git $ cd ruby-hello-world
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
アプリケーションのビューに変更を加えます。任意のエディターで
views/main.rb
を編集します。<body>
タグを<body style="background-color:blue">
に変更します。 ローカルで変更したソースで新規ビルドを起動します。リポジトリーのローカルディレクトリーから、以下を実行します。
---- $ oc start-build ruby-hello-world --from-dir="." --follow ----
---- $ oc start-build ruby-hello-world --from-dir="." --follow ----
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ビルドが完了し、アプリケーションが再デプロイされたら、アプリケーションのルートホストに移動すると、青のバックグラウンドのページが表示されるはずです。
ローカルでさらに変更を加えて、oc start-build --from-dir
でコードをビルドします。
また、コードのブランチを作成し、変更をローカルでコミットし、リポジトリーの HEAD をビルドのソースとして使用します。
git checkout -b my_branch git add . git commit -m "My changes" oc start-build ruby-hello-world --from-repo="." --follow
$ git checkout -b my_branch
$ git add .
$ git commit -m "My changes"
$ oc start-build ruby-hello-world --from-repo="." --follow
7.6.2.2. チュートリアル: プライベートコードのビルド リンクのコピーリンクがクリップボードにコピーされました!
コードを保存するローカルディレクトリーを作成します。
mkdir myapp cd myapp
$ mkdir myapp $ cd myapp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このディレクトリーで、以下の内容を含む
Dockerfile
という名前のファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の内容を含む
index.html
という名前のファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションの新規ビルドを作成します。
oc new-build --strategy docker --binary --docker-image centos:centos7 --name myapp
$ oc new-build --strategy docker --binary --docker-image centos:centos7 --name myapp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ローカルディレクトリーの内容を使用して、バイナリービルドを起動します。
oc start-build myapp --from-dir . --follow
$ oc start-build myapp --from-dir . --follow
Copy to Clipboard Copied! Toggle word wrap Toggle overflow new-app
を使用してアプリケーションをデプロイしてから、そのルートを作成します。oc new-app myapp oc expose svc/myapp
$ oc new-app myapp $ oc expose svc/myapp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ルートのホスト名を取得して、そこに移動します。
oc get route myapp
$ oc get route myapp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
コードをビルドし、デプロイした後に、ローカルファイルに変更を加えて、oc start-build myapp --from-dir
を呼び出して新規ビルドを起動します。ビルドされると、コードが自動的にデプロイされ、ページを更新すると、変更がブラウザーに反映されます。
7.6.2.3. チュートリアル: パイプラインからのバイナリーアーティファクト リンクのコピーリンクがクリップボードにコピーされました!
OpenShift の Jenkins では、適切なツールでスレーブイメージを使用して、コードをビルドすることができます。たとえば、maven
スレーブを使用して、コードリポジトリーから WAR をビルドできます。ただし、このアーティファクトがビルドされたら、コードを実行するための適切なランタイムアーティファクトが含まれるイメージにコミットする必要があります。これらのアーティファクトをランタイムイメージに追加するために、バイナリービルドが使用される場合があります。以下のチュートリアルでは、maven
スレーブで WAR をビルドし、Dockerfile
でバイナリービルドを使用してこの WAR を WIldfly のランタイムイメージに追加するように Jenkins パイプラインを作成します。
アプリケーションの新規ディレクトリーを作成します。
mkdir mavenapp cd mavenapp
$ mkdir mavenapp $ cd mavenapp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow WAR を wildfly イメージ内の適切な場所にコピーする
Dockerfile
を作成します。以下をDockerfile
という名前のローカルファイルにコピーします。FROM wildfly:latest COPY ROOT.war /wildfly/standalone/deployments/ROOT.war CMD $STI_SCRIPTS_PATH/run
FROM wildfly:latest COPY ROOT.war /wildfly/standalone/deployments/ROOT.war CMD $STI_SCRIPTS_PATH/run
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dockerfile の新規 BuildConfig を作成します。
注記これにより、ビルドが自動的に起動しますが、
ROOT.war
アーティファクトがまだ利用できないので初回は失敗します。以下のパイプラインでは、バイナリービルドを使用してその WAR をビルドに渡します。cat Dockerfile | oc new-build -D - --name mavenapp
$ cat Dockerfile | oc new-build -D - --name mavenapp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Jenkins Pipeline で BuildConfig を作成します。この BuildConfig では WAR をビルドし、以前に作成した
Dockerfile
を使用してこの WAR でイメージをビルドします。ツールのセットでバイナリーアーティファクトをビルドしてから、最終的なパッケージ用に別のランタイムイメージと組み合わせる場合など、同じパターンを別のプラットフォームでも使用できます。 以下のコードをmavenapp-pipeline.yml
に保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pipeline ビルドを作成します。Jenkins がプロジェクトにデプロイされていない場合は、パイプラインが含まれる BuildConfig を作成すると、Jenkins がデプロイされます。Jenkins がパイプラインをビルドする準備ができるまで、2 分ほどかかる場合があります。Jenkins のロールアウトの状況を確認するには、
oc rollout status dc/jenkins
を起動します。oc create -f ./mavenapp-pipeline.yml
$ oc create -f ./mavenapp-pipeline.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Jenkins の準備ができたら、以前に定義したパイプラインを起動します。
oc start-build mavenapp-pipeline
$ oc start-build mavenapp-pipeline
Copy to Clipboard Copied! Toggle word wrap Toggle overflow パイプラインがビルドを完了した時点で、new-app で新規アプリケーションをデプロイし、ルートを公開します。
oc new-app mavenapp oc expose svc/mavenapp
$ oc new-app mavenapp $ oc expose svc/mavenapp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ブラウザーで、アプリケーションのルートに移動します。
oc get route mavenapp
$ oc get route mavenapp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow