sách gpt4 ai đã đi

Làm thế nào để yêu cầu Octopus Deploy đợi cho đến khi một lần triển khai khác trên cùng một máy hoàn tất?

In lại 作者:行者123 更新时间:2023-12-04 10:33:27 34 4
mua khóa gpt4 Nike

有时首选和/或需要在单个服务器上托管数十个应用程序。不是说这是“对”或“错”,我只是说它发生了。

此配置的缺点是出现错误消息Waiting for the script in task [TASK ID] to finish as this script requires that no other Octopus scripts are executing on this target at same time每当对同一台机器的多个部署正在运行时。似乎 Octopus Deploy 正在 self 斗争。

如何配置 Octopus Deploy 以等待一个部署完全完成,然后再开始下一个部署?

1 Câu trả lời

在深入研究答案之前,首先要了解为什么会出现该消息,这一点很重要。每次在部署目标上运行一个步骤时,触手都会创建一个“Mutex”以防止其他项目干扰它。一个早期的用例是在部署期间更新 IIS 元数据库。在某些情况下,并发更新会导致随机错误。

选项 1:禁用互斥锁

我们已经看到互斥体是延迟原因的情况。互斥量是按步骤应用的,而不是按部署应用的。通常会看到 Octopus 在部署之间“跳跃”的情况。根据并发部署的数量,这可能会减慢部署速度。自然的想法是完全禁用互斥量。

可以通过添加变量 OctopusBypassDeploymentMutex 并将其设置为 ĐÚNG VẬY 来禁用互斥锁。该变量可以存在于特定项目或变量集中。

By Passing The Tentacle Mutex

有关该变量作用的更多详细信息,请参见 tài liệu .如果您确实禁用互斥锁,请对其进行测试并监控是否有任何故障。在大多数情况下,我们没有看到禁用互斥锁的问题,但它时常发生。它取决于许多其他因素,例如应用程序类型和 Windows 版本。

选项 2:利用部署发布步骤

另一种选择是使用 deploy a release step 协调项目.通常,当部署的项目是同一应用程序套件的一部分时,这种方法效果最好。在下面的示例屏幕截图中,我有五个“部署”项目:

  • Azure Worker IaC
  • 数据库 worker IaC
  • Kubernetes Worker IaC
  • 脚本 worker IaC
  • OctoStudy

Unleash the Kraken 项目协调这些项目的部署。

Unleash the Kraken

它通过使用 Deploy a Release 步骤来实现。首先它启动所有基础架构,然后部署应用程序。

Deploy a Release Step

如果服务器托管 50 个不同的应用程序,这将无法正常工作。

选项 3:利用 API 检查正在运行的部署

最后一个选项是在每个项目开始时包含一个步骤,该步骤会点击 API 以检查部署目标的事件发布。如果找到事件部署,则等待它完成。

您可以通过点击端点https://[YOUR URL]/api/[SPACE ID]/machines/[Machine Id]/tasks?skip=0&name=Deploy&states=Executing%2CCancelling&spaces=[空间 ID]&includeSystem=false。这将告诉您正在为特定机器运行的所有事件任务。

您可以通过从 Octopus.Deployment.Machines 中提取值来获取 Machine Id。您可以通过从 Octopus.Space.Id 中提取值来获取 Space Id.

此方法的伪代码可能如下所示(我不包括实际代码,因为您的要求可能非常不同)。

activeDeployments = true

while (activeDeployments)
{
activeDeployments = false
foreach(machineId in Octopus.Deployment.Machines)
{
activeTasks = https://[YOUR URL]/api/[Octopus.Space.Id]/machines/[Machine Id]/tasks?skip=0&name=Deploy&states=Executing%2CCancelling&spaces=[Octopus.Space.Id]&includeSystem=false

if (activeTasks.Count > 0)
{
activeDeployments = true
}
}

if (activeDeployments = true)
{
Sleep for 5 seconds
}
}

关于octopus-deploy - 如何告诉 Octopus Deploy 等到同一台机器上的另一个部署完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60303864/

34 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com