Builds の操作
第1章 ビルドの実行 リンクのコピーリンクがクリップボードにコピーされました!
Builds をインストールした後、buildah または source-to-image ビルドを作成できます。ビルドに必要のないカスタムリソースを削除することもできます。
1.1. buildah ビルドの作成 リンクのコピーリンクがクリップボードにコピーされました!
buildah ビルドを作成し、作成したイメージをターゲットレジストリーにプッシュできます。
前提条件
- OpenShift Container Platform クラスターに Builds for Red Hat OpenShift Operator がインストールされている。
-
ShipwrightBuildリソースを作成している。 -
ocCLI がインストールされている。 -
オプション:
shpCLI がインストールされている。
手順
Buildリソースを作成し、次のいずれかの CLI を使用して OpenShift Container Platform クラスターに適用します。例:
ocCLI の使用$ oc apply -f - <<EOF apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: buildah-golang-build spec: source:1 type: Git git: url: https://github.com/shipwright-io/sample-go contextDir: docker-build strategy:2 name: buildah kind: ClusterBuildStrategy paramValues:3 - name: dockerfile value: Dockerfile output:4 image: image-registry.openshift-image-registry.svc:5000/buildah-example/sample-go-app EOF- 1
- ソースコードが配置される場所。
- 2
- コンテナーの構築に使用するビルドストラテジー。
- 3
- ビルドストラテジーで定義されるパラメーター。
dockerfileストラテジーパラメーターの値を設定するには、出力イメージの構築に必要な Dockerfile の場所を指定します。 - 4
- ビルドイメージがプッシュされる場所。この手順例では、ビルドされたイメージが OpenShift Container Platform クラスターの内部レジストリーにプッシュされます。
buildah-exampleは現在のプロジェクトの名前です。イメージのプッシュを許可するために、指定されたプロジェクトが存在することを確認します。
例:
shpCLI の使用$ shp build create buildah-golang-build \ --source-url="https://github.com/redhat-openshift-builds/samples" --source-context-dir="buildah-build" \1 --strategy-name="buildah" \2 --dockerfile="Dockerfile" \3 --output-image="image-registry.openshift-image-registry.svc:5000/buildah-example/go-app"4 - 1
- ソースコードが配置される場所。
- 2
- コンテナーの構築に使用するビルドストラテジー。
- 3
- ビルドストラテジーで定義されるパラメーター。
dockerfileストラテジーパラメーターの値を設定するには、出力イメージの構築に必要な Dockerfile の場所を指定します。 - 4
- ビルドイメージがプッシュされる場所。この手順例では、ビルドされたイメージが OpenShift Container Platform クラスターの内部レジストリーにプッシュされます。
buildah-exampleは現在のプロジェクトの名前です。イメージのプッシュを許可するために、指定されたプロジェクトが存在することを確認します。
Buildリソースが CLI のいずれかを使用して作成されていることを確認します。例:
ocCLI の使用$ oc get builds.shipwright.io buildah-golang-build例:
shpCLI の使用$ shp build listBuildRunリソースを作成し、次のいずれかの CLI を使用して OpenShift Container Platform クラスターに適用します。例:
ocCLI の使用$ oc apply -f - <<EOF apiVersion: shipwright.io/v1beta1 kind: BuildRun metadata: name: buildah-golang-buildrun spec: build: name: buildah-golang-build1 EOF- 1
spec.build.nameフィールドは、実行するそれぞれのビルドを示し、同じ namespace で使用できる必要があります。
例:
shpCLI の使用$ shp build run buildah-golang-build --follow1 - 1
- オプション:
--followオプションのフラグを使用すると、出力結果のビルドログを表示できます。
次のいずれかのコマンドを実行して、
BuildRunリソースが作成されているかどうかを確認します。例:
ocCLI の使用$ oc get buildrun buildah-golang-buildrun例:
shpCLI の使用$ shp buildrun listBuildRunリソースはTaskRunリソースを作成し、その後ビルドストラテジーの手順を実行する Pod を作成します。
検証
すべてのコンテナーがタスクを完了したら、以下を確認します。
Pod で
STATUSフィールドがCompletedとして表示されるかどうかを確認します。$ oc get pods -w出力例
NAME READY STATUS RESTARTS AGE buildah-golang-buildrun-dtrg2-pod 2/2 Running 0 4s buildah-golang-buildrun-dtrg2-pod 1/2 NotReady 0 7s buildah-golang-buildrun-dtrg2-pod 0/2 Completed 0 55sそれぞれの
TaskRunリソースにSUCCEEDEDフィールドがTrueと表示されているかどうかを確認します。$ oc get tr出力例
NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME buildah-golang-buildrun-dtrg2 True Succeeded 11m 8m51sそれぞれの
BuildRunリソースにSUCCEEDEDフィールドがTrueと表示されているかどうかを確認します。$ oc get br出力例
NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME buildah-golang-buildrun True Succeeded 13m 11m検証中にビルドの実行が失敗した場合は、
BuildRunリソースのstatus.failureDetailsフィールドをチェックして、Pod またはコンテナー内で失敗が発生した正確なポイントを特定できます。注記コンテナーの 1 つがタスクを完了したため、Pod が
NotReady状態に切り替わる可能性があります。これは想定される動作です。
build.spec.output.imageフィールドで指定されたレジストリーにイメージがプッシュされたかどうかを検証します。内部レジストリーにアクセスできるノードから次のコマンドを実行して、イメージのプルを試みることができます。$ podman pull image-registry.openshift-image-registry.svc:5000/<project>/<image>1 - 1
Buildリソースの作成時に使用されるプロジェクト名とイメージ名。たとえば、buildah-exampleをプロジェクト名として、sample-go-appをイメージ名として使用できます。
1.1.1. ネットワークが制限された環境での buildah ビルドの作成 リンクのコピーリンクがクリップボードにコピーされました!
buildah ビルドストラテジーに必要なイメージのミラーリングを行い、ネットワーク制限環境で buildah ビルドを作成できます。
前提条件
- クラスターが buildah ビルドを作成するのに使用できる git ソースに接続し、操作できる。
手順
以下のコマンドを実行して、
buildahビルドストラテジーに必要なイメージのミラーリングを行います。$ oc image mirror --insecure -a <registry_authentication> registry.redhat.io/ubi8/buildah@sha256:1c89cc3cab0ac0fc7387c1fe5e63443468219aab6fd531c8dad6d22fd999819e <mirror_registry>/<repo>/ubi8_buildah- 「buildah ビルドの作成」セクションで説明されている手順を実行します。
1.2. source-to-image ビルドの作成 リンクのコピーリンクがクリップボードにコピーされました!
source-to-image ビルドを作成し、作成したイメージをカスタム Quay リポジトリーにプッシュできます。
前提条件
- OpenShift Container Platform クラスターに Builds for Red Hat OpenShift Operator がインストールされている。
-
ShipwrightBuildリソースを作成している。 -
ocCLI がインストールされている。 -
オプション:
shpCLI がインストールされている。
手順
Buildリソースを作成し、次のいずれかの CLI を使用して OpenShift Container Platform クラスターに適用します。例:
ocCLI の使用$ oc apply -f - <<EOF apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: s2i-nodejs-build spec: source:1 type: Git git: url: https://github.com/redhat-openshift-builds/samples contextDir: s2i-build/nodejs strategy:2 name: source-to-image kind: ClusterBuildStrategy paramValues:3 - name: builder-image value: quay.io/centos7/nodejs-12-centos7:master output: image: quay.io/<repo>/s2i-nodejs-example4 pushSecret: registry-credential5 EOF- 1
- ソースコードが配置される場所。
- 2
- コンテナーの構築に使用するビルドストラテジー。
- 3
- ビルドストラテジーで定義されるパラメーター。
builder-imageストラテジーパラメーターの値を設定するには、出力イメージのビルドに必要なビルダーイメージの場所を指定します。 - 4
- ビルドイメージがプッシュされる場所。ビルドされたイメージをカスタム Quay.io リポジトリーにプッシュできます。
repoは、有効な Quay.io 組織または Quay ユーザー名に置き換えます。 - 5
- コンテナーイメージをプッシュするための認証情報を保存するシークレット名。認証用に
docker-registryタイプのシークレットを生成するには、「コンテナーレジストリーへの認証」を参照してください。
例:
shpCLI の使用$ shp build create s2i-nodejs-build \ --source-url="https://github.com/redhat-openshift-builds/samples" --source-context-dir="s2i-build/nodejs" \1 --strategy-name="source-to-image" \2 --builder-image="quay.io/centos7/nodejs-12-centos7" \3 --output-image="quay.io/<repo>/s2i-nodejs-example" \4 --output-credentials-secret="registry-credential"5 - 1
- ソースコードが配置される場所。
- 2
- コンテナーの構築に使用するビルドストラテジー。
- 3
- ビルドストラテジーで定義されるパラメーター。
builder-imageストラテジーパラメーターの値を設定するには、出力イメージのビルドに必要なビルダーイメージの場所を指定します。 - 4
- ビルドイメージがプッシュされる場所。ビルドされたイメージをカスタム Quay.io リポジトリーにプッシュできます。
repoは、有効な Quay.io 組織または Quay ユーザー名に置き換えます。 - 5
- コンテナーイメージをプッシュするための認証情報を保存するシークレット名。認証用に
docker-registryタイプのシークレットを生成するには、「コンテナーレジストリーへの認証」を参照してください。
Buildリソースが CLI のいずれかを使用して作成されていることを確認します。例:
ocCLI の使用$ oc get builds.shipwright.io s2i-nodejs-build例:
shpCLI の使用$ shp build listBuildRunリソースを作成し、次のいずれかの CLI を使用して OpenShift Container Platform クラスターに適用します。例:
ocCLI の使用$ oc apply -f - <<EOF apiVersion: shipwright.io/v1beta1 kind: BuildRun metadata: name: s2i-nodejs-buildrun spec: build: name: s2i-nodejs-build1 EOF- 1
spec.build.nameフィールドは、実行するそれぞれのビルドを示し、同じ namespace で使用できる必要があります。
例:
shpCLI の使用$ shp build run s2i-nodejs-build --follow1 - 1
- オプション:
--followオプションのフラグを使用すると、出力結果のビルドログを表示できます。
次のいずれかのコマンドを実行して、
BuildRunリソースが作成されているかどうかを確認します。例:
ocCLI の使用$ oc get buildrun s2i-nodejs-buildrun例:
shpCLI の使用$ shp buildrun listBuildRunリソースはTaskRunリソースを作成し、その後ビルドストラテジーの手順を実行する Pod を作成します。
検証
すべてのコンテナーがタスクを完了したら、以下を確認します。
Pod で
STATUSフィールドがCompletedとして表示されるかどうかを確認します。$ oc get pods -w出力例
NAME READY STATUS RESTARTS AGE s2i-nodejs-buildrun-phxxm-pod 2/2 Running 0 10s s2i-nodejs-buildrun-phxxm-pod 1/2 NotReady 0 14s s2i-nodejs-buildrun-phxxm-pod 0/2 Completed 0 2mそれぞれの
TaskRunリソースにSUCCEEDEDフィールドがTrueと表示されているかどうかを確認します。$ oc get tr出力例
NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME s2i-nodejs-buildrun-phxxm True Succeeded 2m39s 13sそれぞれの
BuildRunリソースにSUCCEEDEDフィールドがTrueと表示されているかどうかを確認します。$ oc get br出力例
NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME s2i-nodejs-buildrun True Succeeded 2m41s 15s検証中にビルドの実行が失敗した場合は、
BuildRunリソースのstatus.failureDetailsフィールドをチェックして、Pod またはコンテナー内で失敗が発生した正確なポイントを特定できます。注記コンテナーの 1 つがタスクを完了したため、Pod が
NotReady状態に切り替わる可能性があります。これは想定される動作です。
build.spec.output.imageフィールドで指定されたレジストリーにイメージがプッシュされたかどうかを検証します。レジストリーにログインした後、以下のコマンドを実行してイメージをプルできます。$ podman pull quay.io/<repo>/<image>1 - 1
Buildリソースの作成時に使用されるリポジトリー名とイメージ名。たとえば、イメージ名としてs2i-nodejs-exampleを使用できます。
1.2.1. ネットワークが制限された環境での source-to-image ビルドの作成 リンクのコピーリンクがクリップボードにコピーされました!
source-to-image ビルドストラテジーに必要なイメージのミラーリングを行い、ネットワークが制限された環境で source-to-image ビルドを作成できます。
前提条件
- クラスターが source-to-image ビルドの作成に使用できる git ソースに接続し、操作できる。
-
ローカルレジストリーで
source-to-imageビルドを作成するために必要な builder-image がある。ローカルレジストリーに builder-image がない場合は、ソースイメージをミラーリングします。
手順
以下のコマンドを実行して、
source-to-imageビルドストラテジーに必要なイメージのミラーリングを行います。$ oc image mirror --insecure -a <registry_authentication> registry.redhat.io/source-to-image/source-to-image-rhel8@sha256:d041c1bbe503d152d0759598f79802e257816d674b342670ef61c6f9e6d401c5 <mirror_registry>/<repo>/source-to-image-source-to-image-rhel8- 「source-to-image ビルドの作成セクション」で説明されている手順を実行します。
1.3. ログの表示 リンクのコピーリンクがクリップボードにコピーされました!
ビルド実行のログを表示して、実行時エラーを特定し、解決することができます。
前提条件
-
ocCLI がインストールされている。 -
オプション:
shpCLI がインストールされている。
手順
いずれかの CLI を使用して、ビルド実行のログを表示します。
ocCLI の使用$ oc logs <buildrun_resource_name>shpCLI の使用$ shp buildrun logs <buildrun_resource_name>
1.4. リソースの削除 リンクのコピーリンクがクリップボードにコピーされました!
プロジェクトで不要な場合は、Build、BuildRun、または BuildStrategy リソースを削除できます。
前提条件
-
ocCLI がインストールされている。 -
オプション:
shpCLI がインストールされている。
手順
CLI のいずれかを使用して
Buildリソースを削除します。ocCLI の使用$ oc delete builds.shipwright.io <build_resource_name>shpCLI の使用$ shp build delete <build_resource_name>CLI のいずれかを使用して
BuildRunリソースを削除します。ocCLI の使用$ oc delete buildrun <buildrun_resource_name>shpCLI の使用$ shp buildrun delete <buildrun_resource_name>次のコマンドを実行して、
BuildStrategyリソースを削除します。ocCLI の使用$ oc delete buildstrategies <buildstartegy_resource_name>
Legal Notice
リンクのコピーリンクがクリップボードにコピーされました!
Copyright © Red Hat
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of the OpenJS Foundation.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.