Как автоматически загрузить переменные окружения, относящиеся к одному пути к файлу?
Я работаю над разработкой решения, упрощающего практическую отладку неудачных сборок 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" ]