我正在考虑在哈德森建立工作岗位的最佳方式,以及划分什么 工作。我将使用.NET应用程序作为示例,因为这就是我 我现在正在努力,但我认为很多想法都是通用的。
这些是我想要执行的步骤,而不考虑 将事情分解为工作但仍在考虑什么 依赖关系是:(我希望你理解我的符号,< - 意思是 取决于和[X] = aaaaa意味着aaaaa是任务的描述 [X]。 )
如果我把所有这些分成不同的工作:
如果我把所有步骤分成不同的项目,我的主要问题是 如何在不同项目之间获取这些文件,这些文件 以一种很好的方式(我当然可以转向硬编码文件路径, 但这似乎不灵活,但我可能错了。)
另一方面,如果我将它们分成不同的项目,我会得到 每个项目的复杂程度都低于我填写所有这些项目时的复杂程度 步入单个项目。如果我有可能很难维持 一个项目中有很多东西。我也无法逃跑 并行的并行项目,我想会加快整体 过程
答案 0 :(得分:0)
我对'工作'有不同的理解。在我的情况下,我正在使用Hudson构建多个项目,对于某些项目,我有多个工作,但不是出于上述原因。
我使用像Ant或Maven这样的项目构建工具来制作我的构建的一些非常具体的步骤,例如你的[O]或[D]任务。对于更通用的步骤,我使用处理此过程的hudson插件,例如运行单元测试,部署工件。
我想你会发现很多这些插件都是跨语言的。
然而,Hudson这是一个令人惊叹的强大的持续集成工具,我可以说它是由Maven和它的插件完成的。代码覆盖率报告,findbugs报告,项目站点生成,javadoc生成,字节代码检测是我依赖Maven做的一些任务。
所以,当我想为每个构建创建一个不同的最终目标时,我使用不同的工作,而不是为了创建一个我希望成为最终工件集的元素链。
例如,我有一份工作,每小时构建我的应用程序并在出现任何错误时创建电子邮件报告,并且我为同一个项目生成第二份工作,生成该项目的版本,这个是手动调用的我用它来生成我必须组装的所有文档,报告和工件,以便稳定地发布我的项目。
希望我对哈德森的看法有所帮助。
答案 1 :(得分:0)
你列出了很多工作任务。为每项任务找一份工作通常没有意义。将它们分组更有意义。例如,根据我的经验,它不会为你买一件单独的结账工作。
请记住,更多的工作会使构建过程更加脆弱,并使维护更加困难和复杂。因此,首先设定您的目标/策略,然后将构建过程划分为单个作业。
我追求的理念是频繁登记到存储库以及每个签入都不应该破坏构建。这意味着我需要确保开发人员在签入后获得快速反馈。所以我需要一个工作C,B,T,W以及S这个顺序。如果您愿意,也可以使用此作业运行O和F.这个订单给你带来了什么?您可以获得有关最重要项目的快速反馈,并编译代码。第二个最重要的项目是,单元测试是否完成他们应该做的事情(单元测试)。然后针对不太重要的项目(编译器警告和编码标准)进行测试。之后,您可以运行统计信息。就个人而言,我会在夜间构建中运行O(ToDos)和F(代码分析),它运行整个版本。但是你也可以在每次签到时运行整个版本。
如果需要更快的工件,我只会将构建/发布过程分成更小的步骤。对我来说,当工作运行长达15分钟时通常是可以接受的。为什么?因为如果它中断(可能小于2分钟)我得到快速反馈,因为作业在此处停止并且不运行其他(现在无用的)任务。有时我会并行工作。对于并行执行和分割作业时,我主要使用标准依赖项(“作业后构建...”)到目前为止,触发依赖项目,但大多数情况下我使用parametrized trigger plugin。我越来越多地使用join plugin并行运行一些步骤,但只有两个部分都完成后才能继续。
要在两个作业之间传递文件,我曾经使用外部存储库(只是Windows上的共享目录),并将文件路径作为参数传递给下一个作业。我切换了行为,现在使用Hudson的归档工件函数,并将作业运行的URL传递给下一个作业,通过HTTP下载它们。这消除了在Unix上安装Windows共享的技术问题(即使CIFS做得非常好)。此外,您可以使用Clone Workspace SCM插件,如果您需要其他工作中的整个工作区,这将有所帮助。