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 がインストールされている。
  • oc CLI がインストールされている。
  • oc new-project buildpacks-example コマンドを使用して、最終的なアプリケーションイメージが保存されるプロジェクトが作成されている。
  • オプション: shp CLI がインストールされている。
重要

buildpacks で shp CLI を使用するには、追加の権限設定が必要です。この設定は、buildpacks のビルドの作成を開始する前に完了しておく必要があります。

手順

  1. オプション: 以下のコマンドを実行して、ビルドパックshp CLI を使用し、パイプライン サービスアカウントに 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
  2. オプション: プライマリー作業プロジェクトに戻って、shp CLI での作業を続行します。

    $ oc project default
  3. オプション: 以下のコマンドを実行して権限を適用し、shp CLI のセットアップを完了します。

    $ oc create rolebinding allow-builds-to-push \
    
      --clusterrole=edit \
    
     --serviceaccount=default:pipeline \
    
    --namespace=buildpacks-example
  4. Build リソースを作成して 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"
  5. ビルド リソースが作成されているかどうかを確認します。oc コマンドまたは shp コマンドを使用することで、これを行うことができます。

    $ oc get builds.shipwright.io buildpack-nodejs-build
    $ shp build list
  6. BuildRun リソースを作成し、それを 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
    重要

    shp CLI バージョン 0.16.0 では、BuildRun リソースの名前を自動的に生成できません。名前を手動で作成する必要があります:

    1. 名前が一意の BuildRun リソースを作成します。

      $ shp buildrun create buildpack-nodejs-<buildrun_resource_name>  --buildref-name buildpack-nodejs-build

      各項目の説明:

      <buildrun_resource_name>
      ビルド実行リソース名を指定します
      --buildref-name buildpack-nodejs-build
      ビルドを参照するフラグを定義します。
    2. ログを追跡します。

      $ shp buildrun logs buildpack-nodej-<buildrun_resource_name> --follow
  7. BuildRun リソースが作成されているかどうかを確認します。oc コマンドまたは shp コマンドを使用することで、これを行うことができます。

    $ oc get buildrun buildpack-nodejs-buildrun
    $ shp buildrun list
    注記

    BuildRun リソースは TaskRun リソースを作成し、その後ビルドストラテジーの手順を実行する Pod を作成します。

検証

  1. すべてのコンテナーがタスクを完了するまで待ちます。
  2. 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          73s
  3. TaskRun リソースの SUCCESS フィールドに True が表示されているかどうかを確認します。

    $ oc get tr

    出力例:

    NAME                             SUCCEEDED   REASON      STARTTIME   COMPLETIONTIME
    buildpack-go-build-ttwkl-d8x97   True        Succeeded   112s        38s
  4. BuildRun リソースの 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 状態に切り替わる可能性があります。これは想定される動作です。

  5. 内部レジストリーにアクセスできるノードから次のコマンドを実行してイメージをプルし、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"
                }
         ]
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る