Bazel 强制目标重建

Bazel 强制目标重建,bazel,Bazel,在建立目标后,我需要触发这些目标的部署 为了真正不浪费任何时间我希望将此作为构建规则。现在,为了实现这一点,我希望每次都进行部署。 因此,问题是: 如何强制从头开始确定地重建目标?作为第二步,这样做会更容易,例如 java_binary( name = "target1", ... ) java_binary( name = "target2", ... ) sh_binary( name = "deploy-targets", srcs =

在建立目标后,我需要触发这些目标的部署

为了真正不浪费任何时间我希望将此作为构建规则。现在,为了实现这一点,我希望每次都进行部署。 因此,问题是:


如何强制从头开始确定地重建目标?

作为第二步,这样做会更容易,例如

java_binary(
    name = "target1",
    ...
)

java_binary(
    name = "target2",
    ...
)

sh_binary(
    name = "deploy-targets",
    srcs = ["deploy-targets.sh"],
    data = [":target1.jar", ":target2.jar", ...],
)
然后在需要部署时执行
bazel运行//path/to:deploy targets

部署目标。sh
看起来像:

#!/bin/bash

for t in $(ls ws/path/to/*.jar); do
  mvn deploy:deploy-file -Dfile=$t ...
done
动作(在构建过程中发生的动作)不应该与外部环境交互,因此部署会破坏这种契约<代码>运行,另一方面,它可以做任何事情,它只是运行一个二进制文件


使用
run
还可以解决您的“每次运行”问题:Bazel无法“缓存”二进制文件。

解决这一问题的更好方法可能是能够为多个目标调用run。或者能够使用远程部署作为输入。“构建工件后部署”与“最终部署”有多重要?时间差很大,因此必须在构建工件后进行。好的,公平地说,我们必须传输多个目标,每个目标具有多个千兆字节。由于我不能运行多个目标,连续运行至少可以说是一种非常糟糕的用户体验。你能做
data=[“:target1”,“:target2”,…]
?你能详细说明一下,这是什么意思吗?我能想到的所有使用
数据的排列都会破坏我的一个需求。我编辑了我的答案,这会破坏你的任何需求吗?不幸的是,我想在任何目标准备就绪后立即部署。