Bazel如何将与src同级的private-keys目录映射复制到build目录
解决方案
问题核心原因有两个:一是Bazel默认不会自动处理未显式声明的静态资源目录,二是之前填写的相对路径不符合Bazel的路径解析规则(Bazel所有路径默认相对于WORKSPACE根目录,而非BUILD文件或源码文件的相对位置),调整步骤如下:
- 第一步:引入静态资源复制工具(如果项目未引入过
copy_to_directory,先在BUILD.bazel最顶部添加加载声明)
load("@aspect_bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory")
- 第二步:显式声明private-keys目录下的所有文件为Bazel需要追踪的源,在现有
SOURCES定义下方添加如下配置:
PRIVATE_KEYS = glob(["private-keys/**/*"])
- 第三步:定义目录复制任务,将private-keys完整复制到build输出目录的对应位置,添加如下目标:
copy_to_directory( name = "copy_private_keys", srcs = PRIVATE_KEYS, root_dir = "private-keys", out = "build/private-keys", )
- 第四步:将复制任务加入到镜像的依赖中,确保运行/打包时会先执行复制操作,修改
nodejs_image的data字段,添加刚才定义的复制目标:
nodejs_image( name = "my-service", data = [ ":compile_ts", ":copy_private_keys", # 新增这行 "@npm//source-map-support", ] + _mappings, # 其余原有配置保持不变 )
- 额外说明:当前贴出的配置里重复定义了两次名为
compile_ts的ts_project目标,属于笔误,请删除重复的那一段。
调整完成后重新执行构建命令,private-keys目录就会被自动复制到build目录下,运行时就能正常读取对应密钥文件了。
内容的提问来源于stack exchange,提问作者Susitha Ravinda Senarath
相关产品推荐
相关产品推荐

