当前位置: 首页 > 面试题库 >

如何确定Jenkins管道中的当前操作系统

佟颖逸
2023-03-14
问题内容

确定Jenkins管道正在运行的当前OS的方式是什么?

上下文:我正在构建一个共享的Jenkins管道脚本,该脚本应在所有平台(Windows,OSX,Linux)上运行,并在每个平台上执行不同的操作。

我尝试了类似的东西:

import org.apache.commons.lang.SystemUtils

if (SystemUtils.IS_OS_WINDOWS){
   bat("Command")
}
if (SystemUtils.IS_OS_MAC){
   sh("Command")
}
if (SystemUtils.IS_OS_LINUX){
   sh("Command")
}

但是即使它在Windows或Mac上运行,node它也总是进入SystemUtils.IS_OS_LINUX分支

我尝试了这样的快速管道。

node('windows ') {
     println ('## OS ' + System.properties['os.name'])
}
node('osx ') {
     println ('## OS ' + System.properties['os.name'])
}
node('linux') {
     println ('## OS ' + System.properties['os.name'])
}

每个节点都可以在具有正确操作系统的机器上正确运行,但是所有节点都可以打印 ## OS Linux

有任何想法吗?

谢谢费德


问题答案:

据我所知,詹金斯只区分Windows和Unix,即如果在Windows上使用bat,在Unix / mac /
linux上使用sh。因此,您可以在此处使用isUnix()(更多信息)来确定您使用的是Unix还是Windows,对于unix,请使用sh和@Spencer
Malone的答案来支持有关该系统的更多信息(如果需要)。



 类似资料:
  • 问题内容: 我正在编写几个节点外壳脚本,供在平台上开发时使用。我们有Mac和Windows开发人员。是否可以在Node中检查变量以便在一个实例中运行.sh文件,在另一个实例中运行.bat? 问题答案: 使用的变量是 在Mac上,变量返回。在Windows上,它返回(甚至在64位上)。 当前可能的值为: 我只是将其设置在我的jakeFile的顶部:

  • 在Jenkins管道中,当在特定节点上运行构建时,会在该代理上分配工作区。我们没有设置工作区路径,所以它是自动确定的。我知道工作区必须包含执行程序编号,以便在同一代理上同时运行相同作业时隔离构建。 但是工作区路径是如何构造的? 我们的构建被分配给一个特定的节点(有4个执行器),并且被配置为不允许并发构建。通常分配给: 在某个时刻,构建开始在executor 2上运行,但仍然使用与以前相同的工作区。

  • 问题内容: 在Jenkins管道中,当在特定节点上运行构建时,会在该代理上分配工作区。我们没有设置工作空间路径,因此它是自动确定的。我了解,当同一作业在同一代理上同时运行时,工作空间必须包含执行程序编号以隔离构建。 但是…工作空间路径究竟是如何构建的? 我们的构建被分配给一个特定的节点(具有4个执行程序),并且被配置为不允许并行构建。通常分配给它: 在某个时候,该构建开始在执行程序2上运行,但仍使

  • 我试图使用Groovy管道脚本获取Jenkins构建的当前工作区: 它返回:

  • 我正在研究文件操作插件 - 文件复制在詹金斯管道中的操作(詹金斯版本 - v2.73.2,詹金斯管道 - 2.5),我需要将文件从一个位置复制到具有不同文件夹结构的另一个位置。 预期: C:\workspace\Hello - F:\测试\样品 - 下面是我正在使用的命令,它正在复制整个Hello目录,而不是它按预期的方式运行。 F:\测试\示例\工作区\您好 - 感谢您的参与。

  • 问题内容: 我需要在构建开始之前清除工作空间。我尝试分阶段使用,但在声明性管道中,检出首先发生,而在运行阶段时,检出的代码也会被清除,这是不希望的。在声明式管道中签出之前,我们如何清除工作空间? 问题答案: 在Git运行时使用VCS的方法