【问题标题】:Can Hudson export/set/use my environment variables for the msbuild task?Hudson 可以为 msbuild 任务导出/设置/使用我的环境变量吗?
【发布时间】:2010-11-11 17:46:19
【问题描述】:

我在 Vista 上运行 hudson 并为 C++ 解决方案(VS 2008)调用 MSBuild。

我无法找到导出现有用户或系统环境变量的方法。

我可以通过 hudson 手动设置环境变量,但我不想这样做 - 我想使用已经设置的现有变量。有没有办法做到这一点?

本质上,我希望能够从环境变量列表中进行选择,并告诉 hudson 将它们映射/导出到它产生的进程/工作空间。

Hudson 作为服务运行。

【问题讨论】:

  • 两个问题:1、你关心的环境变量在哪里设置?在您的用户资料中? 2. 如何开始 Hudson?它作为服务运行吗? --- 当 Hudson 作为服务运行时,它以 SYSTEM 用户身份运行,该用户的环境与您的登录帐户不同。
  • 作为服务运行。最初它们是用户环境变量,但后来我意识到这可能行不通,所以我将它们设置为系统环境变量。
  • 我现在怀疑这个问题是在我将环境变量设置为系统环境变量后我没有重新启动服务。这是最有意义的。我会重试的。

标签: visual-studio-2008 msbuild continuous-integration hudson


【解决方案1】:

蒂姆,

Hudson 将许多参数导出为环境变量,例如:

BUILD_ID=2012-03-19_12-43-52
BUILD_NUMBER=74
HUDSON_HOME=C:\Documents and Settings\john\.hudson

从 Hudson v2.0.1 开始,您还拥有发起构建的 Hudson 用户:

HUDSON_USER=dan

环境变量的完整列表在这里:Hudson Set Environment Variables

如果您希望将其他参数传递给您的工作,最好的方法是使用 Hudson 的Parameterized Build

