ビルドパックを使用したアプリケーションのビルド

ビルド (イメージ・ビルド) は、ソース・コードからコンテナー・イメージを作成するために使用できるメカニズムです。 Code Engineは、Dockerfile および Cloud Native Buildpacks からのビルドをサポートしています。

開始前に

すべてのCode Engineユーザーは、従量課金 (PAYG) アカウントを持っている必要があります。 チュートリアルでは、費用が発生する場合があります。 コスト見積もりツールを使用して、使用量の見積もりに基づいてコスト見積もりを生成してください。 詳しくは、 Code Engine 価格設定 を参照してください。

レジストリー・アクセス権限のセットアップ

ビルドによって出力されるイメージは、コンテナー・レジストリーに保管されるので、Code Engine に対し、イメージ・レジストリーへのアクセス権限をセットアップする必要があります。 イメージを Docker Hub に保管するには、 ibmcloud ce secret create --format registry コマンドを使用してレジストリー・アクセスを作成します。 次の例では、レジストリー・アクセス権限の名前として dockerhub を使用し、ご使用の Docker Hub ID をユーザー名として指定します。 Docker Hub のパスワードとしては、ご使用の Docker Hub パスワードまたはアクセス・トークンを指定できます。

ibmcloud ce secret create --format registry --name dockerhub --server https://index.docker.io/v1/ --username username --password password

出力例

Creating registry secret 'dockerhub'...
OK

詳しくは、レジストリー・アクセス権限の追加に関する資料を参照してください。

ビルドの作成

アプリまたはジョブのソース・コードに関する情報を含めたビルドを作成します。 情報には、ジョブまたはアプリのロケーションとアクセス情報を含めることができます。

ibmcloud ce build create コマンドは、イメージを作成するのではなく、イメージをビルドするための構成を作成します。 ibmcloud ce buildrun submit コマンドで、イメージを作成するためのビルド構成を参照します。 build create コマンドが実行されるまでは、build update コマンドまたは buildrun submit コマンドで指定するオプションが検証されることも、イメージを作成するために使用されることもありません。 ビルド構成を使用すると、特定のイメージの複数のビルドを後で作成することができます。これはソース・リポジトリーに変更が適用された場合などに便利です。

以下の例では、ビルド構成を作成するために ibmcloud ce build create コマンドを使用します。 ビルドの名前として tutorial-build を使用し、ソース・コードのロケーションとして https://github.com/IBM/CodeEngine を指定し、ソースを格納するコンテキスト・ディレクトリー・フォルダーとして /s2i-buildpacks を指定します。 レジストリー・アクセス権限として、前に作成したレジストリー・シークレット dockerhub を使用します。 ソース・コードをコンパイルする際のビルド・ストラテジーとして buildpacks を指定し、ビルド・サイズとして small を指定します。

ibmcloud ce build create --name tutorial-build --source https://github.com/IBM/CodeEngine --commit main --context-dir /s2i-buildpacks --registry-secret dockerhub --image docker.io/<your_docker_ID>/tutorial --size small --strategy buildpacks

出力例

Creating build 'tutorial-build'...
OK

size オプションでは、ビルドのサイズを指定します。使用されるリソースの量がこれで決まります。 有効な値は、 smallmediumlargexlarge、および xxlarge です。 size は、アプリまたはジョブのソース・コードのビルド要件が反映されます。 メモリー不足またはディスク・スペース不足でビルドが失敗したり、処理に時間がかかったりする場合は、より大きいサイズに切り替えてみてください。 ビルドのサイズを大きくするということは、ビルド・プロセスに割り当てられるメモリーと CPU コアも多くなるということです。 このサイズを大きくすると、ビルド・プロセスの速度が上がる可能性がありますが、このアクションによってコストも増加します。 ビルドについて詳しくは、トラブルシューティングのヒントを確認してください。

ビルド実行の実行

ビルド構成が作成されたので、ibmcloud ce buildrun submit コマンドを使用して、ビルド構成に基づいてビルドを実行することができます。 次の例では、tutorial-build ビルド構成を参照して、ビルド実行を実行依頼します。 システムにより、固有のビルド実行名が生成されます。 --name オプションを使用してビルド実行の名前を指定することもできます。ビルド実行の詳細を取得するにはビルド実行の名前が必要となるため、このオプションを使用すると役立つことがあります。 この例では、システムが自動的にビルド実行の名前を生成します。

ibmcloud ce buildrun submit --build tutorial-build

出力例

Submitting build run 'tutorial-build-run-851026-090000000'...
Run 'ibmcloud ce buildrun get -n tutorial-build-run-851026-090000000' to check the build run status.
OK

ビルド実行の状況を確認するには、buildrun get ibmcloud ce buildrun get コマンドを使用してビルド実行の詳細を表示します。

ibmcloud ce buildrun get --name tutorial-build-run-851026-090000000

出力例

Getting build run 'tutorial-build-run-851026-090000000'...
[...]
OK

Name:          tutorial-build-run-851026-090000000
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           3m42s  
Created:       2021-03-14T14:31:21-05:00  

Summary:  Succeeded  
Status:   Succeeded  
Reason:   Succeeded  

状況が Succeeded になっていれば、ビルドは完了しています。

ビルド実行で問題が発生した場合は、ibmcloud ce buildrun logs コマンドを使用して、ビルド実行に関するログを表示します。

ibmcloud ce buildrun logs --buildrun tutorial-build-run-851026-090000000

出力例

Getting build run 'tutorial-build-run-851026-090000000'...
Getting instances of build run 'tutorial-build-run-851026-090000000'...
Getting logs for build run 'tutorial-build-run-851026-090000000'...
OK

tutorial-build-run-851026-090000000-7vlrw-pod-c9t6g/step-git-source-source-7tbwh:
{"level":"info","ts":1610378702.42616,"caller":"git/git.go:165","msg":"Successfully cloned https://github.com/IBM/CodeEngine @ 6b66f2bc3e1277c2e6475608a9c50335712116e0 (grafted,  HEAD, origin/main) in path /workspace/source"}
{"level":"info","ts":1610378703.5453625,"caller":"git/git.go:203","msg":"Successfully initialized and updated submodules in path /workspace/source"}
[...]

ビルドパックのビルド・ストラテジーを使用して、ソース・コードから正常にコンテナー・イメージがビルドされました。

コンテナー・イメージでの作業

コンテナー・イメージがビルドされ、構成済みのコンテナー・レジストリー・ロケーションにそのイメージがプッシュされたので、Code Engine でイメージをデプロイすることができます。 例えば、作成したイメージを使用する Code Engine アプリを作成できます。

ibmcloud ce application create --name tutorial-app --image <your_docker_ID>/tutorial

出力例

Creating application 'tutorial-app'...
[...]

ビルドパックに関する次のステップ

詳しくは、アプリケーションのデプロイを参照してください。

ソース・コード・プロジェクトで Dockerfile を使用する場合には、 同じステップを実行しますが、Dockerfile ビルド・ストラテジーを指定してアプリケーションまたはジョブのイメージをビルドします。 Dockerfile について詳しくは、Code Engine 用 Dockerfile の記述を参照してください。

コード・サンプルがさらに必要ですか? IBM Cloud Code Engine GitHub repoを確認してください。