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

rgu*_*ult 7 ant jenkins

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

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

[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}
Run Code Online (Sandbox Code Playgroud)

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

 BuildDir=E:/builds/${ITEM_FULLNAME}
Run Code Online (Sandbox Code Playgroud)

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

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

我使用的是Jenkins版本1.476.

谢谢

Mar*_*nor 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>
Run Code Online (Sandbox Code Playgroud)

笔记:

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

更新

当Jenkins运行作业时,会设置许多环境变量.

以下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>
Run Code Online (Sandbox Code Playgroud)


Igo*_*sov 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>
Run Code Online (Sandbox Code Playgroud)