Docker イメージのビルド
必要なすべての Docker イメージを、containerize
ステージでビルドすることができます。 それらのイメージのデフォルトの組み込み GPG イメージ署名をオーバーライドする場合は、パイプラインにそれらのイメージを認識させる必要があります。
イメージ成果物の追加
イメージ成果物は pipelinectl
インターフェースを使用して追加することができます。 コンテナー化ステージで、イメージを成果物としてパイプラインに追加します。
save_artifact <image-alias> type=image "name=${IMAGE}" "digest=${DIGEST}" [<prop>=<value>]
ここで、name の値は完全修飾イメージ名でなければなりません (例: your-docker-repository.namespace/imagename:imagetag
)。また、digest
は、イメージの sha256
ダイジェストでなければなりません (例: sha256:c43e802dcc7485590b54614006ced9338d5bd9a045115c89d5570bb95eeb52d9
)。
<image-alias>
には任意のストリングを指定できます。その目的は、他の成果物の中からイメージの名前を人間が判読できるようにすることです。 成果物にはタグやタイム・スタンプなど任意のプロパティーを追加することができます。
type、name、および digest は必須フィールドです。
例
save_artifact service type=image \
name="${SERVICE_IMAGE}" \
digest="${SERVICE_IMAGE_DIGEST}" \
tags="${SERVICE_IMAGE_TAGS}"
save_artifact service_debug type=image \
"name=${SERVICE_DEBUG_IMAGE}" \
"digest=${SERVICE_DEBUG_IMAGE_DIGEST}"
このインターフェースを使用すると、デフォルトの組み込み GPG イメージ署名によってこれらのイメージをピックアップし、処理することができます。
イメージ成果物のロード
パイプラインのリリース・ステージの最後に、pipelinectl インターフェースを使用してこれらの成果物にアクセスすることができます。
list_artifacts
load_artifact <image-alias> <property>
list_artifacts
は、使用可能なイメージ別名をリストしています。ここで、 <property>
は、ユーザーまたは以前に追加したパイプラインの任意のプロパティーです。 これらを一緒に使用することで、成果物を順に反復して処理することができます。以下に例を示します。
list_artifacts | while IFS= read -r artifact; do
$image=$(load_artifact "$artifact" name)
$digest=$(load_artifact "$artifact" digest)
$signature=$(load_artifact "$artifact" signature)
# update your inventory using these
done
signature
プロパティーは、デフォルトの組み込み GPG イメージ署名タスクによって追加されます。
ICR での作業
IBM Cloud® Container Registry には、コンテナー・イメージを保管して IBM Cloud アカウント内のユーザーと共有するために使用できるマルチテナント・プライベート・イメージ・レジストリーが用意されています。
プライベート・エンドポイントが有効になっている ICR の操作
プライベート・エンドポイントで有効になっているレジストリーを処理するには、環境変数 registry-domain
をパイプラインに追加する必要があります。
例
registry-domain
の値は private.de.icr.io
に設定できます。
環境変数を使用するために、コードは以下のサンプルのようになります。
ICR_REGISTRY_DOMAIN="$(get_env registry-domain "")"
if [ -z "$ICR_REGISTRY_DOMAIN" ]; then
# Default to icr domain from registry-region
ICR_REGISTRY_REGION="$(get-icr-region "$(get_env registry-region "")")"
ICR_REGISTRY_DOMAIN="$ICR_REGISTRY_REGION.icr.io"
fi
IMAGE="$ICR_REGISTRY_DOMAIN/$ICR_REGISTRY_NAMESPACE/$IMAGE_NAME:$IMAGE_TAG"
docker login -u iamapikey --password-stdin "$ICR_REGISTRY_DOMAIN" < /config/api-key
前のサンプル・コードは、 sample hello-compliance-app から取得されています。
詳しくは、以下の資料を確認してください。