Bazel 如何使sh_测试依赖于构建docker映像?

Bazel 如何使sh_测试依赖于构建docker映像?,bazel,Bazel,我有一个sh_测试调用docker run my_image,其中my_image由容器包规则生成。我需要容器包规则作为sh_测试的依赖项运行。如何做到这一点?向sh_测试的数据添加container_bundle只会调用container_bundle build,但我需要运行将映像推送到docker注册表的命令。我们要做的是将容器映像规则的根路径传递给脚本(如$image_LOADER),然后执行以下操作: $IMAGE|u LOADER--norun | tee IMAGE-LOADER.

我有一个sh_测试调用
docker run my_image
,其中my_image由容器包规则生成。我需要容器包规则作为sh_测试的依赖项运行。如何做到这一点?向sh_测试的数据添加container_bundle只会调用container_bundle build,但我需要运行将映像推送到docker注册表的命令。

我们要做的是将容器映像规则的根路径传递给脚本(如
$image_LOADER
),然后执行以下操作:

$IMAGE|u LOADER--norun | tee IMAGE-LOADER.log
IMAGE|u ID=$(cat./IMAGE-loader.log | grep“Loaded IMAGE ID”| cut-d:“-f2-)

我所知道的最简单的方法是将
docker\u push
规则包装在您的包中。然后,您的测试规则可以运行
docker\u push
的输出文件,该文件是一个二进制文件,将执行
docker加载
。用于获取其完整路径

大概是这样的:

#---开始runfiles.bash初始化v2---
#复制粘贴自Bazel Bash runfiles库v2。
设置失败;f=bazel_tools/tools/bash/runfiles/runfiles.bash
源“${RUNFILES_DIR:-/dev/null}/$f”2>/dev/null ||\
来源“$(grep-sm1”^$f”“${RUNFILES_MANIFEST_FILE:-/dev/null}”| cut-f2--d”“)“2>/dev/null |”\
源“$0.runfiles/$f”2>/dev/null ||\
源“$(grep-sm1”^$f”“$0.runfiles_manifest”| cut-f2--d”“)“2>/dev/null |”\
源“$(grep-sm1”^$f”“$0.exe.runfiles_manifest”| cut-f2--d”“)“2>/dev/null |”\
{echo>&2“错误:找不到$f;退出1;};f=;set-e
#---end runfiles.bash初始化v2---
$(位置“我的工作区/一些/包/我的容器推送”)
通过
some/package/BUILD
实现以下功能:

load(“@io_bazel_rules_docker//contrib:push all.bzl”,“docker_push”)
load(“@io_bazel_rules_docker//container:container.bzl”,“container_bundle”)
集装箱包(
name=“my\u container\u bundle”,
#所有现有的属性都在这里,等等。
)
docker_推(
name=“我的容器推送”,
bundle=“:我的容器\u bundle”,
)
sh_试验(
name=“我的测试”,
数据=[
“:my_container_push”,
],
deps=[
“@bazel_tools//tools/bash/runfiles”,
],
)