很多人都有他们的系统为他们或他们的团队做的事情。源代码控制提交后挂钩是一个标准示例:拥有一个自动构建系统,可以检查最新的源代码、编译、测试和打包它是我们大多数人可能使用的后台黑客。
你还做过哪些很酷的事情?
很多人都有他们的系统为他们或他们的团队做的事情。源代码控制提交后挂钩是一个标准示例:拥有一个自动构建系统,可以检查最新的源代码、编译、测试和打包它是我们大多数人可能使用的后台黑客。
你还做过哪些很酷的事情?
我们团队中有一位不熟悉颠覆冲突概念的开发人员。他推断,如果他只是删除代码中所有奇怪的东西并单击解决一切正常(即取消文件中的所有其他更改......)
不管怎么说,在第 5 次发生这种情况之后,以及第 5 次我不得不解释为什么我刚刚关闭的那个缺陷再次出现之后,我写了一个脚本。
它会对文件的更改进行比较,以查看连续签入是否删除了所有先前的更改以及它们是否由无名开发人员完成。
然后它会向老板发送一封电子邮件,描述发生的事情,以及在签到过程中丢失了多少工作。
没有第 7 次出现。
我们有一个红绿灯,可以显示我们的日常构建是否成功、测试失败或根本没有构建。
此外,我们有一个灯条,每当我们收到客户上传的内容时,它会亮几秒钟。
我们没有 24x7 的人员,但我们有整晚运行的关键流程。我们创建了一个内部警报系统,以通知我们严重的系统问题、失败的关键任务流程等。它使用文本到语音来创建描述性消息,然后连接到我们的自动拨号器以呼叫适当的人员信息。
在一家网页设计公司工作时,我配置了我们的开发服务器,以便我们可以通过子域名实时查看项目的工作副本。因此,如果您的名字是 joe,并且您正在研究 jetfuel 项目,您会去joe.jetfuel.test-example.com
并且您可以立即看到您的更改而无需提交。
这是一个使用子域名作为部分目录结构的简单 hack。我们的 htdocs 路径看起来像这样htdocs/tag/project
。我们有一个脚本(您可以通过它访问的一个 php 应用程序setup.test-example.com
),它会为您创建一个新的标签名称并检查您想要的任何版本并调用该项目的部署脚本。如果成功,它会将您转发到新的子域。然后,您可以通过 samba 共享来处理这个新副本。
这对我们来说非常有效,因为我们总是部署到相同的 linux 版本,而且我们的项目有简单的数据库要求。
我们这样做的最初原因是因为我们的开发人员在各种不同的平台上工作。除了修复这个平台问题之外,这对于查看更改和测试来说也很棒。我们有各种各样的标签,从人名、行李箱版本、测试标签,一直到原型,如jquery-menu-hack.jetfuel.test-example.com
现在回想起来,我想知道运行虚拟机会容易得多。
我们有一个开发人员在一个不相信源代码控制的经典 ASP 站点上工作。代码从他的机器直接进入生产箱。这会导致丢失更改或无法恢复到稳定版本的问题。由于 CruiseControl.Net 具有监视目录的能力,因此我添加了一个项目,该项目在将文件复制到生产环境时实际签入文件。完全背离了 CC.Net 的初衷,但我们没有丢失任何代码。
放入一个 pre-commit 钩子来检查 bug 注释是指一个打开的 bug,分配给执行签入的用户。(SCMBug 可以做到这一点)。
然后让生活真正有趣,拼写检查评论!提交注释,以及代码中的注释。(拼写是我的伙伴)
通过设置为公司标准的代码格式化程序运行代码;并将其与原始文件进行比较:如果不是公司官方格式:拒绝提交。
使用单元测试构建进行覆盖测试。
将所有错误/错误通过电子邮件发送给开发团队。
我漏掉了开发者的名字。他们知道他们做到了。
不完全是 hack,而是 IT 开发工作的一些必备品:
如果你使用颠覆,你必须使用 CommitMonitor。( http://tools.tortoisesvn.net/CommitMonitor ) 它可以让您监控 svn 存储库中的新提交,然后查看新提交。如果您想掌握团队正在做的事情,那就太好了。特别是如果您有几个需要监视的后辈。;)
Rsnapshot ( http://www.rsnapshot.org/ ) 也非常宝贵 - 我们每四个小时对整个文件系统进行一次完整的备份快照,可以追溯到 2 年前,之后的每一天。它就像您的文件系统的数据立方体!这给人的安心是纯粹的幸福。:)
几乎没有破解,但早在我们快速的 VAX 11/730 上,如果出现问题,我们的夜间流程会在打印机上打印文件“BLAMMO.TXT”。每天早上进来的第一站就是打印机。
回到大约 9 年前的 dotCom 时代,我不得不破解两个不同位置之间的故障转移系统。我们有一个时髦的设置,带有一个 powerbuilder 前端网站和一个 powerbuilder 管理工具。数据存储在 MSSQL 7.0 中。网络服务器使用 IPX 与 SQL Server 通信(不要问)。无论如何,我负责制定故障转移计划。
我最终将一些 linux 机器组合在一起,并让它们运行我们的外部 DNS。每个位置一个。我们有一个带有网络服务器的远程站点和 sql server,我让 SQL 事务复制通过 128k ISDN IPX 连接(所有事物)工作。然后在我们的生产站点构建了一个监控工具,将数据包发送到各个上游网络切换。如果我们经历了超过 20% 的主站点中断,监控工具会在 Debian 机器上运行一个 perl 脚本来更改 DNS 并指向我们的第二个站点。我们的辅助服务器有一个带有我们的主 DNS 和监控站的心跳。它会复制记录,除非它失去两个连接,然后它会翻转以将 DNS 指向备份位置。
主站点将关闭主位置的 SQL 服务器以中断复制。使用 128k ISDN IPX 连接自动进行站点到站点故障转移 :)
回到我以前的工作,我们必须审核许多表的数据更改(插入、更新和删除)。我们的支持人员必须能够搜索这些数据以找到用户所做的更改。
已成为半永久性的临时解决方案是存储每个非选择查询。然而,这是一个大型系统,该表每天会增长约 1.5GB。
我想出的解决方案是为外部列表中的所有表创建一个脚本,创建适当的触发器来审计每个表、行、列、之前和之后、何时以及由谁,并将其存储在我们的新审计表中。该表的大小比旧版本增加了约 10%,并且存储了更多可用数据。它使我们能够创建一个 UI 来搜索和查看对我们的数据所做的每一个更改,而无需我们的支持团队或业务用户了解任何 SQL。
这是一个较低的水平,但我为我为我的研究编译代码而编写的 make 文件感到相当自豪。它只需要给出你的源文件名和头文件名,它们可以自己处理其余的事情(尽管它确实做了一个假设,即你不会将任何头文件编译成对象,只编译源文件)。另一个缺点是它依赖于 GNU make 程序的第二个扩展特性,所以我不知道它是否适用于其他 make 程序。此外,使用的编译器需要支持类似于 gcc 的 -MM 功能的功能。这里希望没有人嘲笑它。
-include prereqs.mk
HEADERS=$(SRC_DIR)/gs_lib.h $(SRC_DIR)/gs_structs.h
SOURCES=$(SRC_DIR)/main.cpp $(SRC_DIR)/gs_lib.cpp
OBJECTS=$(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SOURCES))
release: FLAGS=$(GEN_FLAGS)$(OPT_FLAGS)
release: $(OBJECTS) prereqs.mk
$(CXX) $(FLAGS) $(LINKER_FLAGS) $(OUTPUT_FLAG) $(EXECUTABLE) $(OBJECTS)
prereqs.mk: $(SOURCES) $(HEADERS)
$(CXX) $(DIR_FLAGS) $(MAKE_FLAG) $(SOURCES) | sed 's,\([abcdefghijklmnopqrstuvwxyz_]*\).o:,\1= \\\n,' > $@
.SECONDEXPANSION:
$(OBJECTS): $$($$(patsubst $(OBJ_DIR)/%.o,%,$$@))
$(CXX) $(FLAGS) $(NO_LINK_FLAG) $(OUTPUT_FLAG) $@ $(patsubst $(OBJ_DIR)/%.o,$(SRC_DIR)/%.cpp,$@)
显然我放弃了一些变量的定义,但我认为它可以理解这个想法。
由于我的编码工具和风格与此脚本的要求兼容,我喜欢使用它。添加(a)新的源代码所需要做的就是将其名称添加到适当的变量中,其余的都被处理了。
我们有许多项目的 Twitter 帐户,这些帐户会发布诸如提交消息、构建通知、失败的单元测试、部署、错误跟踪活动等与项目相关的任何类型的事件。运行像 Twitter Gwibber 这样的客户端(它会为每个新状态显示一个弹出窗口)是与您感兴趣的项目活动保持联系的好方法。使用 Twitter 很好,因为您可以利用所有 3rd 方应用程序 - 例如 iPhone 客户端。
为具有纹理/图像的绝对路径的 VRML/3d 模型文件添加提交挂钩检查。f:/maya/my-textures/newproject/xxxx.png
只是不属于服务器。
早在 1993 年,当源代码控制系统非常昂贵且笨拙时,我工作的公司有一个内部源代码控制构建为 4DOS 脚本。它不像大多数当前的源代码控制系统那样复杂,例如它没有分支或集成,但它完成了支持修订历史记录、签出/签入和基本冲突解决的基本工作。