Начиная с версии v1.2 werf вводит так называемый режим гитерминизма по умолчанию (примечание: название происходит от совмещения слов git и determinism, что можно понимать как “детерминированный гитом”).

В данном режиме все конфигурационные файлы читаются из текущего коммита локального гит-репозитория. Запрещено иметь некоммитнутые изменения в этих файлах — werf упадёт с ошибкой при наличии таких файлов. С помощью опции --non-strict-giterminism-inspection (или переменной окружения WERF_NON_STRICT_GITERMINISM_INSPECTION=1) можно понизить уровень инспекции детерминизма до уровня предупреждений в логе о наличии некоммитнутых файлов, однако werf всё равно будет читать эти файлы из текущего коммита локального гит-репозитория.

Для следующих файлов возможно ослабление режима детерминизма и чтение напрямую из рабочей директории с помощью флага --loose-giterminism (или переменной окружения WERF_LOOSE_GITERMINISM=1):

  • werf.yaml;
  • .werf/**/*.tmpl дополнительные файлы go-шаблонов для werf.yaml;
  • .helm/templates;
  • .helm/values.yaml;
  • .helm/secret-values.yaml;
  • .helm/Chart.yaml.

Важно. Отключать режим детерминизма не рекомендовано, т.к. это повышает вероятность написания конфигурации, которая приведёт к невоспроизводимым сборкам и выкатам приложения. Важно использовать детерминированный режим для построения конфигурации соответствующей подходу GitOps.

Функция .Files.Get

В режиме детерминизма функция .Files.Get доступная при чтении конфига `werf.yaml будет читать файлы только из текущего коммита гит-репозитория.

При указании флага --loose-giterminism (или переменной окружения WERF_LOOSE_GITERMINISM=1) werf будет читать указанный аргументом к функции файл напрямую из рабочей директории проекта.

Функции go-шаблонов для доступа к переменным окружения

Функции и доступны для использования при чтении конфига werf.yaml только при указании флага --loose-giterminism (или переменной окружения WERF_LOOSE_GITERMINISM=1).

Директива mount

Директива mount для сборщика образов stapel доступна для использования только при указании флага --loose-giterminism (или переменной окружения WERF_LOOSE_GITERMINISM=1).

Сборщик Dockerfile

Werf использует контекст для Dockerfile и сам Dockerfile и .dockerignore только из текущего коммита локального гит-репозитория.

Важно: Нет способа выключить чтение контекста, Dockerfile и .dockerignore из текущего коммита для данного сборщика — флаг --loose-giterminism (или переменная окружения WERF_LOOSE_GITERMINISM=1) не влияет на работу данного сборщика.

Однако есть один способ явным образом добавить файлы вне гит-репозитория в контекст сборки Dockerfile: с помощью директивы contextAddFile:

context: app
dockerfile: Dockerfile
contextAddFile:
 - myfile
 - dir/a.out

В данной конфигурации werf создаст контекст для Dockerfile, состоящий из:

  • директории app из текущего коммита локального гит-репозитория (эта директория указана директивой context);
  • файлов myfile и dir/a.out из директории app в текущей рабочей директории проекта (данные файлы могут быть не коммитнуты в гит и могут быть untracked).

Резюме

  по умолчанию с опцией --non-strict-giterminism-inspection (или с переменной окружения WERF_NON_STRICT_GITERMINISM_INSPECTION=1) с опцией --loose-giterminism (или с переменной окружения WERF_LOOSE_GITERMINISM=1)
werf.yaml читается из гита, некоммитнутое состояние запрещено читается из гита, некоммитнутое состояние вызывает предупреждение читается из рабочей директории, некоммитнутое состояние разрешено
.werf/**/*.tmpl читается из гита, некоммитнутое состояние запрещено читается из гита, некоммитнутое состояние вызывает предупреждение читается из рабочей директории, некоммитнутое состояние разрешено
.helm/templates читается из гита, некоммитнутое состояние запрещено читается из гита, некоммитнутое состояние вызывает предупреждение читается из рабочей директории, некоммитнутое состояние разрешено
.helm/values.yaml читается из гита, некоммитнутое состояние запрещено читается из гита, некоммитнутое состояние вызывает предупреждение читается из рабочей директории, некоммитнутое состояние разрешено
.helm/secret-values.yaml читается из гита, некоммитнутое состояние запрещено читается из гита, некоммитнутое состояние вызывает предупреждение читается из рабочей директории, некоммитнутое состояние разрешено
.helm/Chart.yaml читается из гита, некоммитнутое состояние запрещено читается из гита, некоммитнутое состояние вызывает предупреждение читается из рабочей директории, некоммитнутое состояние разрешено
Dockerfile файлы, указанные в werf.yaml читается из гита, некоммитнутое состояние запрещено читается из гита, некоммитнутое состояние вызывает предупреждение читается из гита (детерминизм невозможно ослабить)
context for dockerfiles specified in the werf.yaml читается из гита, некоммитнутое состояние запрещено читается из гита, некоммитнутое состояние вызывает предупреждение читается из гита (детерминизм невозможно ослабить)
.dockerignore файлы читаются из гита, некоммитнутое состояние запрещено читается из гита, некоммитнутое состояние вызывает предупреждение читается из гита (детерминизм невозможно ослабить)