【问题标题】:Disable Process Step using API in Octopus Deploy在 Octopus Deploy 中使用 API 禁用流程步骤
【发布时间】:2017-10-15 08:15:10
【问题描述】:

我一直在寻找使用 Octopus API 禁用单个流程步骤的方法。我有一个包含 10 个步骤的项目,我使用 TeamCity 作为 CI 工具。所以我有一个条件,当我运行构建时需要禁用 1 个步骤(无论我想要什么)。我想禁用/跳过特定步骤,同时促进发布。

我能够到达以下无法正常工作的步骤

Add-Type -Path 'Octopus.Client.dll' 

$apikey = 'API-23H4GJ243HG2H3J423433H' # Get this from your profile
$octopusURI = 'http://localhost:9090' # Your server address

$projectName = "Demo" # Name of your project

$endpoint = new-object Octopus.Client.OctopusServerEndpoint $octopusURI,$apikey 
$repository = new-object Octopus.Client.OctopusRepository $endpoint

$Header =  @{ "X-Octopus-ApiKey" = $apikey }

$project = $repository.Projects.FindByName($projectName)

$deploymentProcess = $repository.DeploymentProcesses.Get($project.DeploymentProcessId) 

foreach ($step in $deploymentProcess.Steps) 
{ 
    if($step.Name = "DemoStep") 
    { 
        $step.Actions.IsDisabled = 'True' 
        break 
    } 
} 
$repository.DeploymentProcesses.Modify($deploymentProcess)

或者

$Body = @{ 
         IsDisabled = "True" 
          } | ConvertTo-Json

Invoke-RestMethod -Uri $OctopusURI/api/deploymentprocesses/deploymentprocess-Projects-21/ -Method PUT` 
 -Headers $Header -Body $Body

或者 Octo.exe --skip=stepname 只能在这种情况下工作?

你能帮我解决这个问题吗?

谢谢, 伊姆兰

【问题讨论】:

  • 您是否尝试过使用运行条件并将其设置为变量条件以便使用变量表达式?
  • 好主意。我也从未考虑过将其用于此目的。我将运行条件用于其他步骤。将它用于这些步骤也将解决我的其他问题。我已经使用 Octopus.client 库创建了另一个 Powershell 脚本来远程更新变量,所以看起来我拥有一切。谢谢@benPearce
  • 这对我有用。我还必须使用另一个脚本,用于在升级到生产之前更改变量值后更新变量快照。我还从 Octopus Support 获得了使用 Octopus.Client 禁用流程步骤的工作脚本。我会在答案中发布该脚本。

标签: rest teamcity octopus-deploy


【解决方案1】:

我从 Octopus 支持Support Link 获得了禁用流程步骤的工作脚本,我扩展了该脚本以获得禁用和启用功能。

##SETUP##
$OctopusURL = ""
$APIKey = ""
$ProjectName = ""
$StepName = ""
$DesiredAction = "Enable" #Enable or Disable

##PROCESS#
Add-Type -Path 'Octopus.Client.dll'

$endpoint = new-object Octopus.Client.OctopusServerEndpoint $OctopusURL, $apikey 
$repository = new-object Octopus.Client.OctopusRepository $endpoint

$Project = $repository.Projects.FindByName($ProjectName)
$deploymentProcess = $repository.DeploymentProcesses.Get($project.DeploymentProcessID)

$WasDeploymentProcessModified = $false

foreach ($step in $deploymentProcess.Steps) {
    foreach ($Action in $step.actions) {
        if ($Action.name -eq $StepName) {
            "Step [$StepName] found"
            if ($DesiredAction -eq "Disable") {
                if ($Action.IsDisabled -eq $false) {
                    "Disabling step [$StepName]"
                    $Action.IsDisabled = $true
                    $WasDeploymentProcessModified = $true
                }

                Else {
                    "Step was already disabled"
                }
            }
            elseif ($DesiredAction -eq "Enable") {
                if ($Action.IsDisabled -eq $true) {
                    "Enabling step [$StepName]"
                    $Action.IsDisabled = $false
                    $WasDeploymentProcessModified = $true
                }

                Else {
                    "Step was already enabled"
                }
            }
        }
    }
}
if ($WasDeploymentProcessModified) {
    "Steps in the deployment process of [$ProjectName] were changed. Saving changes to database..."
    $repository.DeploymentProcesses.Modify($deploymentProcess)
}
else {
    "No step was modified for [$ProjectName]"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2014-06-15
    • 1970-01-01
    相关资源
    最近更新 更多