【问题标题】:Make an environment variable accessible from a formula使环境变量可从公式中访问
【发布时间】:2019-06-09 17:45:45
【问题描述】:

感谢这篇文章,我尝试为 gitlab 编写私人自制水龙头:https://wheniwork.engineering/creating-a-private-homebrew-tap-with-gitlab-8800c453d893

这是我的公式:

class Pouet < Formula
  desc "Pouet command line utility"
  homepage "https://gitlab.mycompany.com/martin/Pouet"
  url "https://gitlab.mycompany.com/api/v4/projects/0000017/repository/archive?private_token=#{ENV['HOMEBREW_GITLAB_TOKEN']}"
  version "1.0"
  sha256 "ffdb029ada6d03fe3fa323577693cc233ef3d2300784a8d79077cecf6df7a470"
def install
    system "echo", ENV["HOMEBREW_GITLAB_TOKEN"]
  end
  test do
    pouet --help
  end
end

我在我的环境中定义了HOMEBREW_GITLAB_TOKEN,因此可以从我启动brew 命令的shell 访问它。

很遗憾,下载失败,因为 HOMEBREW_GITLAB_TOKEN 变量在 brew 进程中未知。

有什么想法吗?

【问题讨论】:

  • 你是如何定义环境变量的?出口了吗?
  • 是的(见我的编辑)

标签: ruby environment-variables homebrew


【解决方案1】:

从环境变量名中删除$

system "echo", ENV["GITLAB_HOMEBREW_TOKEN"]

见:

[1] pry(main)> ENV['LC_NAME']
=> "pl_PL.UTF-8"
[2] pry(main)> ENV['$LC_NAME']
=> nil

【讨论】:

  • 我删除了它,但它没有用,所以我编辑了我的问题
  • 当你echo $GITLAB_HOMEBREW_TOKEN时你的shell里有吗?
  • 是的,我当然检查过(我只是编辑我的问题以使其精确)
【解决方案2】:

Homebrew 有多个级别的环境变量过滤。遇到的第一个问题与您有变量GITLAB_HOMEBREW_TOKEN 的问题的先前版本有关。 Homebrew 的initial filtering 只允许specific environment variables 传递给brew 命令以避免污染构建环境。因此,GITLAB_HOMEBREW_TOKEN 不会通过,因为它不是以 HOMEBREW_ 开头(或匹配任何其他列入白名单的变量)。

第二级过滤是您当前遇到的“敏感”环境变量get filtered(如果它们与以下 Ruby 正则表达式匹配):

/(cookie|key|token|password)/i

因为您的变量在变量名中有关键字TOKEN,所以它在到达您的公式之前就被过滤掉了。

简而言之,您需要使用以HOMEBREW_开头的不同环境变量名称,例如:

HOMEBREW_GITLAB_SECRET=secretsquirrel brew install Pouet

您可以在您的公式的 Ruby 代码中访问它。

另请参阅https://docs.brew.sh/Formula-Cookbook#using-environment-variables,了解现有环境变量过滤类型的背景。

【讨论】:

  • 谢谢我忽略了二级过滤!
猜你喜欢
  • 1970-01-01
  • 2019-11-23
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
  • 2016-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多