Azure devops Octopus deploy release name semver 检查

Azure devops Octopus deploy release name semver check

我们正在使用 Azure Devops 和 Octopus 部署。 我已经整合了发布步骤,发布创建以及发布到第一个环境(在我的情况下是开发)正在发生,没有任何问题。

问题出在后续版本中。 发布名称的语义版本控制检查失败。

'1.2.1023.0508-09' is not a valid version string

at Octopus.Client.Model.SemanticVersion.Parse(String value, Boolean preserveMissingComponents)

在第一阶段,我正在创建八达通版本,并在同一任务中部署到开发环境(使用 Azure devops 中的创建八达通版本任务)

create-release "--project=<projectName>" "--releaseNumber=1.2.1023.0508-09" "--server=<serverName>" "--apiKey=***" --enableServiceMessages "--deployTo=Development" --progress "--releaseNotesFile=<path>"

这一步成功了。 在下一阶段,我尝试了两种变体,

promote-release "--project=projectName" "--server=serverName" "--apiKey=***" "--from=Development" "--to=envName"

deploy-release "--project=projectName" "--releaseNumber=latest" "--server=serverName" "--apiKey=***" "--deployTo=envName"

他们都给出相同的错误,说版本名称不是有效的版本字符串。

我的困惑是,如果名称不正确,即使第一次部署也会失败。 如果正确且允许,那么后续阶段发布也应该成功。

如果有人以前遇到过这样的问题,或者可以添加一些解决此问题的建议,那将非常有帮助。

这听起来像是一个错误,但我需要更多时间来重现和验证。能否分享一下您使用的是哪个版本的八达通和八达通扩展?

我最好的建议是根据您的 Azure DevOps 内部版本号来确定版本号,并使用该变量来控制要部署的版本。如果您在阶段之间创建了其他版本,则使用 'latest' 版本可能会适得其反。

如果您可以将 Azure DevOps 内部版本号设置为与您想要的 Octopus 版本号 (1.2.1023.0508-09) 相同的格式,则可以使用以下命令来构建和升级版本。

create-release "--project=<projectName>" "--releaseNumber=$(Build.BuildNumber)" "--server=<serverName>" "--apiKey=***" --enableServiceMessages "--deployTo=Development" --progress "--releaseNotesFile=<path>"

deploy-release "--project=projectName" "--releaseNumber=$(Build.BuildNumber)" "--server=serverName" "--apiKey=***" "--deployTo=envName"

这将确保您推广的是在管道中创建的同一版本。

以防万一有人来这里寻找解决方案,以下是我为解决问题而采取的步骤,

  • 对于第一阶段(在我的例子中是开发),创建一个新版本。如果您有多个租户,请添加他们。不要忘记添加包版本。当您创建了多个版本的工件时,尤其需要这样做。我很难解决这个问题。如果您不添加 PackageVersion,则会选择最新的可用工件。
  • 对于进一步的阶段,请勿推广发布。相反,部署发布。这样,您可以传递与第一阶段配置相同的版本号。就我而言,我将舞台名称与我的环境名称保持一致。所以我也能够为 env 使用变量。我为 4 个不同的环境复制了这个阶段。