请注意,对于 Windows,您应该使用约定“%MY_PARAM%” (如果是 Unix 上的“$MY_PARAM”)。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。我正在使用 MSBuild 插件,我的 msbuild 项目文件是:


    http://schemas.microsoft.com/developer/msbuild/2003">





    目标>
    项目>

    此文件在控制台中工作,在 hudson 输出中:

    目标 Foo 编译: 包括:“C:\Program Files\Microsoft SDKs\Windows\v6.1\Include” LIB:“C:\Program Files\Microsoft SDKs\Windows\v6.1\Lib” 路径:"C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin";C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;c:\Program Files\Microsoft SQL服务器\90\工具\binn\ __________________________________________________

    但是我的构建失败了,因为 INCLUDE 路径没有通过 throw MSBuild Task...

    【讨论】:

      【解决方案3】:

      我刚刚通过下载最新版本的 Hudson (1.316) 进行了快速测试,并创建了一个简单地运行“set”的作业(如果您不熟悉这一点,在控制台中运行 set 会列出所有当前范围内的环境变量)。

      这是控制台输出,这些是所有环境变量 - 用户和系统,以及 Hudson 自己定义的变量,以使 Hudson 元信息可用于作业:

      Started by user anonymous
      [workspace] $ cmd /c call D:\Temp\hudson5023210513071219278.bat
      
      C:\Documents and Settings\jack\.hudson\jobs\Environment Variable Test\workspace>set
      ALLUSERSPROFILE=C:\Documents and Settings\All Users
      APPDATA=C:\Documents and Settings\jack\Application Data
      BUILD_ID=2009-07-19_22-59-42
      BUILD_NUMBER=1
      BUILD_TAG=hudson-Environment Variable Test-1
      CommonProgramFiles=C:\Program Files\Common Files
      COMPUTERNAME=BEEBLEBROX
      ComSpec=C:\WINNT\system32\cmd.exe
      EXECUTOR_NUMBER=0
      HOMEDRIVE=C:
      HOMEPATH=\Documents and Settings\jack
      HUDSON_COOKIE=a0bc798a-20ab-40bc-aad6-f4a331567999
      HUDSON_HOME=C:\Documents and Settings\jack\.hudson
      JAVA_HOME=c:\program files\java\jdk1.6.0
      JOB_NAME=Environment Variable Test
      LOGONSERVER=\\BEEBLEBROX
      NUMBER_OF_PROCESSORS=1
      OS=Windows_NT
      Os2LibPath=C:\WINNT\system32\os2\dll;...blah...blah...blah...
      PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
      PROCESSOR_ARCHITECTURE=x86
      PROCESSOR_IDENTIFIER=x86 Family 15 Model 15 Stepping 0, AuthenticAMD
      PROCESSOR_LEVEL=15
      PROCESSOR_REVISION=0f00
      ProgramFiles=C:\Program Files
      PROMPT=$P$G
      QTJAVA=C:\Program Files\Java\jre1.6.0\lib\ext\QTJava.zip
      SystemDrive=C:
      SystemRoot=C:\WINNT
      TEMP=D:\Temp
      TMP=D:\Temp
      USERDOMAIN=BEEBLEBROX
      USERNAME=jack
      USERPROFILE=C:\Documents and Settings\jack
      windir=C:\WINNT
      WORKSPACE=C:\Documents and Settings\jack\.hudson\jobs\Environment Variable Test\workspace
      
      C:\Documents and Settings\jack\.hudson\jobs\Environment Variable Test\workspace>exit 0 
      Finished: SUCCESS
      

      我怀疑您的变量根本没有在 Hudson 流程所有者的环境中定义(或类似的东西,我们需要有关您的 Hudson 设置的更多信息才能真正了解)。


      编辑:另一个注意事项,您可以查看 /systemInfo 以查看 Hudson 可用的所有系统属性和环境变量。请记住,当 Hudson 生成一个新进程来工作时,所有环境变量都应该可供子进程使用,除非 Hudson 首先明确删除它们(我相信这更像是操作系统的特性而不是 Java)。因此,除非您看到任何详细说明删除某些环境变量的文档(如果是这样,我相信开发人员会有这样做的理由),我首先会检查这些变量是否对 Hudson 可用.

      【讨论】:

      • 我会调查的。我以为我的流程配置正确。
      【解决方案4】:

      从这里获取你需要的东西:

      %comspec% /k ""h:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"" x86

      【讨论】:

      • 我不确定你的意思。这是否意味着使用 %comspec% 调用我的 bat 文件将解决我的环境变量不起作用的问题?
      • 如果你去看那个批处理文件,里面有你需要的所有 SET。
      • 这个问题最初似乎是在询问VS环境变量。进一步澄清表明它是关于让自定义构建环境变量出现在环境中。
      【解决方案5】:

      构建和批处理文件是两个独立的东西,批处理文件会吃掉构建中生成的所有错误,与将输入发送到批处理文件时的其他方式相同。

      【讨论】:

      • 你能澄清一下吗?你是什​​么意思,'批处理文件吃掉了构建产生的所有错误'?
      • 我认为他的意思是 hudson 不会知道错误的输出等。这是很好的信息,但与我遇到的问题无关。
      • 是的,这很难弄清楚,但我感谢任何试图帮助我的人。
      【解决方案6】:

      您可以尝试使用msbuild 插件来避免整个环境设置问题。您只需将插件指向 msbuild 的位置,一切都可以从那里运行。

      【讨论】:

      • 我尝试了 msbuild 插件。在与它的设置进行斗争后,我让它运行了,但我遇到了同样的问题。我的 SLN/vcproj 项目依赖于环境变量来获取某些包含路径。这些没有被 hudson 导出到 msbuild 工作区。
      猜你喜欢
      • 2010-11-22
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 2017-11-11
      相关资源
      最近更新 更多