通过build.cake发布构建产物,而不是通过Azure Devops

5
  1. 是否可以通过build.cake脚本将构建产物发布到Azure Devops/TFS?
  2. 在转换为cake脚本时,将发布构建产物的责任配置在build.cake脚本还是Azure DevOps管道中?

为了实现构建和发布管道的版本控制,我们决定将所有任务(如gitversion、clean、build、tests等)移动到存储在每个代码库中的cake脚本中处理。

是否有办法使用cake.build中的任务替换Azure DevOps中的publish build artifact任务?我已经搜索过Azure和cake的官方文档,但似乎找不到解决方案。第一个任务——将构建产物复制到暂存目录——是可以实现的,但是发布构建产物则变得更加复杂。

目前,以下是我们的build.cake片段。

Task("Copy-Bin")
    .WithCriteria(!isLocalBuild)
    .Does(() =>
    {
        Information($"Creating directory {artifactStagingDir}/drop");
        CreateDirectory($"{artifactStagingDir}/drop");
        Information($"Copying all files from {solutionDir}/{moduleName}.ServiceHost/bin to {artifactStagingDir}/drop/bin");
        CopyDirectory($"{solutionDir}/{moduleName}.ServiceHost/bin", $"{artifactStagingDir}/drop/bin");
        // Now we should publish the artifact to TFS/Azure Devops
    });

解决方案

更新的 build.cake 文件的一部分代码片段。

Task("Copy-And-Publish-Artifacts")
    .WithCriteria(BuildSystem.IsRunningOnAzurePipelinesHosted)
    .Does(() =>
    {
        Information($"Creating directory {artifactStagingDir}/drop");
        CreateDirectory($"{artifactStagingDir}/drop");
        Information($"Copying all files from {solutionDir}/{moduleName}.ServiceHost/bin to {artifactStagingDir}/drop/bin");
        CopyDirectory($"{solutionDir}/{moduleName}.ServiceHost/bin", $"{artifactStagingDir}/drop/bin");
        Information($"Uploading files from artifact directory: {artifactStagingDir}/drop to TFS");
        TFBuild.Commands.UploadArtifactDirectory($"{artifactStagingDir}/drop");
    });
2个回答

4
Cake支持使用其内置的tfbuild构建系统提供程序上传工件。
Task("UploadArtifacts")
 .IsDependentOn("ZipArtifacts")
 .WithCriteria(BuildSystem.IsRunningOnAzurePipelinesHosted)
 .Does(() => {
  TFBuild.Commands.UploadArtifact("website", zipFileName, "website"); 
  TFBuild.Commands.UploadArtifact("website", deployCakeFileName, "website"); 
});

所有TFBuild命令的文档在cakebuild.net/api/Cake.Common.Build.TFBuild/TFBuildCommands中记录。


谢谢您的帮助!我将使用建议的答案更新我的问题,并附上代码片段。 - Emir Husic

2

TFBuild已更名为AzurePipelines,因此更新代码为:

Task("PublishArtifacts")
.WithCriteria(BuildSystem.IsRunningOnAzurePipelinesHosted)                                                               
.IsDependentOn("ZipArtifacts") //If you have different task to zip the artifacts
.WithCriteria(BuildSystem.IsRunningOnAzurePipelinesHosted)
.Does((Context) => {

 AzurePipelines.Commands.UploadArtifact("FolderNameWhereTheZipIs","ZippedFileName"); 

 });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接