2014-02-07 31 views
2

试图让我的生活更轻松,目前我们有4个开发人员在Visual Studio 2012中工作,我们正在使用TFS 2012进行源代码管理。我们所开发的项目是一个多租户Web应用程序(具有多个dbs的单一源代码目录),它是传统,asp和vb6 com组件的混合体,再加上新的C#代码。我们使用TFS进行源代码管理和管理用户故事和错误。由于我们网站的工作方式,只能在本地运行或调试服务器。 Source Control目前为每个开发人员设置了一个单独的分支,将工作目录映射到具有在IIS中指向它的网站的开发服务器上的共享网络路径。 Dev01-Dev05等。开发人员在其分支中使用他们的开发人员网站测试项目,然后检查对他们自己的分支所做的更改并将其合并到主干中。中继线的工作空间被映射到主开发网站,以便开发人员可以测试其对其他客户的开发域的更改,以根据与特定dbs连接的功能的定制和差异进行测试。自动化建设和发布管理VS2012

很长时间的解释,但基本上每个开发者都有一个分支和一个网站,然后合并到自己的网站树干。

为了部署我们的临时服务器:

  1. 我通过一个bat文件编译中继的网站服务器
  2. 运行一个Windows应用程序我建立查询TFS与在 具体工作项关联的变更上一定的状态,并将 这些变更集的所有文件从publish文件夹复制到部署文件夹。
  3. 运行使用展鹏的Deployment Manager 来创建这些新文件
  4. 进入我们的网络创建和部署该版本的DM现场包服务器上的另一个批处理文件(一直没能得到命令行工具为此工作,所以我必须手动执行)
  5. 运行已保存在与每个数据库(10个左右的客户数据库)上的票号相匹配的文件夹中的任何SQL脚本以支持版本

我试过使用TFS自动编译的东西,从来没有真正知道它正确地建立网站。与克鲁斯控制周围也没有什么成功。使用臭鼬工程项目来做这件事非常耗时且不可靠。

我的完美的情况是:

  1. 门控签入,尝试构建/发布的每一个开发人员合并到主干,拒绝,如果构建失败通知开发人员的时间。
  2. 结束了一天的收集有一定地位的TFS项目及分期
  3. 最终*运行自动化回归部署与他们所有的客户DBS的TFS项目相关联的临时网站
  4. 部署SQL脚本文件UI测试,如果失败
  5. 更新TFS工作项,以新的状态,以便QA创建新的工作项或电邮给开发者/客户知道他们的项目是准备在我们的升级环境中测试的成功部署哪些项目
  • 发送报告

    我怎样才能到达这里,以便我不花费数小时准备和部署发布到舞台和最终的制作?对于潜在的解决方案非常开放,那些难以改变的东西将会是我们正在使用的源代码控制,无法真正切换到颠覆或其他的东西,所以我们非常坚持使用TFS。

    谢谢

  • +0

    我会使用TFS Build。你说过你试过了,什么都行不通? –

    +0

    似乎无法获得正确的msbuild编译站点的参数。 – PForsythe

    +0

    这里是我如何构建当前:aspnet_compiler -p {sitefiledir} -v/-f -u {publishlocation} -fixednames -nologo -c -errorstack我从发布位置抓取已编译的文件并部署这些文件。在使用tfs时,我还没有找到如何使用sln或csproj文件执行此操作,并模仿 – PForsythe

    回答

    2

    创建发布时使用的包回去并开始试图让TFS建立/发表我的网络解决方案。我能够构建成功完成。添加msbuild参数/ p:DeployOnBuild = True,并将msbuild平台设置为x86似乎可以做到这一点。 然后我发现https://github.com/red-gate/deployment-manager-tfs它给你一个构建过程模板,使用redgate工具进行包和部署。在玩了一段时间之后,我终于开始创建,打包并将我的构建部署到我们的临时环境中。

    接下来将修改模板以运行一些自定义脚本,以仅收集要部署的正确项目,部署所有sql文件,然后在完成后将工作项设置为适当的状态。

    1

    真正详细描述你的过程。感谢分享!

    我相信你可以设置TFS在一个分支上有gated check-in,如果你可以在trunk上设置,将确保合并成功。这可能会触发msbuild,如果你可以得到这个工作或一个自定义的构建工作。

    如果你能得到这个工作,那么你就可以使用该中继代码作为发送给部署管理器的工件。这避免了必须通过TFS更改集合来部署文件,因为您可以确信该主干可以始终构建。

    您是否使用Deployment Manager从源代码管理以及应用程序部署数据库?

    这可能是一种进一步自动化过程的方法。 SQL Source ControlSQL CI允许您控制数据库的结构,在每个签入中保持数据库最新,并运行数据库单元测试。他们还为Deployment Manager生成数据库包,因此您可以部署包含应用程序和数据库的版本。

    如果您想向我发送您在步骤4中使用的命令,以使用Deployment Manager部署发行版,我可以提供帮助。我使用的命令是:

    DeploymentManager.exe --create-release --server=http://localhost:81 --project="Project Name" --apiKey=XXXXXXXXXXX--version=1.1 
    DeploymentManager.exe --deploy-release --server=http://localhost:81 --project="Project Name" --apiKey=XXXXXXXXXXX--version=1.1 --deployto=CI-Environment-Name 
    

    这将使用该项目的最新可用软件包创建版本1.1。您还可以指定与

    --packageversion=<package name>=<version> 
    --packageversion="application=1.5 
    
    +1

    以上的输出感谢您的答复,我通过变更集来汇编文件,因为并非所有合并到中继中的文件都必须即将面世。我不使用DM作为数据库端,因为开发人员对数据库所做的大部分更改都不在源代码管理中。他们只是创建一个与工作项相关的.sql文件。这里是它总是错误的命令,并建议使用httpConnectTimeout \ DeploymentManager.exe create-release --server = http:// {myserver}:81 --apiKey = {myKey} - project = DeploytoStaging --user = administrator - pass = {myPass} --deepto =分期--releaseversion = 11.0 – PForsythe

    +0

    @PForsythe可能是因为您的NuGet供稿超时(我们查询它的版本)。您可以尝试通过Deployment Manager UI为同一个项目创建新版本吗?这是否滞后?另外,您的Feed中有多少包? –

    +0

    每次我创建一个部署时,它首次在UI中失败,然后我必须点击版本上方的刷新按钮,然后才能工作,并且可以创建我的部署。至于多少个版本我不知道,版本号明智我接近50,如果有一些脚本我应该运行清除包让我知道 – PForsythe