Continuous integration 八达通和持续集成-什么';什么时候应该创建发行版是最佳实践?
在当前的一个项目中,我们正在使用Teamcity和Octopus来构建和部署我们的IIS应用程序 我们有4个环境。CI环境(基于签入的自动构建、运行单元测试和自动QA测试)以及QA、UAT和Prod环境(我们使用八达通手动推送) 在本地(dev)构建中,默认构建脚本直接推送到本地Octopus实例进行测试Continuous integration 八达通和持续集成-什么';什么时候应该创建发行版是最佳实践?,continuous-integration,octopus-deploy,Continuous Integration,Octopus Deploy,在当前的一个项目中,我们正在使用Teamcity和Octopus来构建和部署我们的IIS应用程序 我们有4个环境。CI环境(基于签入的自动构建、运行单元测试和自动QA测试)以及QA、UAT和Prod环境(我们使用八达通手动推送) 在本地(dev)构建中,默认构建脚本直接推送到本地Octopus实例进行测试 更好的做法是让CI构建(运行非常频繁)遵循与本地构建类似的模型(并直接推送到触手实例,而不是通过主实例),还是通过Octopus服务器(每次构建时都需要创建新版本) 你的问题似乎有关联,但我不
更好的做法是让CI构建(运行非常频繁)遵循与本地构建类似的模型(并直接推送到触手实例,而不是通过主实例),还是通过Octopus服务器(每次构建时都需要创建新版本) 你的问题似乎有关联,但我不认为有关联,所以我将把这个答案分成两部分 第一部分 我想说,根据包的大小和每个构建(包括自动单元/qa测试)的时间,您有两个选择:
- 考虑到你的软件包大小——软件包越大,我认为直接使用nuget服务器是最好的选择,只是出于对八达通IO负载的考虑。很可能,这没什么大不了的
- 每个环境中的服务器数—尤其是在每个环境中有多台服务器的情况下。默认情况下,Octopus尝试进行并行部署,但您可以切换到“滚动”部署(设置一次要部署到的特定服务器)。如果您正在为每次签入进行连续部署,那么每个触手都必须下载最新的软件包。同样,根据包的大小和要推到的触角的数量,您可能会遇到一些带宽问题。同样,我不知道您的环境中有多少台服务器,所以您确实知道什么是最好的
- 是否有其他团队使用八达通服务器?我之所以这么问,是因为如果你是唯一一支球队,那么你真的不必担心每只触手是如何得到包裹的。直接从nuget服务器与八达通服务器进行比较并不重要
因此,为了明确何时需要创建发布,这是非常主观的,因为八达通内的项目可以部署一个或多个NuGet软件包,所以会根据具体情况而有所不同。这就是说,我认为需要对您的发布版本进行一些确认,这不可避免地会将您的二进制文件和Nuget软件包的版本控制也带进竞技场 示例:如果您的测试人员严重依赖TFS变更集编号,那么最好将该变更集编号嵌入到您的二进制文件中(通过AssemblyVersionInfo),并让您的NuGet软件包反映该版本(在您的NuSpec中),然后让Octopus为您的发行版使用NuGet软件包版本控制。好极了。您的发布版本可以显示您的变更集编号!令人惊叹的。除非您的项目部署了多个NuGet包。那么,哪个包作为整个部署的版本呢?当每个项目和部署过程都有多个NuGet包时,事情就会变得非常棘手。这就是为什么Octopus中的另一个版本控制机制(又名变量模板)通常最适合每个人 请记住,八达通内部促销的概念也是一个重要的概念
<files>
<file src="obj\**\*.*" exclude="obj\octopacking\**\*.*;obj\octopacked\**\*.*;obj\Release\Package\**\*.*;**\*.pdb;**\*.ps1;**\*.dll.config;**\*.loadtest;_DeveloperNotes;_PublishedWebsites" target="obj"/>
<file src="Deploy.ps1" />
</files>
[string[]]$params = @(
"-setParam:name='IIS Web Application Name',value='" + $iisapplicationname + "'",
"-skip:Directory=^" + $iisapplicationname + "\\App_Data",
"-skip:File=.config$",
"-skip:File=.cmd$",
"-skip:File=.ps1$"
)
$msdeployArgs = [string]::join(' ', $params)
if ($OctopusEnvironmentName -ceq 'Development')
{
.\obj\Release\Myproject.Deploy.cmd /Y /M:localhost ($msdeployArgs) | Write-Output
}
else
{
.\obj\Release\Myproject.Deploy.cmd /Y /M:localhost ($msdeployArgs) | Write-Output
}
call "C:\Scripts\JenkinsciDeploy.bat" Myproject %VERSION%-dev OctopusProjectName Development %BUILD_NUMBER% %JOB_NAME%
cd C:\Scripts
Octo.exe create-release --project %3 --version %2 --packageversion %2 --server http://octopus.yourdomain.com --apiKey API-xxxxxxxxxxx --deployto %4 --progress --force --guidedfailure=False --waitfordeployment --deploymenttimeout=00:30:00 --releaseNotes "Jenkins build [%5] http://jenkins.yourdomain.com:8080/job/%6/%5"