2017-10-15 133 views
0

我一直在尋找使用Octopus API禁用單個進程步驟。我有一個包含10個步驟的項目,我使用TeamCity作爲CI工具。所以我有一個條件,當我運行構建時需要禁用1步(無論我想要)。我希望在促銷發佈時禁用/跳過特定步驟。在Octopus部署中使用API​​禁用進程步驟

我能夠達到,直到下面的步驟未工作

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只會在這種情況下工作嗎?

你能幫忙弄清楚這個嗎?

感謝, 伊姆蘭

+0

您是否嘗試過使用Run Condition並將其設置爲變量條件,以便使用變量表達式? – benPearce

+0

好主意。我從來沒有考慮過使用它。我爲其他步驟使用運行條件。將它用於這些步驟也將解決我的其他問題。我已經使用Octopus.client庫創建了另一個Powershell腳本來遠程更新變量,所以看起來像我擁有了一切。謝謝@benPearce – Imran

+0

這對我有效。我還必須使用另一個腳本,它將在升級到生產之前更改變量值後用於更新變量快照。我還得到了使用八達通支持中的Octopus.Client禁用處理步驟的工作腳本。我會在回答中發佈該腳本。 – Imran

回答

0

我得到了工作腳本從八達通支持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]" 
}