如何解决如何让 sh_test 依赖于构建 docker 镜像?
我有一个调用 docker run my_image
的 sh_test,其中 my_image 是由 container_bundle 规则生成的。我需要将 container_bundle 规则作为对 sh_test 的依赖来运行。如何做到这一点?将 container_bundle 添加到 sh_test 的数据只会调用 container_bundle build,但我需要 run 将图像推送到 docker 注册表。
解决方法
我们所做的是将容器镜像规则的根路径传递给脚本(如 $IMAGE_LOADER
)并执行:
$IMAGE_LOADER --norun | tee image-loader.log
IMAGE_ID=$(cat ./image-loader.log | grep "Loaded image ID" | cut -d":" -f2-)
,
我所知道的最简单的方法是将 docker_push
规则包裹在您的包中。然后您的测试规则可以运行 docker_push
的输出文件,该文件是执行 docker load
的二进制文件。使用 runfiles.bash 获取其完整路径。
像这样:
# --- begin runfiles.bash initialization v2 ---
# Copy-pasted from the Bazel Bash runfiles library v2.
set -uo pipefail; f=bazel_tools/tools/bash/runfiles/runfiles.bash
source "${RUNFILES_DIR:-/dev/null}/$f" 2>/dev/null || \
source "$(grep -sm1 "^$f " "${RUNFILES_MANIFEST_FILE:-/dev/null}" | cut -f2- -d' ')" 2>/dev/null || \
source "$0.runfiles/$f" 2>/dev/null || \
source "$(grep -sm1 "^$f " "$0.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \
source "$(grep -sm1 "^$f " "$0.exe.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \
{ echo>&2 "ERROR: cannot find $f"; exit 1; }; f=; set -e
# --- end runfiles.bash initialization v2 ---
$(rlocation "my_workspace/some/package/my_container_push")
some/package/BUILD
有了这个:
load("@io_bazel_rules_docker//contrib:push-all.bzl","docker_push")
load("@io_bazel_rules_docker//container:container.bzl","container_bundle")
container_bundle(
name = "my_container_bundle",# All your existing attrs here,etc etc.
)
docker_push(
name = "my_container_push",bundle = ":my_container_bundle",)
sh_test(
name = "my_test",data = [
":my_container_push",],deps = [
"@bazel_tools//tools/bash/runfiles",)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。