如何自动加载特定于一个文件路径的环境变量?

时间:2017-06-16 08:59:07

标签: jenkins ssh environment-variables direnv

我正在开发一种解决方案,简化了失败的Jenkins构建的实际调试。这涉及SSH到正确的Jenkins节点并直接进入WORKSPACE,这样您就可以交互式地尝试可以解决问题的不同更改。

虽然我解决了在正确的目录中启动SSH会话的问题,但是有一个缺失的部分:您的shell缺少Jenkins定义的原始环境变量,这些对于在此之后运行任何命令至关重要。因此,构建的第一个命令不是set > .envrc,而是将所有命令保存到此shell文件中。

我的示例是指direnv工具,它可以自动加载.envrc个文件。出于安全考虑,此工具不会自动加载这些文件并提供消息direnv: error .envrc is blocked. Run direnv allow to approve its content.

所以我目前的解决方案是在最终到达正确的文件夹后手动运行direnv allow

如何自动执行此操作,因此我不必输入此内容?提示可能没问题,因为它只涉及按一个键而不是键入~12。

请注意,我没有被迫使用direnv本身,我愿意接受其他解决方案。

1 个答案:

答案 0 :(得分:0)

从v2.15.0开始,您现在可以使用direnv的whitelist configuration来实现您所描述的内容:

  

指定白名单指令可标记特定的目录层次结构   或“受信任”的特定目录-direnv将评估任何   匹配.envrc文件,无论它们是否   特别允许。应谨慎使用此功能,因为   任何能够将文件写入该目录的人(包括   VCS储存库上的合作者)将能够执行任意   计算机上的代码。

例如,假设包含要评估而无需运行direnv allow的{​​{1}} s的目录层次结构位于/home/foo/bar下。

创建文件/home/foo/.config/direnv/config.toml,使其包含以下内容:

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

或者,如果您有一个要列入白名单的特定路径的固定列表,则可以使用exact而不是prefix

[whitelist]
exact = [ "/home/foo/projectA", "/home/foo/projectB" ]