Как передать переменные в целевую сборку Bazel? - PullRequest
1 голос
/ 05 апреля 2020

Я пытаюсь создать изображение Docker с этим кодом:

container_image(
    name = "docker_image",
    base = "@java_base//image",
    files = [":executable_deploy.jar"],
    cmd = ["java", "-jar", "executable_deploy.jar"],
    env = { "VERSION" : "$(VERSION)" }
)

Я хочу передать переменную в созданную цель, чтобы ее можно было заменить в $ (VERSION). Возможно ли это?

Я пробовал с VERSION=1.0.0 bazel build :docker_image, но получаю ошибку:

$ (VERSION) не определено.

Как я могу передать эту переменную?

Согласно документации :

Значения этого поля (env) поддерживают создание переменных (например, $ (FOO)) и переменные штампа; Ключи также поддерживают переменные. Но я не совсем понимаю, что это значит.

1 Ответ

1 голос
/ 06 апреля 2020

Эти переменные могут быть установлены с помощью флага --define.

На странице rules_ docker есть раздел о штамповке , в котором об этом говорится.

По сути, вы можете сделать что-то вроде: bazel build --define=VERSION=1.0.0 //:docker_image

Также возможно получить эти пары ключ / значение из файлов stable-status.txt и volatile-status.txt. На странице руководства пользователя для bazel показано, как использовать эти файлы и как использовать --workspace_status_command для их заполнения.

Для установки значений по умолчанию вы можете использовать файл .bazelrc с содержимым, подобным следующему:

build --define=VERSION=0.0.0-PLACEHOLDER

Флаги, передаваемые в командной строке, будут иметь приоритет над флагами в файле .bazelr c .

Стоит отметить, что изменение значений define приведет к тому, что bazel снова все проанализирует, что в зависимости от графика может занять некоторое время, но будут выполняться только затронутые действия.

...