'在Windows上攻击Ubuntu'詹金斯没有工作 - 詹金斯工作挂起

时间:2018-05-01 14:14:01

标签: jenkins windows-subsystem-for-linux repo

我们使用repo和gerrit工具来管理我们的git存储库和代码审查。

' repo init'和' repo sync'我们的linux奴隶工作正常,但我们在Windows奴隶上遇到了重大问题:

  1. 在Jenkins' Execute shell'中给出Shebang指令在Windows上被忽略。框,所以如果我们在windows slave(MINGW_32,MINGW_64,CYGWIN64,Ubuntu Bash)上安装了多个shell,则无法通过指定shebang instcution来强制脚本在特定shell中运行 - 它只是没有。工作。

  2. 我们设法运行了“repo sync”#39;在MINGW64 shell上的jenkins的windows slave上 - 它随Git for Windows安装一起提供。但是,' repo sync'在这里超级慢。我们已经尝试了几乎所有的命令行开关和' repo sync'仍然是瓶颈。完成' repo sync'需要将近10分钟。在现有工作空间中,只有少数新变化被吸引进来。

  3. 我们在Windows上的Ubuntu上安装了Bash'在一台非jenkins机器上,尝试了“repo sync”#39;从那里开始瞧!它在几分钟内完成。

  4. 现在,麻烦的是我们无法在Windows上使用Ubuntu上的' Bash'来自詹金斯。 如果我们使用Jenkins' Execute shell'框,我们无法弄清楚如何强制它使用Ubuntu bash shell,因为在Windows奴隶上忽略shebang指令(知道问题)

  5. 如果我们使用Jenkins'执行Windows批处理命令'框,并运行一些列表: bash -c ls 这可以在本地机器上运行,但是如果从windows奴隶上的jenkins运行,那么工作就会挂起,我们会看到旋转齿轮进度图标,最终我们必须杀死jenkins工作。

    可能我们需要修改一些windows环境变量来强制jenkins使用这个shell。 bash.exe位于C:\ Windows \ System32中,它已经是PATH变量中的第一个条目,所以我们不确定我们最终如何使用Jenkins的Ubuntu bash shell。

1 个答案:

答案 0 :(得分:0)

我相信这是因为在用户上下文中运行Windows 10时,不允许Jenkins代理从C:\ Windows \ System32执行。奇怪的是,登录用户在命令提示符下没有受到相同的限制。

您可以通过将所需的可执行文件(例如bash.exe,curl.exe等)从C:\ Windows \ System32复制到C:\ bin并将该新位置添加到路径中来解决此问题。例如:

set Path=C:\bin\;%Path%
bash -c ls .