【发布时间】:2019-02-18 06:32:31
【问题描述】:
我们有一个发布定义,它提供了一堆 asp.net 核心服务以及一个 Angular 应用程序。
大多数服务不会经常更新,所以问题是如何比较工件版本和已经部署到环境中的版本,如果之前已经部署过最新版本,则跳过?
我们有多个环境正在筹备中。
【问题讨论】:
标签: azure-devops azure-pipelines-release-pipeline
我们有一个发布定义,它提供了一堆 asp.net 核心服务以及一个 Angular 应用程序。
大多数服务不会经常更新,所以问题是如何比较工件版本和已经部署到环境中的版本,如果之前已经部署过最新版本,则跳过?
我们有多个环境正在筹备中。
【问题讨论】:
标签: azure-devops azure-pipelines-release-pipeline
我认为这是不可能的,至少在本机上,您可以计算文件哈希并且如果它们匹配则不部署,另一种选择是在构建应用程序时使用路径触发器进行过滤。例如,您的目录结构如下所示:
root
|--app1
|--app2
etc
您可以像这样在 yaml 构建中定义路径过滤器:
trigger:
paths:
include:
- app1/*
- sharedlibs/* (if you have them)
只有在这些目录中的文件发生任何更改时才会触发这种方式构建
【讨论】:
您可以添加额外的发布环境以通过PowerShell检查当前的工件版本(例如Build.SourceVersion,检查variables in release),如果已经成功发布则任务失败。
对于暂存环境,选择 After environment 选项并选择 previous environment。
另一方面,由于您提到大多数服务不经常更新,您可以使用 4c74356b41 的建议来过滤构建,只构建和发布您想要的更改。
【讨论】: