我使用Chef配置我的TeamCity构建代理(Windows Server 2012 VM),我需要为Visual Studio / Android构建安装Xamarin。对于其他安装程序,我通常会使用/h
,/help
,/?
,-?
,-h
和--help
来调用它,直到我得到一个用法对话框告诉我命令行参数。我无法弄清楚XamarinInstaller.exe
的命令行参数,当我像这样启动它时:
XamarinInstaller.exe /quiet /norestart
因为这些是常见的约定,它似乎只是坐在那里而且什么都不做。它应该是下载的东西(这是我用GUI启动它时的功能)但是当我查看任务管理器中的以太网使用时,没有什么事情发生。我不知道它在哪里写日志或如何知道它是否失败。它失败时似乎没有退出。
这是我的厨师代码:
xamarinTargets = 'C:\\Program Files (x86)\\MSBuild\\Xamarin\\Android\\Xamarin.Android.CSharp.targets'
xamarinInstaller = 'C:\\Repo\\Xamarin\\XamarinInstaller.exe'
execute "Xamarin" do
command "#{xamarinInstaller} /quiet /norestart"
not_if { ::File.exist?(xamarinTargets) }
end
如何无头地调用Xamarin安装程序?如何使用Chef安装它?
答案 0 :(得分:2)
这是我必须做的事情,其中一些有点不稳定。
android-sdk
食谱中的xamarin-visualstudio
资源,通过Chocolatey安装chocolatey_package
和chocolatey
。android-sdk.zip
解压缩到$HOME\AppData\Local\Android
,以便在Android SDK *中安装我需要的所有内容这是在Chef代码中:
xamarinTargets = 'C:\\Program Files (x86)\\MSBuild\\Xamarin\\Android\\Xamarin.Android.CSharp.targets'
chocolatey_package 'android-sdk'
chocolatey_package 'xamarin-visualstudio'
ruby_block "Verify Xamarin MSBuild targets exist" do
block do
if not ::File.exist?(xamarinTargets)
raise "Did not find #{xamarinTargets} which was supposed to have been created by the Xamarin install"
end
end
end
homeDir = "C:\\Users\\#{ENV['User']}"
androidDir = "#{homeDir}\\AppData\\Local\\Android"
androidSdk = "#{androidDir}\\android-sdk"
androidSdkZip = "C:\\Repo\\Android\\android-sdk.zip"
adbExe = "#{androidSdk}\\platform-tools\\adb.exe"
seven_zip_archive "Android SDK API level 15" do
path androidDir
source androidSdkZip
overwrite true
not_if { ::File.exist?(adbExe) }
end
ruby_block "Verify Android adb.exe exists" do
block do
if not ::File.exist?(adbExe)
raise "Did not find #{adbExe} which was supposed to have been created by the Android SDK install"
end
end
end
registry_key 'HKEY_USERS\\S-1-5-18\\Software\\Novell\\Mono\ for\ Android' do
values [{
:name => "AndroidSdkDirectory",
:type => :string,
:data => androidSdk
}]
recursive true
action :create
end
*在我通过Chef调用时,我无法让我的生活android update sdk
工作。似乎Android SDK Manager甚至不会非法运行,除非它能够检测到它是由用户运行的?不确定,但最后无奈之下,我手动运行命令来安装必要的SDK(我需要API级别15)并构建工具:
android update sdk --no-ui --all --filter "tools,platform-tools,build-tools-23.0.3,android-15"
然后我获取了生成的$HOME\AppData\Local\Android\android-sk
目录并将其压缩以生成"预制android-sdk.zip
"如上所述。