用于运行进程的 Azure DevOps 管道

Posted

技术标签:

【中文标题】用于运行进程的 Azure DevOps 管道【英文标题】:Azure DevOps pipeline for running processes 【发布时间】:2021-11-25 03:38:34 【问题描述】:

我目前正在做一个没有 CI/CD 的项目,一切都是通过手动复制完成的! 我有一个 .Net 项目,它基本上在我的服务器上作为服务运行,现在使用手动复制过程我必须终止该作业,并复制新的 dll 或 exe 并重新启动,否则我会收到该过程的错误正在运行并且无法删除/替换它。

使用 Azure DevOps 管道时会发生什么?我会遇到同样的问题吗?我在网上找不到太多关于此的信息。

【问题讨论】:

如果您需要在映射到进程时替换可执行映像,那么谁来尝试替换它并不重要。由于相同的原因,所有尝试都会失败。现在很明显,您的 CD 程序不仅仅是复制文件。复制文件不会神奇地启动进程。由于您避免谈论那部分,因此我们确实无能为力。 我对我避免谈论的内容感到困惑。那么我的程序的工作方式就是我需要做的就是复制一些新的dll,之后我不需要做任何事情!因此,如果我打开了一个文本文件并使用 git 拉取该文本文件的新版本,它不会失败,它实际上会告诉用户重新加载,因为文件已更改,但如果我打开了一个文本文件并尝试手动复制该文本文件的不同版本来代替它,Windows 会抱怨“用户已打开它”或“进程正在使用中”,所以我只是想知道 Azure DevOps 管道在这种情况下会做什么跨度> 我怀疑 Azure DevOps 是否打开了任何文本编辑器,所以我不知道您的想法是什么。 这只是一个随机的例子。我只是想知道 Azure 的副本是像 windows 一样工作还是像 git 一样工作......现在我对这里发生的事情感到困惑,也许我不了解这里的基本原理 无论谁在复制文件,它最终都必须调用操作系统,例如 CopyFile 实现之一。 Azure、Git 或其他随机程序是否执行此操作并不重要。最终,由操作系统决定是否可以执行该操作。 【参考方案1】:

正如您在以下链接的信息中所见,总而言之,CI/CD 工具旨在自动化部署新版本代码/应用程序(以及其他目标)所需执行的所有操作。您现在正在手动执行这些操作,CI/CD 将代表您执行这些操作。大多数 CI/CD 的云解决方案旨在运行,避免对应用程序的可用性产生任何影响。请查看以下链接,第一个用于根概念,第二个主要用于 Azure Dev Ops:

Continuous integration and continuous delivery explained Design a CI/CD pipeline using Azure DevOps

【讨论】:

不幸的是,如果另一个用户打开了文件或进程正在运行,我是否能够只使用副本(可能是这个docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/…)来复制并拥有进程只是在复制后重新加载,或者如果我遇到错误说由于进程正在运行而不允许该操作(这就是当您手动尝试执行此操作时会发生的情况,因此您必须停止该进程,复制新文件并重新启动) 那些策略可以由你设置,例如,什么时候做,在什么情况下不停止和/或重启进程,时间等。管道,至少在微软的案例,由您设计,一旦执行,它将弄清楚如何运行 CI/CD 以完成您的设置和条件。 所以我主要是问这个问题,因为我的程序的工作方式就是我需要做的就是复制一些新的 dll,之后我不需要做任何事情!因此,如果我打开了一个文本文件并使用 git 拉取该文本文件的新版本,它不会失败,它实际上会告诉用户重新加载,因为文件已更改,但如果我打开了一个文本文件并尝试手动复制该文本文件的不同版本来代替它,Windows 会抱怨“用户已打开它”或“进程正在使用中”,所以我只是想知道 Azure DevOps 管道在这种情况下会做什么跨度>

以上是关于用于运行进程的 Azure DevOps 管道的主要内容,如果未能解决你的问题,请参考以下文章

Azure DevOps 管道 VS 测试失败。所有这些单元测试都在本地通过

用于 Azure SQL Always Encrypted 数据库问题的 Azure DevOps CI/CD 管道

如何在 azure devops YAML 管道中将单个代理用于多个作业/阶段

在 Azure DevOps 中使用构建管道运行 Google 测试

使用调度程序和变量组运行 Azure DevOps CI 管道

在 Azure DevOps 发布管道中运行 Java Selenium 测试