我正在使用带有Windows节点的Chef-client(11.12.8)(Win Server 2012)。
我安装了perforce客户端。为此,我在CMD Chef-client中启动以执行我的食谱。
Perforce安装在PATH中设置p4.exe的相应路径。 但是在我启动chef-client命令的cmd中,PATH没有更新。 所以之后,在我的食谱中,当我尝试在windows_batch资源中执行命令'p4 sync'时,它失败了。
我尝试的解决方案,
1 /
设置PATH =%PATH%; C:\ Program Files \ Perforce
在启动p4 sync命令之前在windows_batch资源中
没有工作。
2 /
将上一个命令分批放入。
没有工作。
3 /
$ env:Path = $ env:Path +“; C:\ Program Files \ Perforce”
在启动p4 sync命令之前在powershell_script资源中
没有工作。
有办法吗?
而不是使用:
C:\ Program Files \ Perforce \ p4.exe
感谢
UPDATE_01
代码,但我认为它不会那么有用......
安装perforceClient
windows_package 'Perforce Client' do
source 'PerforceClient_2014.1\\p4vinst64.exe'
options '/s /v"/qn"'
installer_type :custom
action :install
end
...
windows_batch 'Perforce sync' do
code <<-EOH
p4 sync //APP/
EOH
end
这里p4命令是我从启动chef-client命令的cmd中未知的。 我将看一下批处理资源。 感谢
答案 0 :(得分:0)
windows_package 'Perforce Client' do
source 'PerforceClient_2014.1\\p4vinst64.exe'
options '/s /v"/qn"'
installer_type :custom
action :install
notifies :run, "execute[PerforceSync]", :immediately
end
execute 'PerforceSync' do
action :nothing
command 'p4 sync //APP/'
environment { "PATH": "#{ENV['PATH']};C:\Program Files\Perforce" }
end
无需使用windows_batch
资源来执行单个命令。
我在执行资源中没有使用任何操作,以避免在每次运行时执行它,并且只在安装软件包时通知它运行。
存在 windows_batch
或batch
资源来转置现有批次。
我确定你不会写一个.bat或.cmd文件来运行一个命令。
execute
资源文档为HERE
附注:如果不是由其他资源驱动,您应该考虑为任何执行或批处理资源添加一个防护,请参阅This作为起点。