如何告诉Octopus Deploy等待同一台计算机上的另一部署完成?

bwalk2895

有时,最好在单个服务器上托管和/或托管多个应用程序。我不是说这是“对”还是“错”,我只是说这是事实。

此配置的缺点是,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 the same time每当在同一计算机上运行多个部署时,就会出现错误消息看来Octopus Deploy正在战斗。

如何配置八达通部署以等待一个部署完成才开始下一个部署?

bwalk2895

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

选项1:禁用互斥

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

通过添加变量OctopusBypassDeploymentMutex并将其设置为,可以禁用互斥锁True该变量可以存在于特定项目或变量集中。

通过触手互斥

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

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

另一个选择是使用部署发布步骤来协调项目通常,当要部署的项目属于同一应用程序套件的一部分时,这最有效。在下面的示例屏幕快照中,我有五个“部署”项目:

  • Azure工作者IaC
  • 数据库工作者IaC
  • Kubernetes工作者IaC
  • 脚本工作者IaC
  • 八度研究

该项目负责Unleash the Kraken协调那些项目的部署。

释放海妖

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

部署发布步骤

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

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

最终的选择是在每个项目的开始处包含一个步骤,该步骤会命中API,以检查针对部署目标的针对部署目标的活动版本。如果找到活动的部署,请等待直到完成。

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

您可以Machine Id通过从中提取值来获得Octopus.Deployment.Machines您可以Space Id通过从中提取值来获得Octopus.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
      }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

来自分类Java

如何使用Java通过网络将文件从一台计算机传输到另一台计算机?

来自分类Java

如何将Java程序复制到另一台计算机?

来自分类Dev

Windows 8中的Metro应用程序如何与同一台计算机上的后端桌面应用程序通信?

来自分类Dev

我如何从EPEL的同一台计算机上安装2个不同版本的Java

来自分类Dev

如何在另一台计算机上使用python虚拟环境

来自分类Dev

Ansible中,如何在同一台远程计算机上同步2个文件夹?

来自分类Dev

如何在一台计算机上运行多个IPFS节点?

来自分类Dev

一台计算机上如何有2个git用户?

来自分类Dev

如何访问安装在另一台计算机上的CouchDB?

来自分类Dev

如何在同一台计算机上配置多个ASPNETCORE_ENVIRONMENT?

来自分类Dev

如何在同一台计算机上运行多个Graph Engine实例?

来自分类Dev

如何将Docker容器从一台计算机迁移到另一台计算机?

来自分类Dev

如何在同一台计算机上运行2个(或更多)Wildfly实例?

来自分类Dev

如何将Docker映像转移到另一台计算机?

来自分类Dev

我如何在一台开发计算机上拥有多个git帐户?

来自分类Javascript

TestCafe:如果用户从另一台计算机登录,如何测试注销

来自分类Dev

如何从一台计算机访问同一网络上的另一台计算机的本地主机服务器

来自分类Dev

如何使用FCM从一台计算机向另一台计算机使用Angular2发送通知

来自分类Dev

如何与另一台计算机上的设备进行远程appium会话

来自分类Dev

如何在未安装Python的另一台计算机上运行Python.exe?

来自分类Dev

如何将变量从JavaScript表单传递到python(在同一台计算机上)?

来自分类Dev

如何使用Expect从一台计算机登录到另一台计算机时运行命令

来自分类Dev

如何在Intelliji中将一个项目从一台计算机传输到另一台计算机?

来自分类Dev

如何在同一台计算机上使用和克隆github和AWS(CodeCommit)仓库?

来自分类Dev

一个人如何将VS,C ++,OpenGL应用程序部署到另一台计算机?

来自分类Dev

如何在另一台计算机上运行我编写的交流程序

来自分类Dev

如何获取在另一台计算机上运行的作业的状态?

来自分类Dev

如何在同一台计算机上同时使用Flutter stable和dev SDK?

来自分类Dev

在同一台计算机上同时运行Master和Agent时,Jenkins如何处理资源?

TOP 榜单

热门标签

归档