如何从 VSTS CI 管道的解决方案中为每个项目单独发布工件?

How to publish artifacts separately for each project in solution from VSTS CI pipeline?

在我的解决方案中,我有两个项目(一个 Asp.net MVC 和一个 Windows 服务)。我想创建 CI/CD 管道以在不同的 VM 上部署 Web 应用程序和 windows 服务。但要实现这一点,我的 CI 管道应该能够为两个项目分别发布工件,然后我可以将这些工件提供到 CD 管道中进行部署。如何在 CI 管道中单独发布所有项目的工件?

PS:如果我创建两个解决方案,每个解决方案仅包含一个项目,并分别创建 CI/CD 管道,则一切正常。但是我想用上面提到的具有多个项目的解决方案来实现它。

您有多种方法可以实现。
您可以使用适当的参数创建针对项目的多个构建定义,而不是构建步骤中的解决方案。
或者您可以拥有一个包含多个构建步骤的构建定义。
之后,在发布方面,您可以利用具有多个步骤的一个发布定义或多个发布定义。

您可以使用多个发布任务在单个构建定义中创建多个工件。

例如,您有以下作为单个项目的当前工件,包括 _PublishedWebsites\MVS5WebApp(XCopy 可部署网站)和 _PublishedWebsites\MVS5WebApp_Package(网络部署包)。

如果你想把这两个分开,分成两个工件,你可以使用如下所示的两个Publish Artifact任务,每个任务指定确切的发布路径(这个路径不支持通配符,你只需要指定文件夹你需要发布)

这将为您提供如下所示的输出。

在这个例子中,我只使用了 Publish Artifacts 任务,并使用一个网站项目创建了两个工件。您可以为您的两个项目场景做同样的事情。如果您想在发布前使用通配符过滤更多文件,您可以根据需要多次使用 "Copy File" 任务。

如果您在构建管道中使用 '.net core' 任务,那么 取消选中 'Publish web projects' 之后的复选框命令文本框。

然后它会自动为解决方案中的每个项目单独创建与每个项目文件同名的发布工件。