【问题标题】:run release tasks selectively based on project code changes根据项目代码更改有选择地运行发布任务
【发布时间】:2018-04-30 15:00:33
【问题描述】:

我们使用 VSTS 进行构建和发布管理,并使用 CI/CD。通常,我们的解决方案由一个 Web 应用程序项目和一个数据库项目组成。

我们当前的发布任务使应用程序脱机(使用 app_offline.htm),发布数据库,然后发布 Web 应用程序。发布数据库项目通常不会导致任何更改,因为由于 CI/CD,我们更新 Web 应用程序上的代码比更改数据库架构要频繁得多。

有没有办法只在我们的 git 存储库中检测到数据库项目代码发生更改时才运行数据库发布任务(使用 WinRM)?

编辑:这本身不是问题,因为通常当 DACPAC 发布时,不会有任何活动。但是,我一直要求使用 /p:BackupDatabaseBeforeChanges=true 标志备份数据库 - 即使没有更改,它似乎也会备份数据库。这是大型数据库的问题。

【问题讨论】:

    标签: continuous-integration azure-devops continuous-deployment azure-pipelines-release-pipeline winrm


    【解决方案1】:

    简单的方法是您可以将 Web 项目和数据库项目分离为两个构建定义。

    1. 创建新的构建定义
    2. 在触发器选项卡中启用持续集成
    3. 指定路径过滤器以包含数据库项目
    4. 修改 Visual Studio 构建任务,在 MSBuild Arguments 框中指定 /t:[database project name] 参数以仅构建数据库项目
    5. Web 项目的相同步骤
    6. 创建新的相关定义
    7. 为前两个构建定义添加工件并启用持续部署触发器
    8. 添加两个环境(例如数据库、Web)
    9. 打开环境(例如数据库)的预部署条件
    10. 启用Artifact过滤器并选择对应的artifact(例如数据库构建artifact),指定构建分支(可以指定*,表示所有分支)
    11. 添加任务以仅在此环境中部署数据库
    12. Web 环境的相同步骤

    【讨论】:

    • 这很好.. 除非我发布时,我在 Web 应用程序上应用了一个不错的“应用程序脱机”文件,因此用户知道正在进行更改。如果对两个项目进行更改并提交,则构建和发布都将启动,但我无法假设在部署 Web 项目时删除“应用脱机”文件是安全的,因为 db 项目可能仍然正在部署。还有其他方法吗?
    • @benpage 在数据库环境中添加Azure App service management task,在部署数据库前停止应用服务,部署后重新启动。
    • 我没有使用 Azure 应用程序。我正在使用 Windows 服务器。
    • 使用IIS Web App Manage 停止网站。
    • 好的,我认为有些误解。我不想停止网站。我想显示 app_offline.htm 文件。我能做到的。但是,无论我如何做,问题仍然存在,如果我使用同时运行的两个版本,则无法确定两者何时完成。有没有一种解决方案,我可以只使用一个版本并过滤我的发布任务或其他什么?
    【解决方案2】:

    答案是——我想要的完全是不可能的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      • 2020-02-05
      • 2010-10-30
      • 1970-01-01
      相关资源
      最近更新 更多