如何使用 Chef 在 Windows 上安装 Xamarin
How to install Xamarin on Windows using Chef
我使用 Chef 配置我的 TeamCity 构建代理(Windows Server 2012 VM),我需要为 Visual Studio/Android 构建安装 Xamarin。对于其他安装程序,我通常使用 /h
、/help
、/?
、-?
、-h
和 --help
来调用它,直到我得到一个告诉我命令行参数的用法对话框。然而,我无法弄清楚 XamarinInstaller.exe
的命令行参数,当我像这样启动它时:
XamarinInstaller.exe /quiet /norestart
因为这些是常见的约定,它似乎只是坐在那里,什么都不做。它应该是下载的东西(当我用 GUI 启动它时它就是这样做的)但是当我在任务管理器中查看以太网使用情况时,没有发生任何事情。我不知道它在哪里写日志或如何知道它是否失败。好像失败了也不会退出
这是我的 Chef 代码:
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 安装它?
这是我必须做的,其中有些有点靠不住。
- 使用
chocolatey
食谱中的 chocolatey_package
资源通过 Chocolatey 安装 android-sdk
和 xamarin-visualstudio
。
- 验证 Xamarin 安装是否按预期工作。
- 将预制的
android-sdk.zip
解压缩到 $HOME\AppData\Local\Android
中,以便在 Android SDK* 中安装我需要的一切
- 验证 Android SDK 安装是否按预期工作。
- 创建注册表项以将 Xamarin 的 Visual Studio 集成指向适当的 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 管理器似乎不会 运行 甚至非图形化,除非它可以检测到它正在被用户 运行 ?!不确定,但最后无奈之下,我运行命令手动安装必要的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
目录压缩成上面提到的 "prefabbed android-sdk.zip
"。
我使用 Chef 配置我的 TeamCity 构建代理(Windows Server 2012 VM),我需要为 Visual Studio/Android 构建安装 Xamarin。对于其他安装程序,我通常使用 /h
、/help
、/?
、-?
、-h
和 --help
来调用它,直到我得到一个告诉我命令行参数的用法对话框。然而,我无法弄清楚 XamarinInstaller.exe
的命令行参数,当我像这样启动它时:
XamarinInstaller.exe /quiet /norestart
因为这些是常见的约定,它似乎只是坐在那里,什么都不做。它应该是下载的东西(当我用 GUI 启动它时它就是这样做的)但是当我在任务管理器中查看以太网使用情况时,没有发生任何事情。我不知道它在哪里写日志或如何知道它是否失败。好像失败了也不会退出
这是我的 Chef 代码:
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 安装它?
这是我必须做的,其中有些有点靠不住。
- 使用
chocolatey
食谱中的chocolatey_package
资源通过 Chocolatey 安装android-sdk
和xamarin-visualstudio
。 - 验证 Xamarin 安装是否按预期工作。
- 将预制的
android-sdk.zip
解压缩到$HOME\AppData\Local\Android
中,以便在 Android SDK* 中安装我需要的一切
- 验证 Android SDK 安装是否按预期工作。
- 创建注册表项以将 Xamarin 的 Visual Studio 集成指向适当的 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 管理器似乎不会 运行 甚至非图形化,除非它可以检测到它正在被用户 运行 ?!不确定,但最后无奈之下,我运行命令手动安装必要的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
目录压缩成上面提到的 "prefabbed android-sdk.zip
"。