- 是否可以通过build.cake脚本将构建产物发布到Azure Devops/TFS?
- 在转换为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");
});