构建 Docker 映像
您可以在 containerize
阶段中构建所需的所有 Docker 映像。 如果您希望覆盖这些映像的缺省内置 GPG 映像签名,那么需要让管道了解这些映像。
添加图像工件
您可以使用 pipelinectl
界面来添加图像工件。 在 containerize 阶段中,将图像作为工件添加到管道:
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 Image 签名将能够拾取这些图像并进行处理。
正在装入图像工件
在释放阶段的管道结束时,您可以使用 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。
有关更多信息,请查看以下文档: