我正在尝试迁移我编写的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。
感谢
答案 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>