我们的解决方案中有大约40个项目,其中主要3个是Web应用程序,Windows服务和数据库迁移应用程序。
我已经设置了一个带有章鱼部署应用程序的Azure虚拟机和一个触手。我现在在批处理文件中使用以下构建命令进行测试:
set msBuildDir=%WINDIR%\Microsoft.NET\Framework64\v4.0.30319
call %msBuildDir%\msbuild.exe "{SolutionFile}" /p:Configuration=Deployment-OctopusDeploy /p:RunOctoPack=true /p:OctoPackPackageVersion=%1 /p:OctoPackPublishPackageToHttp=http://localhost/OctopusDeploy/nuget/packages /p:OctoPackPublishApiKey={OURAPIKEY}
我必须创建一个新配置,该配置不构建Azure云服务项目,以防止在试图部署NuGet包两次的主Web应用程序上进行双重构建。我还必须传递版本号,因为我们的汇编文件中的版本号如下:
[assembly: AssemblyVersion("2.62.*")]
我们收到的错误是2.62。*不是有效的版本号,所以我们将批处理文件放在控制台应用程序中,从下面加载版本号,如下所示,并将其传递到批处理文件中。
public static string CurrentVersion
{
get
{
if (String.IsNullOrWhiteSpace(_currentVersion))
{
Assembly assembly = Assembly.GetExecutingAssembly();
var version = assembly.FullName.Split(',')[1];
var fullversion = version.Split('=')[1];
_currentVersion = fullversion;
}
return _currentVersion;
}
}
我们还有一个开发和主要分支,我们的最终目标如下:
我们希望将我们的TFS在线构建到dev或main的签入,并将OctoPack参数传递给MsBuild代理,如果NuGet包来自dev分支,则将它们添加到dev,如果它们来自主要分支用main添加它们。此外,我们希望正确读取版本,而不必从控制台应用程序激发,我不相信我们可以使用TFS构建的在线版本。
这可以通过OctoPack和visual studio在线获得吗?处理此场景的常用方法是什么,因为我确信有很多人使用Visual Studio Online / Branching / Octopus Deploy。
非常感谢任何帮助/建议
答案 0 :(得分:1)
您的Nuget版本号是否符合Nuget版本控制语义?
这是正则表达式:
\d+(\s*\.\s*\d+){0,3}-[a-z][0-9a-z-]*
为了将来参考,如果此正则表达式发生变化,请参阅以下内容:https://nuget.codeplex.com/SourceControl/latest#src/Core/SemanticVersion.cs