33

我正在尝试在哈德逊建立我们的构建过程。

工作 1 将是一个超级快速(希望如此)的持续集成构建工作,它将被频繁构建。

工作 2,将负责定期运行或手动触发的综合测试套件。

Job 3 将负责在代码库中运行分析工具(很像 Job 2)。

我尝试使用“高级项目选项 > 使用自定义工作区”功能,以便在 Job 1 中编译的代码可以在 Job 2 和 3 中使用。但是,似乎所有构建工件都保留在 Job 1 工作区中。我这样做对吗?有没有更好的方法来做到这一点?我想我正在寻找类似于构建管道设置的东西......以便可以共享事物并且可以分阶段执行适当的作业。

(我也考虑过使用“批处理任务”......但似乎无法安排这些任务?只能手动触发?)

欢迎任何建议。谢谢!

4

8 回答 8

15

您可能想尝试 Copy Artifact 插件:

http://wiki.hudson-ci.org/display/HUDSON/Copy+Artifact+Plugin

您的持续工作可以构建必要的工件,而您的其他两项工作可以将它们拉进来进行分析。

于 2010-11-09T15:10:22.110 回答
7

Hudson 有一个插件可以解决这个问题:http ://wiki.hudson-ci.org/display/HUDSON/Clone+Workspace+SCM+Plugin (链接目前已损坏)

对应的 Jenkins 页面在这里:https ://wiki.jenkins-ci.org/display/JENKINS/Clone+Workspace+SCM+Plugin

于 2010-03-26T02:21:16.823 回答
2

是的,那个 wiki 页面并不是很有帮助,因为它试图让它听起来非常优雅。事实是,如果您必须将内容从一份工作传递到另一份工作,那么 Hudson 还不能非常优雅地支持工作链。

我还在使用 zip-up-and-copy-workspace 方法将工作空间从一项工作转移到另一项工作。我有一个快速构建、完整分析构建,然后是分发构建。在这两者之间,我使用 Ant 生成时间戳,并使用“build-stamps”来标记哪个作业的编号构建了哪个其他作业的编号。指纹识别功能有助于跟踪文件,但由于我不打算归档工作区 zip,因此指纹识别对用户来说毫无用处,因为他们实际上看不到工作区 zip。

于 2009-06-17T09:00:08.893 回答
1

你看过哈德逊维基吗?具体来说:将大工作拆分为较小的工作

于 2009-05-09T20:39:31.647 回答
0

Hudson 似乎没有用于构建工件的内置存储库。我们的解决方案是创建一个。

我们在一个 Windows 环境中,所以我创建了一个可以被所有 Hudson 服务器访问的共享(我们为相关服务提供一个公共帐户,因为系统帐户无法通过网络访问资源)。

在我们的构建脚本 (ant) 中,我们有任务将资源构建从其他作业复制到本地工作区,而生成工件的作业将它们复制到公共存储库中。

在其他环境中,您可以通过 FTP 或任何其他移动文件的机制发布和获取。

发布和获取任务的简单示例:

<!-- ==================== Publish ==================================== -->
<target name="Publish" description="Publish files">
  <mkdir dir="${publish.dir}/lib" />
  <copy todir="${publish.dir}/lib" file="${project.jar}"/>
</target>

<!-- ==================== Get ==================================== -->
<target name="getdependencies" description="Get necessary results from published directory">
  <copy todir="${support.dir}">
    <fileset dir="${publish.dir}/lib">
      <include name="*.jar"/>
    </fileset>
  </copy>
</target>
于 2009-06-11T23:47:54.273 回答
0

我遇到了同样的问题,我最终选择的是针对长期任务的单独项目。这些项目的第一步是将所有文件从 Job 1 的工作区(即最后一次构建)复制到 Job 2/3/etc 工作区。这通常有效,除非 Job 1 在 Job 2/3 开始时正在构建,因为它会得到一个不完整的工作区。您可以通过使用哨兵文件检测作业 1 中的“构建结束”来解决此问题,或者使用 Hudson 锁插件(我没有尝试过)。

如果您假设其他作业相对于 %WORKSPACE% 的位置,则不必使用自定义工作

于 2009-05-09T21:20:33.153 回答
0

我同意手动作业之间的当前复制文件/工件/工作空间不够优雅。

此外,我发现必须归档巨大的 tgz/zip 文件会浪费空间/时间。在我们的例子中,这些文件很大(1.5G)并且需要很长时间来打包/归档/指纹/解包。

所以我选择了一个稍微优化的变体:

  • 作业 1/2/3 都签出/克隆相同的源存储库,但是
  • 作业 1 仅打包实际上是构建工件的文件
    • 使用 Git 使这变得简单快捷git ls-files -oz,不确定其他 SCM
  • 使用 Copy Artifact 插件传输文件
  • 在我们的例子中,这会将这些文件的大小减少到 1/3 -> 加速,减少浪费的空间
于 2011-11-05T09:14:38.590 回答
0

我现在正在做类似的事情。我建议避免尝试在同一个共享工作区中运行许多作业。我只遇到过这个问题。

我正在使用 Maven 和自由形式的项目类型。一组作业在版本控制系统中的文件触发时运行。他们创建本地快照工件。第二组作业每晚运行并设置集成测试环境,然后在其上运行测试。

如果您不使用 Maven;一种选择是在磁盘上设置一个区域,并在作业一中的最后一步将工件复制到该位置。工作二的第一步应该是移动这些文件。运行你需要运行的任何东西。

至于工作三,现在有 findbugs/checkstyle/pmd 等 Hudson 的所有插件。我建议只创建一个作业 1 的版本,它会进行干净的夜间结帐并在您的代码库上运行这些版本。

于 2009-05-11T22:23:53.697 回答