1

我确实有一个 jenkins 工作,我从执行 ant 构建脚本的 Maven 插件中执行命令。由于有 2 个镜像服务器,该作业还执行 2 个 ant 调用。像这样的东西:

usr/bin/ant -v -d -f /utils_repo/build.xml ${target} -propertyfile /tmp/myjob/install.properties

Maven 连接到每个服务器并执行类似的操作。我的问题是如何在 2 个 ant 调用实例中共享 jenkins 工作开始时的时间戳。在我的 ant 工作中,我在输入新代码之前有一个备份构建步骤,但是如果在第一台主机上完成了转储/备份,我需要输入逻辑,不要在第二台主机上执行,因为它们共享 mysql 实例和在 nfs 挂载上的核心文件,现在发生的情况是没有逻辑,当第二个 ant 调用在第二个服务器上运行转储时,它会用新数据和更新的 mysql 覆盖第一个实例的先前转储。

所以我正在考虑创建一个触摸任务来触摸一些文件,因为我在两台服务器之间共享目录,但是两个服务器实例都有相同的 build.xml,所以触摸将在第二次 ant 调用时执行并覆盖修改时间的第一个蚂蚁呼叫。

我想我是否可以在 2 个蚂蚁工作中分享工作开始时间的詹金斯时间戳属性。不知道这是否可能。

提前感谢您的建议。

4

1 回答 1

0

我建议您应该使用 Jenkins 设置的环境变量BUILD_NUMBER并将其存储在您的 nfs 上,例如作为属性文件。

因此,如果该属性文件不存在,或者从那里加载的属性值与 Jenkins 设置的环境变量不匹配,则意味着当前节点是该 Jenkins 作业的第一个运行节点。所以它可以做备份。该节点将使用当前内部版本号覆盖共享属性文件。

如果加载的属性与当前的内部版本号匹配,则意味着第一次运行已经完成,无需备份。

实施提示:

  • 将内部版本号添加到命令行

    usr/bin/ant -v -d -f /utils_repo/build.xml ${target} -propertyfile /tmp/myjob/install.properties -Dexpected.jenkins.build.number=$BUILD_NUMBER
    
  • 使用 ant contrib if/then/else 任务:http ://ant-contrib.sourceforge.net/tasks/tasks/index.html

  • 使用以下命令编写属性文件:

    <echo file="/mnt/nfs/shared/jenkins.properties">jenkins.build.number=$expected.jenkins.build.number</echo>
    
于 2013-06-12T19:44:03.313 回答