许多人拥有他们的系统为他们或他们的团队所做的事情。源代码控制提交后挂钩是一个标准示例:拥有一个自动构建系统,可以检查最新的源代码,编译,测试和打包,这是我们大多数人可能使用的后台黑客攻击。
你做了什么其他很酷的事情?
答案 0 :(得分:30)
我们团队中有一位开发人员不熟悉颠覆冲突的概念。他推断说,如果他只是删除了代码中所有奇怪的内容并点击确定一切正常(即删除文件中的所有其他更改......)
无论如何,在第5次发生这种情况之后,第5次我不得不解释为什么我刚刚关闭的那个缺陷是重新出现的,我写了一个脚本。
它会对文件的更改进行区分,以查看连续签入是否删除了所有先前的更改,以及它们是否由无名开发人员完成。
然后它会向老板发送一封电子邮件,说明发生了什么,以及在登记期间丢失了多少工作。
没有第7次出现。
答案 1 :(得分:18)
我们有一个交通信号灯,显示我们的每日构建是否成功,测试失败或仅仅是不构建。
此外,每当我们收到客户上传时,我们都会有一个灯条亮起几秒钟。
答案 2 :(得分:9)
我们没有全天候工作人员,但我们的整个过程都有关键流程。我们创建了一个内部警报系统来通知我们严重的系统问题,关键任务过程失败等。它使用文本到语音来创建描述性消息,然后连接到我们的自动拨号器,以便使用消息。
答案 3 :(得分:4)
在网页设计公司工作我配置了我们的开发服务器,以便我们可以通过子域名实时查看项目的工作副本。因此,如果您的名字是乔,并且您正在使用项目喷射燃料,那么您将转到joe.jetfuel.test-example.com
,您可以立即看到您的更改而无需提交。
这是一个简单的黑客,它使用子域名作为部分目录结构。我们的htdocs路径看起来像htdocs/tag/project
。我们有一个脚本(你可以通过setup.test-example.com
访问的一个php应用程序),它会为你创建一个新的标签名称,并检查你想要的任何版本,并为该项目调用部署脚本。如果成功,它会转发到新的子域。然后,您可以通过samba共享处理此新副本。
这对我们来说非常有用,因为我们总是部署到相同的linux版本,我们的项目有简单的数据库要求。
我们这样做的原因是因为我们的开发人员在各种不同的平台上工作。除了修复这个平台问题,这对于查看更改和测试来说非常棒。我们有各种各样的标签,从人名,行李箱版本,测试标签,到jquery-menu-hack.jetfuel.test-example.com
现在我回头看,我想知道运行虚拟机会有多容易。
答案 4 :(得分:4)
我们有一个开发人员在一个不相信源代码控制的经典ASP网站上工作。代码从他的机器直接进入生产箱。这会导致更改丢失或无法恢复到稳定版本的问题。由于CruiseControl.Net具有监视目录的能力,因此我添加了一个项目,该项目在复制到生产时实际检入文件。从CC.Net的原始意图完全落后,但我们没有丢失任何更多的代码。
答案 5 :(得分:4)
放入一个预提交钩子,检查bug注释是指一个开放的bug,分配给执行签入的用户。 (SCMBug可以做到这一点)。
然后让生活变得非常有趣,拼写检查评论!! 提交注释和代码中的注释。 (拼写是我的好友)
通过设置为compayn标准的代码格式化程序运行代码;并将其区分为原始:如果它不是公司的官方格式:拒绝提交。
使用单元测试版本进行覆盖测试。
通过电子邮件发送给开发团队的所有错误/错误。
我留下了开发者的名字。他们知道他们做到了。
答案 6 :(得分:3)
不完全是黑客攻击,但IT开发人员必须拥有一些必备工具:
如果你正在使用subversion,你必须使用CommitMonitor。 (http://tools.tortoisesvn.net/CommitMonitor)它允许您监视svn存储库的新提交和&然后查看新提交。很棒,如果你想要保持你的团队正在做的事情。特别是如果你有几个需要观看的青少年。 ;)
Rsnapshot(http://www.rsnapshot.org/)也非常有价值 - 我们整整两个小时都有完整的文件系统备份快照,可以追溯到2年前,每天都有。它就像是文件系统的数据立方体!这给予的安心是纯粹的幸福。 :)
答案 7 :(得分:2)
几乎没什么黑客,但是在我们快速的VAX 11/730上,我们的夜间过程会在打印机上打印文件“BLAMMO.TXT”,如果出现问题。每天早上,第一站就是打印机进来。
答案 8 :(得分:2)
回到9年前的dotCom日,我不得不在两个不同的地点之间破解故障转移系统。我们有一个时髦的设置与powerbuilder前端网站和powerbuilder管理工具。数据存储在MSSQL 7.0中。 Web服务器使用IPX与SQL Server进行通信(不要问)。无论如何,我有责任提出故障转移计划。
我最终乱砍了一些linux盒子,让他们运行我们的外部DNS。每个地点一个。我们有一个远程站点w / webserver和sql server我得到了SQL事务复制工作在128k ISDN IPX连接(所有东西)。然后在我们的生产站点构建一个监视工具,将数据包发送到各种上游网络切换。如果我们经历了超过20%的主站点中断,监控工具在Debian框上运行perl脚本来更改DNS并指向我们的第二个。我们的中学有一个心跳与我们的主要DNS和监测站。它会复制记录,除非它丢失了两个连接然后它将转移到指向DNS到备份位置。
主站点将关闭主要位置的SQL Server以中断复制。使用128k ISDN IPX连接自动站点到站点故障转移:)
答案 9 :(得分:0)
回到我之前的工作,我们必须审核许多表以进行数据更改(插入,更新和删除)。我们的支持人员必须能够搜索这些数据以查找用户所做的更改。
已成为半永久性的临时解决方案是存储每个非选择查询。然而,这是一个庞大的系统,表每天增长约1.5GB。
我想出的解决方案是为外部列表中的所有表创建一个脚本,创建适当的触发器来审核每个表,行,列,前后,何时以及由谁将其存储在新的中审计表。此表增长了旧版本大小的10%,并存储了更多可用数据。它使我们能够创建一个用户界面来搜索和查看对我们数据所做的每一项更改,而无需为我们的支持团队或业务用户提供任何SQL知识。
答案 10 :(得分:0)
这是一个较低的水平,但我为我编写的用于编译代码的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)新的源代码片段将其名称添加到适当的变量中,其余部分将被处理。
答案 11 :(得分:0)
我们有许多项目的Twitter帐户,这些项目可以发布提交消息,构建通知,失败的单元测试,部署,错误跟踪活动等任何类型的事件。运行像Twitter Gwibber这样的客户端(显示每个新状态的弹出窗口)是与您感兴趣的项目上的活动保持联系的好方法。使用Twitter很好,因为您可以利用所有第三方应用程序 - 例如iPhone客户端。
答案 12 :(得分:0)
使用纹理/图像的绝对路径为VRML / 3d模型文件添加commit-hook检查。 f:/maya/my-textures/newproject/xxxx.png
只是不属于服务器。
答案 13 :(得分:-1)
早在1993年,当源控制系统真的很昂贵且不实用时,我所工作的公司有一个内部源代码控制,内置为4DOS脚本。它并不像大多数当前的源代码控制系统那样软化,例如它没有分支或集成,但它完成了支持修订历史,结账/签入和基本冲突解决的基本工作。