脚本资源上 cwd 属性的主厨用途

Chef purpose of cwd attribute on script resource

脚本资源中cwd属性的作用是什么?出于某种原因,运行 第一个块有效,但第二个块没有按预期工作(即在 /var/apps 下克隆 git 存储库)

script 'clone_repo' do
  interpreter "bash"
  code <<-EOH
    cd /var/apps
    git clone https://gitlab.com/dsura/test-go-web-app.git
    EOH
  not_if { ::File.directory?("/var/apps/test-go-web-app") }
end

script 'clone_repo' do
  interpreter "bash"
  cwd ::File.dirname('/var/apps')
  code <<-EOH
    git clone https://gitlab.com/dsura/test-go-web-app.git
    EOH
  not_if { ::File.directory?("/var/apps/test-go-web-app") }
end

我不认为 File.directory 是一种存在的方法,但如果您的意思是 cwd '/var/apps' 那么就没有区别。它在 运行 子进程(又名脚本)之前设置工作目录。这对于 execute 资源更重要,您可能不想像那样使用 cd,但是 script 继承自 execute,所以它只是顺其自然。

你可以把整件事写得更简洁:

execute 'git clone https://gitlab.com/dsura/test-go-web-app.git /var/apps/test-go-web-app' do
  creates '/var/apps/test-go-web-app'
end

或者使用 git 资源甚至更少:

git '/var/apps/test-go-web-app' do
  action :checkout
  repository 'https://gitlab.com/dsura/test-go-web-app.git'
end

如果您离开 action :checkout,默认的 :sync 操作将在每次 Chef 运行时更新到 master 分支,这也可能更好。