【问题标题】:How to skip releasing a build artifact in Azure VSTS CD pipeline if there is no new version of the build如果没有新版本的构建,如何跳过在 Azure VSTS CD 管道中发布构建工件
【发布时间】:2019-02-18 06:32:31
【问题描述】:

我们有一个发布定义,它提供了一堆 asp.net 核心服务以及一个 Angular 应用程序。

大多数服务不会经常更新,所以问题是如何比较工件版本和已经部署到环境中的版本,如果之前已经部署过最新版本,则跳过?

我们有多个环境正在筹备中。

【问题讨论】:

    标签: azure-devops azure-pipelines-release-pipeline


    【解决方案1】:

    我认为这是不可能的,至少在本机上,您可以计算文件哈希并且如果它们匹配则不部署,另一种选择是在构建应用程序时使用路径触发器进行过滤。例如,您的目录结构如下所示:

    root
    |--app1
    |--app2
    etc
    

    您可以像这样在 yaml 构建中定义路径过滤器:

    trigger:
      paths:
        include:
          - app1/*
          - sharedlibs/* (if you have them)
    

    只有在这些目录中的文件发生任何更改时才会触发这种方式构建

    【讨论】:

    • 谢谢。处理构建。每个构建工件都有一个版本。即使只有一项服务发生了变化,发布总是会提取所有工件的问题。想知道是否有办法知道从管道发布了哪个工件版本。
    • 检查发布环境变量,每个工件都应该有一个变量,但对我来说,您似乎需要为不同的应用程序使用单独的发布管道
    • 但是我们有一个应用程序(Angular SPA)调用多个服务(可以有一个调用链)。因此,如果任何服务代码发生更改,我们就会触发特定于服务的构建和应用程序发布。但是该版本将部署所有服务,因为 Angular 是“主”版本。我看到了如何找出工件版本。有没有办法查看当前部署的版本?我可以进行服务调用以获取它的版本,但应用程序可能会因发布而停止,因此它可能无法正常工作。
    【解决方案2】:

    您可以添加额外的发布环境以通过PowerShell检查当前的工件版本(例如Build.SourceVersion,检查variables in release),如果已经成功发布则任务失败。

    对于暂存环境,选择 After environment 选项并选择 previous environment。

    另一方面,由于您提到大多数服务不经常更新,您可以使用 4c74356b41 的建议来过滤构建,只构建和发布您想要的更改。

    【讨论】:

      猜你喜欢
      • 2020-05-03
      • 2020-11-26
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      • 2021-02-21
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      相关资源
      最近更新 更多