Принудительно восстановить цель

У меня есть необходимость, после создания целей, вызвать их развертывание.

Чтобы действительно не терять время, я бы хотел, чтобы это было правилом сборки. Теперь, чтобы это работало, я бы хотел, чтобы развертывание выполнялось каждый раз. Итак, вопрос:

Как заставить цель быть детерминистически перестроенной с нуля?


person abergmeier    schedule 29.06.2017    source источник
comment
Лучшим способом решить эту проблему, вероятно, будет вызов run для нескольких целей.   -  person abergmeier    schedule 29.06.2017
comment
Или иметь возможность использовать удаленное развертывание в качестве входных данных.   -  person abergmeier    schedule 29.06.2017
comment
Насколько кардинальное значение имеет развертывание после сборки артефакта по сравнению с его завершением?   -  person Ittai    schedule 01.07.2017
comment
Разница во времени значительна, и поэтому она должна быть после создания артефакта.   -  person abergmeier    schedule 01.07.2017
comment
Хорошо, достаточно справедливо   -  person Ittai    schedule 01.07.2017


Ответы (1)


Было бы более bazel-y сделать это как второй шаг, например,

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

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

sh_binary(
    name = "deploy-targets",
    srcs = ["deploy-targets.sh"],
    data = [":target1.jar", ":target2.jar", ...],
)

Затем выполните bazel run //path/to:deploy-targets, когда захотите развернуть.

deploy-targets.sh будет выглядеть примерно так:

#!/bin/bash

for t in $(ls ws/path/to/*.jar); do
  mvn deploy:deploy-file -Dfile=$t ...
done

Действия (которые происходят во время сборки) не должны взаимодействовать с внешней средой, поэтому развертывание нарушает этот контракт. run, с другой стороны, может делать что угодно, он просто запускает бинарный файл.

Использование run также решит вашу проблему «запускать каждый раз»: Bazel не может «кэшировать» разветвление двоичного файла.

person kristina    schedule 29.06.2017
comment
Мы должны передать несколько целей, каждая из которых имеет несколько гигабайт. А так как я не могу run использовать несколько целей, делать это последовательно — это, по меньшей мере, очень плохой пользовательский опыт. - person abergmeier; 29.06.2017
comment
Вы можете сделать data = [":target1", ":target2", ...]? - person kristina; 29.06.2017
comment
Можно немного уточнить, что вы имеете в виду? Все перестановки, которые я могу придумать с использованием data, нарушили бы одно из моих требований. - person abergmeier; 29.06.2017
comment
Я отредактировал свой ответ, нарушает ли это какое-либо из ваших требований? - person kristina; 29.06.2017
comment
К сожалению, это так, как я хочу развернуть, как только любая цель будет готова. - person abergmeier; 29.06.2017