如何从Ant确定Jenkins构建目录?

时间:2012-08-07 17:32:11

标签: ant jenkins

我正在尝试迁移我编写的Ant脚本,以便在Jenkins框架内构建和部署项目(而不是从SVN post-commit钩子触发,这是我们最初处理事情的权宜之计)。一切都很棒,除了我需要为部署步骤暂存文件,我想把它们填入Jenkins为工作创建的'build'目录中(因为我的build.xml位于非项目特定的位置,$ { basedir}和$ {user.dir}没有指向所需的位置。

在Jenkins配置中,我设置了以下内容:

[詹金斯] 构建记录根目录:E:/ builds / $ {ITEM_FULLNAME}

[作业特定] 构建文件:C:\ vc-tools \ shadow \ build.xml

运行构建时,会正确启动脚本并创建特定于作业的构建目录,例如

E:\建立\测试\ 2012-08-07_12-51-21

我想从构建脚本中获取此目录,但无法弄清楚如何。我试过的一些事情:

 [echo] ${basedir}: C:\vc-tools\shadow
 [echo] ${user.dir}: C:\vc-tools
 [echo] ${env.workspace}: C:\Program Files (x86)\Jenkins\workspace\Test
 [echo] ${env.build_id}: 2012-08-07_12-51-21
 [echo] ${jenkins_home}: C:\Program Files (x86)\Jenkins
 [echo] ${BuildDir}: E:/builds/${ITEM_FULLNAME}

注意:对于最后一个,我试过传递:

 BuildDir=E:/builds/${ITEM_FULLNAME}

作为从Jenkins中的作业配置的属性(显然$ {}扩展不会在此上下文中发生。)

根据documentation,没有特定的环境变量设置为完整的构建目录路径 - 我可以通过硬编码E:\ builds root并添加到$ {env.build_id}来捏造它,但希望有一种更容易的方法来访问Jenkins公开的东西(Ant属性和环境变量)的完整路径,以使脚本更灵活。

我正在使用Jenkins版本1.476。

感谢

2 个答案:

答案 0 :(得分:12)

对于您的项目来说,在源代码旁边包含它的构建逻辑副本总是一个好主意。它使您的构建在整个机器上更加便携。

虽然说设置包含公共共享构建逻辑的构建文件也很常见。 ANT定义了以下任务来支持此类活动:

所以可能的解决方案是在项目目录的根目录中存储一个简单的build.xml文件:

<project name="my project" default="build">

  <include file="C:\vc-tools\shadow\common-build-1.0.xml" as="common"/>

  <target name="build" depends="common.build"/>

</project>

备注:

  • 在公共构建文件名中使用修订号是个好主意。这有助于使用旧逻辑保留与其他构建的向后兼容性。

更新

当Jenkins运行工作时,会设置一些environment variables

以下ANT逻辑将打印Jenkins工作区目录的位置:

<property environment="env"/>

<target name="run">
    <echo message="Jenkins workspace: ${env.WORKSPACE}"/>
    <echo message="Job directory: ${env.WORKSPACE}../../jobs/${env.JOB_NAME}"/>
    <echo message="Build data: ${env.WORKSPACE}../../jobs/${env.JOB_NAME}/build/${env.BUILD_ID}"/>
</target>

答案 1 :(得分:5)

这些天(Jenkins v.1.484)从上面的回答中“运行”目标应如下所示:

<target name="run">
    <echo message="Jenkins workspace: ${env.WORKSPACE}"/>
    <echo message="Job directory: ${env.WORKSPACE}/../../${env.JOB_NAME}"/>
    <echo message="Build data: ${env.WORKSPACE}/../../${env.JOB_NAME}/builds/${env.BUILD_ID}"/>
</target>