1.3. buildpacks ビルドの作成
ビルドパックを 使用して、コンテナーイメージを作成し、ターゲットレジストリーにプッシュします。ビルドパック クラスタービルドストラテジーは、ビルドパック と ビルドパック拡張 ストラテジーをサポートしています。
Red Hat OpenShift のビルドでは、ビルドストラテジー内でクラウドネイティブビルドパック (CNB) の実行プロセスがサポートされています。Red Hat は、ユーザーが提供するビルダーイメージおよびランタイムイメージの内容に関するサポートを提供していません。Cloud Native Buildpacks (CNB) の詳細は、Cloud Native Buildpacks を 参照してください。
前提条件
- OpenShift Container Platform クラスターに Builds for Red Hat OpenShift Operator がインストールされている。
-
ocCLI がインストールされている。 -
oc new-project buildpacks-exampleコマンドを使用して、最終的なアプリケーションイメージが保存されるプロジェクトが作成されている。 -
オプション:
shpCLI がインストールされている。
buildpacks で shp CLI を使用するには、追加の権限設定が必要です。この設定は、buildpacks のビルドの作成を開始する前に完了しておく必要があります。
手順
オプション: 以下のコマンドを実行して、
ビルドパックでshpCLI を使用し、パイプラインサービスアカウントにbuildpacks-exampleプロジェクトのイメージレジストリーへのアクセス権限を付与します。$ oc policy add-role-to-user system:image-puller system:serviceaccount:default:pipeline --namespace=buildpacks-example$ oc policy add-role-to-user system:image-pusher system:serviceaccount:default:pipeline --namespace=buildpacks-exampleオプション: プライマリー作業プロジェクトに戻って、
shpCLI での作業を続行します。$ oc project defaultオプション: 以下のコマンドを実行して権限を適用し、
shpCLI のセットアップを完了します。$ oc create rolebinding allow-builds-to-push \ --clusterrole=edit \ --serviceaccount=default:pipeline \ --namespace=buildpacks-exampleBuildリソースを作成して OpenShift Container Platform クラスターに適用します。ocコマンドまたはshpコマンドを使用することで、これを行うことができます。$ oc apply -f - <<EOF apiVersion: shipwright.io/v1beta1 kind: Build metadata: name: buildpack-nodejs-build spec: source: type: Git git: url: https://github.com/redhat-openshift-builds/samples.git strategy: name: buildpacks kind: ClusterBuildStrategy retention: atBuildDeletion: true paramValues: - name: run-image value: paketobuildpacks/run-ubi8-base:latest - name: cnb-builder-image value: paketobuildpacks/builder-jammy-tiny:0.0.344 - name: source-subpath value: "buildpacks/nodejs" output: image: image-registry.openshift-image-registry.svc:5000/buildpacks-example/taxi-app EOF各項目の説明:
source- アプリケーションのソースコードを含む Git リポジトリーを指定します。
strategy- コンテナーを構築するためのビルドストラテジーを指定します。
パラメーター値- ビルドパックストラテジーに設定されるパラメーターを指定します。
名前: イメージの実行- アプリケーションが実行されるベースイメージを指定します。
名前: cnb-builder-image- Cloud Native Buildpacks (CNB) がアプリケーションを検出してビルドするために使用するビルダーイメージを指定します。
名前: ソースサブパス- アプリケーションのソースコードが配置されている Git リポジトリー内のサブディレクトリーを指定します。
output- ビルドしたイメージをプッシュする場所を指定します。
$ shp build create buildpack-nodejs-build \ --source-git-url="https://github.com/redhat-openshift-builds/samples.git" \ --strategy-name="buildpacks" \ --output-image="image-registry.openshift-image-registry.svc:5000/buildpacks-example/taxi-app" \ --param-value="source-subpath=buildpacks/nodejs" \ --param-value="cnb-builder-image=paketobuildpacks/builder-jammy-tiny:0.0.344" \ --param-value="run-image=paketobuildpacks/run-ubi8-base:latest"ビルドリソースが作成されているかどうかを確認します。ocコマンドまたはshpコマンドを使用することで、これを行うことができます。$ oc get builds.shipwright.io buildpack-nodejs-build$ shp build listBuildRunリソースを作成し、それを OpenShift Container Platform クラスターに適用します。ocコマンドまたはshpコマンドを使用することで、これを行うことができます。$ oc apply -f - <<EOF apiVersion: shipwright.io/v1beta1 kind: BuildRun metadata: name: buildpack-nodejs-buildrun namespace: builds-test spec: build: name: buildpack-nodejs-build EOF各項目の説明:
spec.build.name実行される
buildpack-nodejs-buildリソースを指定します。$ shp build run buildpack-nodejs-buildrun --follow
重要shpCLI バージョン 0.16.0 では、BuildRunリソースの名前を自動的に生成できません。名前を手動で作成する必要があります:名前が一意の
BuildRunリソースを作成します。$ shp buildrun create buildpack-nodejs-<buildrun_resource_name> --buildref-name buildpack-nodejs-build各項目の説明:
<buildrun_resource_name>- ビルド実行リソース名を指定します
--buildref-name buildpack-nodejs-build- ビルドを参照するフラグを定義します。
ログを追跡します。
$ shp buildrun logs buildpack-nodej-<buildrun_resource_name> --follow
BuildRunリソースが作成されているかどうかを確認します。ocコマンドまたはshpコマンドを使用することで、これを行うことができます。$ oc get buildrun buildpack-nodejs-buildrun$ shp buildrun list注記BuildRunリソースはTaskRunリソースを作成し、その後ビルドストラテジーの手順を実行する Pod を作成します。
検証
- すべてのコンテナーがタスクを完了するまで待ちます。
Pod の
STATUSフィールドにCompletedと表示されているかどうかを確認します。$ oc get pods -w出力例:
NAME READY STATUS RESTARTS AGE buildpack-go-build-ttwkl-d8x97-pod 2/8 NotReady 0 63s buildpack-go-build-ttwkl-d8x97-pod 0/8 Completed 0 72s buildpack-go-build-ttwkl-d8x97-pod 0/8 Completed 0 73sTaskRunリソースのSUCCESSフィールドにTrueが表示されているかどうかを確認します。$ oc get tr出力例:
NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME buildpack-go-build-ttwkl-d8x97 True Succeeded 112s 38sBuildRunリソースのSUCCESSフィールドにTrueが表示されているかどうかを確認します。$ oc get br出力例:
NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME buildpack-go-build-ttwkl True Succeeded 107s 33s注記ビルド実行が失敗した場合は、
BuildRunリソースのstatus.failureDetailsフィールドをチェックして、Pod またはコンテナーで失敗した正確なポイントを特定できます。コンテナーの 1 つがタスクを完了したため、Pod が
NotReady状態に切り替わる可能性があります。これは想定される動作です。内部レジストリーにアクセスできるノードから次のコマンドを実行してイメージをプルし、
build.spec.output.imageフィールドで指定したレジストリーにイメージがプッシュされているかどうかを確認します。$ podman manifest inspect image-registry.openshift-image-registry.svc:5000/buildpacks-example/taxi-app前の例では、プロジェクト名は
buildpacks-example、イメージ名はtaxi- アプリケーションです。出力例:
"schemaVersion": 2, "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "manifests": [ { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "size": 594, "digest": "sha256:6a05100e302c86c03fec6277f4b3107f1fdde6c69d3ca9a4207e4735a5213e32", "platform": { "architecture": "amd64", "os": "linux" } ]