脚本资源上 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
分支,这也可能更好。
脚本资源中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
分支,这也可能更好。