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

标签 ant jenkins

我正在尝试迁移我编写的 Ant 脚本,以从 Jenkins 框架内构建和部署项目(而不是从 SVN 提交后 Hook 触发,这是我们最初处理事情的权宜之计)。一切都很好,除了我需要为部署步骤暂存文件并且我想将它们填充到 Jenkins 为该工作创建的“构建”目录中(并且由于我的 build.xml 位于非项目特定的位置,${ basedir} 和 ${user.dir} 不指向所需的位置)。

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

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

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

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

E:\builds\Test\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。

谢谢

最佳答案

对于您的项目来说,在源代码旁边包含其构建逻辑的副本总是一个好主意。它使您的构建更易于跨机器移植。

话虽如此,设置包含通用共享构建逻辑的构建文件也很常见。 ANT 定义了以下任务来支持此类事件:

  • include
  • import

  • 因此,一个可能的解决方案是在项目目录的根目录中存储一个简单的 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>
    

    关于ant - 如何从 Ant 确定 Jenkins 构建目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11851128/

    相关文章:

    python - 如何在 jenkins 构建中激活 conda 环境

    java - 我可以在 ANT 中使用 less4j 将 less 编译成 css 吗?

    java - Clover 无法检测 UTF-8 源

    java - Spring 启动:unable to open nested entry 'WEB-INF/lib-provided/ecj-3.12.3.jar'

    运行 ant 时未找到 javadoc.exe

    jenkins - Jenkins使用Gradle守护程序构建失败

    amazon-web-services - 与Jenkins生成的zip文件一起部署时,Lambda函数将引发未找到类的异常

    java - 尽管向项目添加了构建器,但项目属性未显示构建路径

    memory-management - Jenkins 主实例需要多少内存?

    arrays - 在 Groovy 中检索数组数组中元素的索引