C# 通过build.cake而不是Azure Devops发布构建工件 是否可以通过build.cake脚本将构建工件发布到Azure Devops/TFS 转换为cake脚本时,应在build.cake脚本或Azure DevOps管道中的何处配置发布构建工件的责任

C# 通过build.cake而不是Azure Devops发布构建工件 是否可以通过build.cake脚本将构建工件发布到Azure Devops/TFS 转换为cake脚本时,应在build.cake脚本或Azure DevOps管道中的何处配置发布构建工件的责任,c#,azure,tfs,azure-devops,cakebuild,C#,Azure,Tfs,Azure Devops,Cakebuild,为了在构建和发布管道中实现版本控制,我们决定将(gitversion、clean、build、tests等)任务转移到存储在每个存储库中的cake脚本来处理 有没有办法用cake.build中的任务替换该任务?我已经搜索了Azure和cake的官方文档,但似乎找不到解决方案。 第一个任务是,将构建工件复制到一个暂存目录是可能的,但是,发布工件是它变得复杂的地方 目前,我们的build.cake中有一个片段 Task("Copy-Bin") .WithCriteria(!isLocalBu

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

有没有办法用cake.build中的任务替换该任务?我已经搜索了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
    });
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");
    });
解决方案

更新的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
    });
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");
    });

Yes Cake支持使用其内置的tfbuild系统提供程序上载工件

Task("UploadArtifacts")
 .IsDependentOn("ZipArtifacts")
 .WithCriteria(BuildSystem.IsRunningOnAzurePipelinesHosted)
 .Does(() => {
  TFBuild.Commands.UploadArtifact("website", zipFileName, "website"); 
  TFBuild.Commands.UploadArtifact("website", deployCakeFileName, "website"); 
});

TFBuild中记录的所有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"); 

 });

谢谢你的帮助!我将使用建议的答案用一段代码更新我的问题。