Как автоматически загрузить переменные окружения, относящиеся к одному пути к файлу?

Я работаю над разработкой решения, упрощающего практическую отладку неудачных сборок Jenkins. Это включает SSH-подключение к правому узлу Jenkins и переход непосредственно в WORKSPACE, чтобы вы могли в интерактивном режиме попробовать различные изменения, которые могут решить вашу проблему.

В то время как я решил проблему запуска сеанса SSH в правильном каталоге, есть один недостающий бит: в вашей оболочке отсутствуют исходные переменные среды, определенные Jenkins, и они очень важны для запуска любых команд после этого. Таким образом, не первая команда сборки set > .envrc который сохраняет все в этот файл оболочки.

Мой пример относится к direnv инструмент, который способен автоматически загружаться .envrc файлы. Из соображений безопасности этот инструмент не загружает эти файлы автоматически и выдает сообщение direnv: error .envrc is blocked. Runдиректив разрешитьto approve its content.

Поэтому мое текущее решение - запустить вручную direnv allow после попадания в нужную папку.

Как я могу автоматизировать это, чтобы мне не пришлось печатать это? Подсказка может быть в порядке, потому что она будет включать только нажатие одной клавиши вместо набора ~12.

Обратите внимание, что я не вынужден использовать direnv Сам я открыт для другого решения.

1 ответ

Начиная с v2.15.0, теперь вы можете использовать конфигурацию белого списка direnv для достижения того, что вы описали:

Указание директив белого списка помечает определенные иерархии каталогов или определенные каталоги как "доверенные" - direnv будет оценивать любые подходящие файлы.envrc независимо от того, были ли они специально разрешены. Эту функцию следует использовать с большой осторожностью, поскольку любой, кто имеет возможность записывать файлы в этот каталог (включая соавторов в хранилищах VCS), сможет выполнять произвольный код на вашем компьютере.

Например, скажем, что иерархия каталогов, которая содержит .envrcЕсли вы хотите, чтобы вас оценивали без запуска direnv allow находится под /home/foo/bar,

Создать файл /home/foo/.config/direnv/config.toml так что он содержит следующее:

[whitelist]
prefix = [ "/home/foo/bar" ]

В качестве альтернативы, если существует фиксированный список определенных путей, которые вы хотите добавить в белый список, вы можете использовать exact скорее, чем prefix:

[whitelist]
exact = [ "/home/foo/projectA", "/home/foo/projectB" ]
Другие вопросы по тегам