【问题标题】:How to configure Bundler via Chef?如何通过 Chef 配置 Bundler?
【发布时间】:2021-02-10 20:29:37
【问题描述】:

我们使用 Chef 来设置和执行 Bundler。我们之前在bash 资源中运行bundle install,并将usergroup 属性设置为target_user(捆绑器操作旨在以该用户身份运行)。

由于某些选项(即--deployment--path--without)已弃用,我们现在需要通过bundle config 配置它们。

但是,当使用相同的资源配置时,Bundle 似乎无法按预期工作;我们得到Bundler::SudoNotPermittedError: Bundler requires sudo access to install...,我想这是因为配置文件没有存储在正确的位置,和/或读取。

execute 资源应该如何配置?目前是:

# Simplified version
bash "Install gems" do
  code <<~EOF
    bundle config --local deployment true &&
    bundle config --local path /path/to/gems_dir &&
    bundle install --gemfile=/path/to/Gemfile
  EOF

  user "target_user"
  group "target_user"
end

【问题讨论】:

    标签: ruby bash environment-variables chef-infra environment


    【解决方案1】:

    你有这个 bash 资源作为 target_user 运行,这就是错误的原因。我认为您在这里有两个选择:

    1. 从资源中删除用户和组,然后它将以 root 身份运行。
    2. code 中的每个捆绑命令之前添加sudo,并确保target_user 是没有密码的sudoer。

    【讨论】:

    • 资源旨在以target_user 运行。指定了,但不是很明确,所以我更新了描述,谢谢!
    【解决方案2】:

    原来Chef在设置user/group时并没有导出环境(变量),所以如果想要一个完全预设的环境,一些变量需要手动设置,通过@987654323 @ 属性。

    完成任务的最小预设如下:

    bash "Bundle..." do
      code "bundle ..."
      user "user"
      group "user"
      env({
        "HOME"     => "/home/user",
        "USER"     => "user",
        "USERNAME" => "user",
        "PWD"      => "/home/user",
      })
    end
    

    还有其他变量,但我想它们对于绝大多数命令并不重要。

    【讨论】:

      猜你喜欢
      • 2017-05-22
      • 2013-07-14
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多