0

我正在尝试在 Jenkins 上使用 ant 运行耳朵任务。ant 任务在我的本地机器上成功构建。

但是,当我尝试使用 Jenkins 构建时,出现以下错误:“指定的工作区无效”。我尝试对工作区值进行硬编码,尝试从环境变量中获取它,还尝试在自定义工作区中定义它,然后访问它。

但我不断收到以下错误:

[subProjEAR] $ cmd.exe /C '"F:\Build\Ant\apache-ant-1.8.4\bin\ant.bat && exit       %%ERRORLEVEL%%"'
 Buildfile: E:\Jenkins\jobs\ProjectDev\workspace\subProjEAR\build.xml

init.env:

init.typedefs:
Trying to override old definition of task apt

init:

BUILD FAILED

E:\Jenkins\jobs\ProjDev\workspace\subProjEAR\build.xml:81: Specified workspace directory "E:\Jenkins\jobs\ProjDev\workspace" is not valid.

Total time: 0 seconds
Build step 'Invoke Ant' marked build as failure`

第 81 行附近的代码如下所示

    <target name="init" depends="init.env,init.typedefs" unless="init.executed">
    <property name="init.executed" value="true" />
    <fail unless="workspace" message="The workspace property needs to be set!" />
    <dirname property="project.dir" file="${ant.file}" />
    <property name="echo.metadata" value="false" />

    <!-- Line below is no 81 -->
    <mdimport workspace="${workspace}" pjdir="${project.dir}" echo="${echo.metadata}"> 


    </mdimport>
    <property name="archive.name" value="${project.name}.ear"/>
    <property name="uri" value=""/>
    </target>

我在“本地机器”中创建了一个名为 WORKSPACE 的环境变量。回显可以正确打印 (C:\bea\user_projects\w4WP_workspaces\myProjWS)。我还在 Jenkins 机器上设置了 WORKSPACE 环境变量。这是与 Jenkins 相同的工作区。Jenkins 上的 Echo 打印以下内容:

Buildfile: E:\Jenkins\jobs\ProjectDev\workspace\subProjEAR\build.xml

init.env:

init.typedefs:
Trying to override old definition of task apt

init:
     [echo] workspace : E:\Jenkins\jobs\ProjectDev\workspace 
     [echo] weblogic workspace : ${env.WORKSHOP_WORKSPACE}


BUILD FAILED
E:\Jenkins\jobs\ProjectDev\workspace\subProjEAR\build.xml:85: Specified workspace directory "E:\Jenkins\jobs\ProjectDev\workspace" is not valid.

请帮忙。

4

1 回答 1

0

WORKSPACE从 ANT访问的最佳方式是:

<property environment="env" />
<echo message="${env.WORKSPACE}" />

这似乎不是 Jenkins 错误,因为 Jenkins 能够从该工作区成功加载构建文件。line: 81该 build.xml上有什么内容?问题的原因就在那里。粘贴您的构建文件的片段line: 81

在作者评论后编辑
所以,正如我猜想的那样,这与 Jenkins 没有任何关系。问题在于<mdimport>任务。到目前为止,我已经能够找到关于它的零文档,除了它来自 Weblogic

正是这个任务引发了错误。考虑到 Weblogic 和 Jenkins 之间没有什么关系,我怀疑你是否应该通过 Jenkinsworkspace来完成这项任务。它可能正在寻找一些 Weblogic 工作区。

您是否在 Jenkins 的子文件夹下签出了 Weblogic 工作区,例如my_checkout_folder?如果是这样,也许您应该${workspace}/my_checkout_folder用于该任务?

某人的这个问题中,他们正在阅读${workspace}/workspace.xml文件

此示例中(看起来与您的示例非常相似), 的值workspace来自环境变量WORKSHOP_WORKSPACE。您是否在本地机器(它工作的机器)上设置了该环境变量?

可能的原因

在审查您的问题时,我才想到它。

  • 你说它适用于本地机器,但不适用于 Jenkins。
  • 如果您在两者上使用相同的 ant 文件,则意味着您希望workspace本地计算机上存在环境变量,对吗?(否则相同的 ant 脚本将无法在本地运行)
  • Jenkins 在执行构建时有自己的环境变量workspace,它与您在本地机器上可能拥有的环境变量无关。Jenkins 的workspace变量定义了其作业的工作目录。
  • 即使您workspace在 Jenkins 机器上手动设置全局环境变量,它也会在workspace每次运行时被作业覆盖。

进行以下测试:

  • workspace在本地机器上 回显环境变量
  • 在 Jenkins 作业中,使用“执行 shell”(或“执行 windows 批处理命令”)workspace从作业中回显。

将结果粘贴到此处。但是您也可以自己比较它们。

于 2014-08-21T13:16:57.067 回答