- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有时首选和/或需要在单个服务器上托管数十个应用程序。不是说这是“对”或“错”,我只是说它发生了。
此配置的缺点是出现错误消息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 以等待一个部署完全完成,然后再开始下一个部署?
最佳答案
在深入研究答案之前,首先要了解为什么会出现该消息,这一点很重要。每次在部署目标上运行一个步骤时,触手都会创建一个“Mutex”以防止其他项目干扰它。一个早期的用例是在部署期间更新 IIS 元数据库。在某些情况下,并发更新会导致随机错误。
我们已经看到互斥体是延迟原因的情况。互斥量是按步骤应用的,而不是按部署应用的。通常会看到 Octopus 在部署之间“跳跃”的情况。根据并发部署的数量,这可能会减慢部署速度。自然的想法是完全禁用互斥量。
可以通过添加变量 OctopusBypassDeploymentMutex
并将其设置为 True
来禁用互斥锁。该变量可以存在于特定项目或变量集中。
有关该变量作用的更多详细信息,请参见 document .如果您确实禁用互斥锁,请对其进行测试并监控是否有任何故障。在大多数情况下,我们没有看到禁用互斥锁的问题,但它时常发生。它取决于许多其他因素,例如应用程序类型和 Windows 版本。
另一种选择是使用 deploy a release step 协调项目.通常,当部署的项目是同一应用程序套件的一部分时,这种方法效果最好。在下面的示例屏幕截图中,我有五个“部署”项目:
Unleash the Kraken
项目协调这些项目的部署。
它通过使用 Deploy a Release
步骤来实现。首先它启动所有基础架构,然后部署应用程序。
如果服务器托管 50 个不同的应用程序,这将无法正常工作。
最后一个选项是在每个项目开始时包含一个步骤,该步骤会点击 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/
我们有一个项目可以使用特定 DLL 的两个不同版本。我们需要将其部署在两个不同的环境中。使用哪个版本的 DLL 应取决于环境。 一种建议的解决方案是复制整个代码库并基于这两个代码库创建 Octopus
我们正在测试 Octopus Deploy 2.0 (OD) 以部署 Web 服务、Windows 服务和 Citrix 应用程序。 快速提问:使用配置转换时,是否可以使用参数来指示应该使用哪个配置文
我看到一个范围为环境的编辑变量权限。但是,似乎谁负责设置项目,谁就会负责创建变量,而其他一些安全实体将只负责修改值,特别是安全值。这可能吗? 编辑:再补充一点,我想我是在根据项目变量集请求权限。只有拥
问题: 我有一个手动干预步骤,其中包含执行部署的人员要遵循的文本步骤。 我想传递目标服务器的名称,这样这个人就不需要查找目标服务器名称。 例如,如下所示,我需要将它们解压缩到目标服务器上的某个位置。
这是一个系统 Octopus 部署变量: #{Octopus.Action[Deploy To Server].Output.Package.InstallationDirectoryPath} 文本
我知道目前有一个 feature request对于这样的事情,但我希望使用当前版本(1.6)有某种解决方法 我们从 TFS 中的开发分支为我们的开发和测试环境构建,并从 TFS 中的发布分支为我们的
有时首选和/或需要在单个服务器上托管数十个应用程序。不是说这是“对”或“错”,我只是说它发生了。 此配置的缺点是出现错误消息Waiting for the script in task [TASK I
我们正在运行 OD 1.6。 我想使用 OD 变量来更改不在应用设置部分中的值,例如 session 状态提供程序。 我知道我可以为此使用转换,但作为一家公司,我们更喜欢使用 OD 变量而不是转换,因
我们目前正在尝试将部署新的 ASP.NET 项目与 Octopus 集成在一起,我想知道是否有人尝试过使用 Octopus 来部署经典的 ASP 站点? 我知道这是可能的,而且我知道理论上该怎么做,但
我试图在“运行脚本”步骤中为内置发行说明变量赋值。 $OctopusParameters["Octopus.Release.Notes"] = "Some release notes" 在下一步“发送
我正在使用 TeamCity 和 Octopus Deploy 来部署 Asp.Net 应用 我想显示部署应用程序时使用的版本号 在 teamcity 中,我使用 vcs 编号生成版本号 如何从 as
我想使用 Octopus Deploy 应用 web.config 转换,但仅限于生产环境。 我不想为我们所有的其他环境创建单独的配置。 目前我正在使用以下自定义表达式,但它不应用转换 最佳答案 您是
我正在使用 Octopus Deploy 根据本指南将 ASP.NET 5 网站部署到 Azure:https://gist.github.com/alfhenrik/ee08dbb1fb6e2bc7
我正在将 Web 应用程序部署到 DEV、TEST 和 PROD 环境中。 Octopus 服务器上的变量之一保存 appPool 用户和密码。 开发人员在 DEV 中编辑此值是有意义的,但他们不应该
有谁知道是否可以使用 Octopus Deploy 部署到 VPN 中的服务器? 如果触手在 VPN 中的服务器上,Octopus Deploy 有没有办法连接/断开连接到 VPN? 干杯 更新 我们
我们有 Octopus-2.0。 我们将服务凭证(它们是每台机器的)存储在 octopus 用户变量中。 我还需要在 SQL 服务器中创建这些登录名。 例如服务登录名“machine1_service
我有点失职,发现 Octopus 虽然很神奇,但在升级之前关闭你的网络应用程序并没有做任何可爱或聪明的事情。 在我们的解决方案中,我们有两个依赖同一个数据库的 Web 应用程序(一个网站和一个单独的
我想指定一个环境变量,以便我可以验证它是否是阶段/生产/开发环境(ASPNETCORE_Environment 或自定义环境)。八达通是默认这样做还是我必须手动设置? 最佳答案 在部署期间,变量#{O
您好,我是 Octopus 部署的新手。 我创建了一个 nupkg 并尝试将其部署到 IIS 服务器。 我遇到以下错误。 There was a problem with your request.
我定义了一个包含两个步骤的流程: 部署 IIS 网站 执行脚本文件 流程的第一步执行没有任何问题。我能够将 nuget 包上传到 Octopus Server 的内置包存储库并将其部署到我的 IIS
我是一名优秀的程序员,十分优秀!