You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell实现Octopus包版本号递增并批量推送

解决Octopus批量推送包并递增版本号的问题

没问题,我来帮你搞定这个批量推送的需求!核心思路是拆分原包的版本号、循环递增、生成新的包文件名(复制原包到新文件),然后调用你的PushPackage函数。下面是修改后的完整代码,我会一步步解释关键部分:

function PushPackage {
 param(
 $OctopusUri, $ApiKey, $Package
 )
 try{
 Write-Host "Pushing $Package to Octopus"
 # 修正原Start-Process的语法问题,确保参数传递正确并等待推送完成
 Start-Process -NoNewWindow -Wait -FilePath $OctopusExePath `
   -ArgumentList "push --package `"$Package`" --server $OctopusUri --apiKey $ApiKey --logLevel 'verbose'"
 Write-Host "Pushing $Package to Octopus - Success"
 } catch{
 Write-Host "PUSH PACKAGE Exception--------- $_"
 }
}

# 基础配置参数
$OctopusUri = "https://MyOctopusTest.local"
$ApiKey = "API-CRW9JBMJGUTEUEYEYUE"
$OriginalPackage = "C:\temp\OctoTest1\MyTestPackage.1.1.0.zip"
$PushCount = 10 # 要推送的总次数
$OctopusExePath = "octo.exe" # 确保octo.exe在系统PATH中,或者填写完整路径如"C:\OctopusTools\octo.exe"

# 拆分原包的路径、文件名和版本号
$packageDir = Split-Path -Path $OriginalPackage -Parent
$packageFileName = Split-Path -Path $OriginalPackage -Leaf

# 用正则匹配标准三段式版本号(名称.主版本.次版本.修订版本.zip)
if ($packageFileName -match '^(.+)\.(\d+)\.(\d+)\.(\d+)\.zip$') {
    $packageNamePrefix = $matches[1] # 提取包名前缀:MyTestPackage
    $major = [int]$matches[2] # 主版本号:1
    $minor = [int]$matches[3] # 次版本号:1
    $patch = [int]$matches[4] # 修订版本号:0
} else {
    Write-Error "无法识别包文件的版本格式,请检查文件名是否符合「名称.x.x.x.zip」的格式"
    exit 1
}

# 循环执行批量推送
for ($i = 0; $i -lt $PushCount; $i++) {
    # 每次递增修订版本号(如果需要递增主/次版本,直接修改这里的逻辑即可)
    $currentPatch = $patch + $i
    # 生成新的包文件名和完整路径
    $newPackageFileName = "$packageNamePrefix.$major.$minor.$currentPatch.zip"
    $newPackagePath = Join-Path -Path $packageDir -ChildPath $newPackageFileName

    # 复制原包到新的版本文件名(已存在则覆盖,可根据需求移除-Force取消覆盖)
    Copy-Item -Path $OriginalPackage -Destination $newPackagePath -Force

    # 调用推送函数上传新包
    PushPackage -OctopusUri $OctopusUri -ApiKey $ApiKey -Package $newPackagePath
}

关键细节说明

  • 修复原脚本的小问题:原Start-Process的参数传递写法有误,我改成了用-ArgumentList规范传递octo.exe的命令参数,同时添加-Wait确保每次推送完成后再执行下一次循环,避免并发冲突。
  • 版本号灵活适配:用正则表达式精准拆分你的包名和版本段,如果你的版本格式不是三段式(比如只有x.x),只需要调整正则表达式即可适配。
  • 版本递增逻辑:当前是递增修订版本号(最后一位数字),如果需要递增次版本或主版本,直接修改$currentPatch的计算逻辑就行(比如$currentMinor = $minor + $i)。
  • 包文件生成:因为Octopus需要不同版本号的实体文件才能上传,所以每次循环会复制原包生成对应版本的新文件——如果你的场景是动态生成包(而非复制),替换这部分逻辑即可。

内容的提问来源于stack exchange,提问作者hankey39

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 17:07:53