- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
情况是这样的:我们有多名具有不同程度命令行经验的开发人员,我们正在为我们的网站整合一个部署解决方案。生产环境是2个SUSE Linux boxes。开发环境也是SUSE Linux box。每个开发人员在他们的主目录中都有/将有一个 SVN 树的副本用于开发和测试。
目标是拥有一个易于使用且易于恢复的发布系统,该系统可与多个生产服务器一起使用。如果非网络开发人员(仍然是不在网络世界中的编码人员)也可以轻松恢复任何网站,那将是一个奖励。在理想情况下,发布就像在您要发布的网站上运行单个命令一样简单。此命令将更新生产服务器并在其唤醒时留下恢复路径。
我们目前的部署解决方案有点笨拙,很难恢复,而且速度很慢。我们目前使用 SVN checkin 所有文件。然后运行一个脚本,基本上在 SVN 中创建一个标签。然后运行第二个脚本,该脚本进入 2 个生产服务器中的每一个并运行“svn up”。
有什么建议吗?
最佳答案
我是一个 .net 专家,因此在 Windows 世界中工作...话虽如此,但我每天使用的管理构建过程的技术都来自您的世界! (Linux/java 技术在括号中,但我也为 Windows 读者提供了它们的等效技术)我使用 CruiseControl.NET ( CruiseControl ), VisualSVN ( SVN ), Tortoise , 和 NAnt ( Ant ) 来满足我所有的构建需求。
我的所有构建通常在 checkin 时自动推送和标记。这是通过 CruiseControl 完成的,因为它监视我的源代码控制(SVN 或 SubVersion)。当 CruiseControl (CC) 发现新代码已 checkin 时,它将执行一个 CC 项目,该项目依次调用构建服务器上的 Ant 脚本。
Ant 脚本在一个公共(public)构建中为我做了几件事情。它将检查最新代码的副本并将其带到构建服务器。然后它将构建代码以确保至少可以编译。然后它设置我的数据库的干净副本并执行任何 sql 脚本以将该基线数据库构建到当前版本。然后我运行我所有的单元测试项目。然后我运行集成测试,其中包括测试我的存储库层以确保代码仍然与我的后端保持一致(我通常在我的项目中使用 ORM,所以它们很少不同步......但这是一个很好的步骤进行中)。一旦所有测试都通过(或失败),我将数据库回滚到干净状态并执行脚本以将其升级到当前版本(这很重要,因为它为团队提供了一个干净的数据库,可以在单击时进行开发一个按钮)。如果构建成功,那么我会将代码部署到开发服务器(我也可以一键部署到我的登台服务器和生产服务器)。如果你想在每次 checkin 时标记你的代码库,你也可以在这里做。
完成所有这些后,我想使用 NDepend 对我的代码进行一些分析。 , NDoc , 和 NCover . NDepend 是一种代码分析工具,用于确保事物在架构上是正确的,命名标准是它们应该的,以及更多。 NDoc 提取所有代码注释并为我的代码创建 MSDN 风格的文档。 NCover 告诉我我的代码是否有适当的单元测试覆盖。
然后,我编写了一个自定义 Ant 任务,该任务针对各种//TODO 和//CodeDebt 标记解析我的所有代码,以生成另一个报告来告诉我(通常在冲刺结束时)有多少废话在我的代码库中累积。然后可以将其纳入下一个冲刺。
所有这些报告要么包含在发出的构建电子邮件中,要么链接得过于恰当。
请记住,以上所有操作都会在每次签到时发生...并且无需任何人点击一个按钮!这才是真正的持续集成,应该成为每个构建大师的目标。
CruiseControl 有一个基于 Web 的控制台,它还允许非 Web 开发人员(任何人)进入并执行此推送,而无需 checkin 代码...称为强制构建。
有了这个框架,只要一切都在版本控制之下,您也可以轻松地回滚推送。您将需要另一个 Ant 脚本来执行相同的过程,但有一个额外的首要任务,因为它必须获取最新版本的代码而不是最新版本的代码才能执行构建过程。所有 Ant 任务都可以在不同的执行目标中重复使用。
关于php - SVN网站开发部署解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1039741/
我需要一些说明。我可以直接写入 /dev/port 以直接访问并行端口并且它工作正常(我可以打开插入端口连接器的 LED)。但是,我想我可以用 /dev/mem 做同样的事情? (http://tld
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我使用 Visual C++ 和 Win32 API 学习了 Windows 编程。如今,似乎大多数应用程序都是使用 C# 在 .NET 中开发的。我知道大多数时候 native 代码和托管代码之间没
请耐心等待。我正在制作一个 java 控制台,类似于此处找到的 DragonConsole https://code.google.com/p/dragonconsole/ 。一切都按计划进行,但我想
关闭。这个问题需要更多 focused .它目前不接受答案。 想要改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭5年前。 Improve this que
Django 的开发服务器表现得很奇怪。访问它的浏览器在加载时卡住,任何退出它的尝试都不起作用。当我点击 control c看似相当,但实际上仍在运行。让它退出的唯一方法是重新启动我的电脑,这很令人沮
我正在使用 Flash Develop,并且创建了一个 ActionScript 3.0 项目。它启动并读取一个 xml 文件,其中包含图像的 url。我已将 url 保留在与 swf 相同的文件夹中
是否可以根据其 website 上提供的规范开发 AUTOSAR BSW 堆栈(例如用于 CAN 通信)?不购买任何昂贵的供应商工具?可以遵循哪些步骤?我被要求探索这种可能性。 最佳答案 是和否。工具
有人知道如何用音频文件的内容覆盖 iPhone 麦克风吗? 想象一个场景,您正在通话,并且想要播放一些简短的音频让其他人听到。 因此,有必要将麦克风(硬件)置于保持状态,并使用委托(delegate)
我遇到了这个问题,我的应用程序出现 EXC_BAD_ACCESS 错误并卡住/停止。我使用模拟器的“向左旋转”和“向右旋转”选项来模拟方向变化行为。导致此错误的可能原因有哪些?由于我没有获得有关错误的
我有超过 1 台 Mac,我想在所有这些 Mac 上进行开发。我知道我需要在每台机器上同步我的手机,但这是我遇到的最小的问题。看起来我无法在手机上运行应用程序,除了在其中之一上开发的应用程序。 是否有
在手机上测试时,我的应用程序在特定点崩溃。控制台显示此消息 Tue Jan 27 15:47:14 unknown SpringBoard[22] : Application com.myprof.
我有一个案例,我从服务器获取信息。我的应用程序有一个选项卡栏和导航按钮。我希望应用程序显示进度指示器并禁用所有其他控件,以便用户在从服务器提取数据时无法跳转。我怎样才能实现这个目标? 我想到的一种方法
有时,当我尝试“构建”/编译下载的源代码时,我会收到以下警告: ld: warning: directory '/Volumes/Skiiing2/CD/ViewBased/Unknown Path/
我无法在 Apple 文档中找到关于开发和分发配置之间差异的明确解释。我目前正在使用开发配置在我的 iPhone 上进行开发和测试。我打算将该应用程序分发到我的 Beta 测试中,我想知道: 我需要使
我在使用 SharePoint 时遇到的最大挑战之一是它不能很好地适应典型的项目环境,其中至少包含开发和生产环境。我遇到的最多的问题是内容和列表是如此紧密地耦合在一起,以至于如果不在生产环境中执行内容
我失败了fist step让 Eclipse(对我来说是全新的)为 ARM 开发做好准备。 我在 Windows 10 中安装了 Eclipse。我想我应该安装 xpm,但我不知道在哪里输入此命令:
首先,我告诉你-我是编码新手 我正在使用vs代码来学习c++,它不会产生像dev c++或codeblocks这样的调试器。我看了一些视频,其中我们必须编辑json文件,这对于初学者来说非常复杂。有人
我失败了fist step让 Eclipse(对我来说是全新的)为 ARM 开发做好准备。 我在 Windows 10 中安装了 Eclipse。我想我应该安装 xpm,但我不知道在哪里输入此命令:
我开发了一个 Ionic 应用程序(iOS 和 Android 的混合)。我有 Xcode 8.3.3 并购买了一年的 Apple Developer Program 订阅。 我不想测试我的应用并将其
我是一名优秀的程序员,十分优秀!