Deployment Web应用程序:从开发到生产

Deployment Web应用程序:从开发到生产,deployment,build,Deployment,Build,以下是我公司将更改从开发服务器移动到生产服务器的当前流程: 需要更新的文件将从生产中删除,以确保仅在生产中未进行任何更改(不,不应该发生;但确实发生了)。旧的开发文件被赋予~前缀作为一种“备份” 开发人员进行必要的更改 开发中的更新文件将从该服务器复制并粘贴到生产服务器上的相应位置。旧的生产文件被赋予~前缀作为一种“备份” 我知道这是一种可怕的做事方式,但最好的方式是什么?我最初的想法是将我们所有的代码都转移到subversion中。然后,当某些内容需要更新时,在开发中进行更改,提交到存储库,然

以下是我公司将更改从开发服务器移动到生产服务器的当前流程:

  • 需要更新的文件将从生产中删除,以确保仅在生产中未进行任何更改(不,不应该发生;但确实发生了)。旧的开发文件被赋予~前缀作为一种“备份”
  • 开发人员进行必要的更改
  • 开发中的更新文件将从该服务器复制并粘贴到生产服务器上的相应位置。旧的生产文件被赋予~前缀作为一种“备份”
  • 我知道这是一种可怕的做事方式,但最好的方式是什么?我最初的想法是将我们所有的代码都转移到subversion中。然后,当某些内容需要更新时,在开发中进行更改,提交到存储库,然后从存储库更新生产服务器

    有人有其他选择/修改/建设性批评吗?我们的开发团队只有6个人,我们的代码库是ASP(非常古老、可怕的遗留)、PHP(稍新)和JavaEE(最新代码;所有应用程序都是单独构建的)

    提前谢谢


    编辑:为了开发我们的Java EE应用程序,每个开发人员的机器上都运行Glassfish v2。对于PHP/ASP,我们有一个中央开发服务器。对于生产,我们有一个用于PHP/ASP(IIS)的服务器,另一个用于Java(Glassfish v2)。

    您说得对,使用源代码管理(subversion、git、mercurial等)将使您的生活更加轻松

    以下是更改生产环境时需要采取的基本步骤:

  • 开发人员在项目主干的分支中进行更改
  • 完成所有更改并通过测试后,将更改合并回主干
  • 给箱子做个标签
  • 将该标记导出到生产环境中。如果出现问题,您始终可以恢复到以前部署的标记

  • 是的……确实需要某种源代码控制。就我个人而言,我喜欢SVN,觉得它很容易安装


    在深入研究之前,我会仔细考虑一下您的部署策略应该如何工作。您希望如何处理并行开发?您是否想要/需要部署到的QA或用户测试环境?与小组其他成员一起坐下来,列出用例列表等,以确保您在同一页上,您的策略合适,并且您都支持解决方案。

    我认为您的思路是正确的。获得源代码控制、subversion或其他功能至关重要。然后使用诸如CruiseControl之类的某种持续集成来管理直接部署或部署包的创建。并且尽你所能确保在生产过程中不发生任何变化,这真的会影响整个过程。

    正如你所说,subversion可能会有所帮助,在你的情况下:使用一些版本控制系统是非常好的,subversion工作得很好,而且你可能不需要任何去中心化的系统(如git/mercurial/…)

    其主要优点是:

    • 更容易分享团队中每个开发人员所做的修改
    • 一个中心位置,“是源文件的官方版本”
    • 可能更容易部署

    尽管如此,我不会在我的生产服务器上使用svn签出:好的,在某些情况下它可以很好地工作,但是,特别是如果您有时直接在生产服务器上修改文件(这是您绝对不应该做的!),总有一天您会在生产服务器上遇到问题(比如冲突)

    是的,您可以在干运行中使用svn merge,但这并不总是足够的……而且svn更新也没有干运行——PHP文件中的冲突通常意味着解析错误;当它发生在生产服务器上时,这是不好的^^

    相反,我会:

    • 正常工作,可以时向SVN提交
    • 偶尔(例如,部署到生产环境的前一天),执行svn导出并将提取的应用程序部署到临时服务器
      • 这意味着您可以在比开发平台更接近生产环境的环境中进行测试
      • 而且还意味着,没有在登台环境上进行测试,任何东西都不应该直接投入生产
    • 如果暂存服务器上的一切正常,则将相同的包部署到生产服务器

    哦,顺便说一句,关于部署过程,您可能会对我不久前给出的关于这个问题的答案感兴趣:


    作为旁注:开始使用这种过程并不总是容易的,因此:

    • 在开始之前,尽可能多地思考;发布SO是一个良好的开端,但不要忘记与您的同事讨论,他们将使用该系统
    • 慢慢来:可能不急,几天的思考总是有用的;-)
      • i、 e.考虑您可能遇到的情况和您的用例,以确保您将要实施的流程对您有效

    如前所述,源代码控制是一个明确的目标。它是进行所有编码和部署的工具

    也就是说,您可能还希望使用部署工具(如)或构建工具(如)

    我使用Capistrano部署我们的PHP应用程序,并使用单个终端命令:

  • 从源代码管理中签出项目的副本
  • 放入版本化部署文件夹中
  • 运行自定义任务-如将符号链接写入公用文件夹、运行db任务、将环境变量从暂存切换到生产等
  • 在我的应用程序的公用文件夹和