Rest 在八达通部署中使用API禁用流程步骤
我一直在使用八达通API搜索禁用单个流程步骤。我有一个包含10个步骤的项目,我使用TeamCity作为CI工具。所以我有一个条件,当我运行构建时,需要禁用一个步骤(无论我想禁用哪个步骤)。我想在升级版本时禁用/跳过特定步骤 我能够到达下面的台阶,但台阶不起作用Rest 在八达通部署中使用API禁用流程步骤,rest,teamcity,octopus-deploy,Rest,Teamcity,Octopus Deploy,我一直在使用八达通API搜索禁用单个流程步骤。我有一个包含10个步骤的项目,我使用TeamCity作为CI工具。所以我有一个条件,当我运行构建时,需要禁用一个步骤(无论我想禁用哪个步骤)。我想在升级版本时禁用/跳过特定步骤 我能够到达下面的台阶,但台阶不起作用 Add-Type -Path 'Octopus.Client.dll' $apikey = 'API-23H4GJ243HG2H3J423433H' # Get this from your profile $octopusURI =
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)
或
或
Octo.exe--skip=stepname仅在这种情况下有效
你能帮我弄清楚吗
谢谢,
Imran我从Octopus支持中获得了禁用流程步骤的工作脚本,并扩展了该脚本以获得禁用和启用功能
##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]"
}
您是否尝试过使用Run条件并将其设置为可变条件以便使用可变表达式?好主意。我从来没有想过要用它来做这个。我将运行条件用于其他步骤。在这些步骤中使用它也将解决我的另一个问题。我已经使用Octopus.client库创建了另一个Powershell脚本来远程更新变量,所以看起来我拥有了一切。谢谢@Benpearcet这对我很有用。我还必须使用另一个脚本,在升级到生产环境之前更改变量值之后,该脚本将用于更新变量快照。我还从Octopus Support获得了使用Octopus.Client禁用流程步骤的工作脚本。我会把剧本贴出来作为回答。
##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]"
}