在Azure Devops上用假装建造

显示带有出租车条纹的黄色大型巴士的墙壁infront

我很喜欢 极好 - Xamarin附近的包装器.Forms允许您用F#编写功能uis。第一次看着这个项目时,我注意到的是正在建立的 送货员特拉维斯。我问自己:为什么使用两个CI系统来编译一个项目?经过一些进一步的挖掘,我发现Apveyor上没有托管麦斯科斯代理。另一方面,Travis确实搭配Windows和MacOS的代理,但没有安装在代理上的Xamarin Toolchain。在每次运行中安装Xamarin Toolchain会导致30分钟超过30分钟的构建时间。自从 Azure Devops. 支持在Windows和MacoS上的建筑物我以为我会给它一个Go并设置一条管道来构建很棒 - 我的意思是它有多难?很难写一个博客帖子,总结克服陷阱的步骤

TLDR:如何在Azure Devops上运行虚假脚本

很棒的用途 伪造的 要执行构建,测试并创建Nuget软件包。假装是一种用于编写构建脚本的电源完整工具。假也是一个 .NET核心CLI工具 这是设计用于从命令行安装和执行,因此在任何构建服务器上运行都应该非常适合。

安装假

Azure Devops构建代理商不带假的预装。由于假是.NET核心CLI工具,这没问题。以下命令应解决此问题:

dotnet tool install fake-cli -g

不幸在安装失败后执行假。这是因为Azure Devops构建代理的安装目录与.NET核心的标准安装位置不同 - 为什么?你问,给出的答案是安全。在Windows上,我们可以通过将伪造到Workspace目录来规避这一事实:

dotnet tool install fake-cli --tool-path .

在MacOS(和Linux)下这种方法仍然失败。这 建议解决方案 is to set DOTNET_ROOT. I ended up with the following lines to be executed on the macOS agent:

export DOTNET_ROOT=$HOME/.dotnet/
export PATH=$PATH:$HOME/.dotnet/tools:/Library/Frameworks/Mono.framework/Versions/Current/Commands
dotnet tool install fake-cli -g

在Linux上,这种方法必须再次采用 - 去图。我最终有了这些线条:

export PATH=$PATH:$HOME/.dotnet/tools:/Library/Frameworks/Mono.framework/Versions/Current/Commands
dotnet tool install fake-cli -g

现在,您应该能够在Azure Devops上运行您的假脚本

使用纯素覆盖包

This part is not directly related to FAKE but is something I stumbled over while running on Azure DevOps. One test script was referencing the NuGet packages via the global NuGetFallbackDirectory 和 was looking for them under the default location. Under macOS the location is in the users home directory, so adopting the path as follows did the trick:

let tfsEnvironment = Environment.GetEnvironmentVariable("TF_BUILD")
if (String.IsNullOrEmpty(tfsEnvironment)) then
    "/usr/local/share/dotnet/sdk/NuGetFallbackFolder"
else
    let homepath = Environment.GetEnvironmentVariable("HOME")
    Path.Combine(homepath, ".dotnet/sdk/NuGetFallbackFolder")

Note that the variable TF_BUILD is expected to only be set on TFS/VSTS/Azure DevOps. This will allow the script to fall back to the default location should it be executed on a developers machine.

但为什么偶然烦恼?

从工作CI迁移到另一个工作的动机是什么?你在做什么,因为你是微软MVP吗?

这些是我在与同事交谈时得到的问题,我努力在Azure Devops上建造很棒。我认为汽车和特拉维斯是一个伟大的工具,他们已经表明他们是由任务建设和测试很棒。除了因为我好奇,它可能是多么困难,有两个方面为什么我想尝试将构建迁移到Azure DevOps:

  1. 合并建造,有两个地方做一件事总是带着开销。
  2. 另一个是通过不需要安装Xamarin来看,看到建设时间的减少了多少。

所以这里是在建立时间和之后的构建时间之间的比较:

CI平台代理操作系统建造测试时间(分钟)
特拉维斯苹果系统~30-32
Azure Devops.苹果系统~13-14
送货员视窗~4
Azure Devops.视窗~6

现在要记住,麦克斯和窗户上的构建并行耗尽。所以如果是对接器和特拉维斯的建立时间将是30-32分钟。使用Azure Devops,这可以降至13-14分钟。

我争辩说,将两个构建脚本合并到一个和削减构建时间,大致成于一半是良好的争论,为什么Azure Devops似乎是一个更好的适合精美。然后再次遇到了一些痛苦,让.NET CLI工具运行,我希望Azure Devops团队将在未来解决 - 是来自同一公司的产品 咳嗽

另一个方面在未来在Linux上具有构建,因为自030自030自从0.30以来,这将很好地在Linux上编译它。在撰写本文时,在构建过程中仍有几个扭结,但没有任何不能在未来解决。

谢谢

谢谢 蒂莫斯拉利凡里翁斯图尔特郎 对于沿途的所有提示和提示

Updated: