我使用带有 powershell 脚本的 Octopus 自定义模板来按时间或按计数删除旧部署。但是,它依赖于在实际部署步骤之后运行,以便它可以访问该步骤的输出变量。例如,
DeploymentFolder:
#{Octopus.Action[Deployment Step Name].Output.Package.InstallationDirectoryPath}
例如,当您尚未用完磁盘空间时,这非常有用。但是,当磁盘空间不足时(因为您之前没有运行此步骤),并且由于磁盘空间不足,Octopus 无法部署新版本,因此您无法运行删除旧文件步骤。 (我知道可以更改 Octopus 参数,因为它被认为磁盘空间太小,但我不想这样做。)这还有一个问题,如果您想输入硬编码路径(假设您遇到了临时问题)使用您的脚本,只需要删除一堆旧部署,但目前没有从服务器手动删除它们所需的权限),很容易意外地遗漏最终版本号文件夹并拥有底层脚本变得混乱。
是否有某种方法可以获取当前环境的部署文件夹,并将其与我的 NuGet 包名称(以及部署文件夹名称中的任何其他部分)结合起来,以便我可以提前计算出预期的部署文件夹?
实际使用的部署文件夹是
E:\Octopus\Applications\LifeCycle\NugetPackageName
。
我认为我可以使用
NugetPackageName
获得
$OctopusParameters['Octopus.Action[Deployment Step Name].Package.NuGetPackageId']
(尽管我不确定,因为 Octopus.Action.Package.NuGetPackageId
被列为“操作级变量”,因此在步骤运行之前可能无法使用.如果必须的话,我愿意对 NuGet 包名称进行硬编码。 关于
LifeCycle
部分,我不知道这是否真的是一个
LifeCycle
的名字。两者匹配可能是巧合。我不知道。对于我的一生,我无法弄清楚这是从哪里来的。我也无法弄清楚
E:\Octopus\Applications\
从哪里来,这样我就可以自动获取这个值,而不是硬编码它。
$OctopusParameters['Octopus.Action[Deployment Step Name].Package.NuGetPackageId']
您可以从名为
E:\Octopus\Applications\
的环境变量中获取
TentacleApplications
:$myRootDir = $env:TentacleApplications
Octopus 生成一个离线包放置文件,其中包含一个包含以下内容的 PowerShell 脚本: $env:TentacleApplications = "C:\Temp"
虽然我使用了部署前和部署后脚本,但我目前在持续影响或重置 TentacleApplications 方面遇到了挑战。虽然我可以使用部署后脚本临时修改它,但最终 PowerShell 文件保留 $env:TentacleApplications = "C:\Temp."
在此寻求有关此事的帮助是否合适?