How to determine the current operating system in a Jenkins pipeline How to determine the current operating system in a Jenkins pipeline jenkins jenkins

How to determine the current operating system in a Jenkins pipeline


Assuming you have Windows as your only non-unix platform, you can use the pipeline function isUnix() and uname to check on which Unix OS you're on:

def checkOs(){    if (isUnix()) {        def uname = sh script: 'uname', returnStdout: true        if (uname.startsWith("Darwin")) {            return "Macos"        }        // Optionally add 'else if' for other Unix OS          else {            return "Linux"        }    }    else {        return "Windows"    }}


As far as I know Jenkins only differentiates between windows and unix, i.e. if on windows, use bat, on unix/mac/linux, use sh. So you could use isUnix(), more info here, to determine if you're on unix or windows, and in the case of unix use sh and @Spencer Malone's answer to prope more information about that system (if needed).


I initially used @fedterzi answer but I found it problematic because it caused the following crash:

org.jenkinsci.plugins.workflow.steps.MissingContextVariableException: Required context class hudson.Launcher is missing

when attempting to call isUnix() outside of a pipeline (for example assigning a variable). I solved by relying on traditional Java methods to determine Os:

def getOs(){    String osname = System.getProperty('os.name');    if (osname.startsWith('Windows'))        return 'windows';    else if (osname.startsWith('Mac'))        return 'macosx';    else if (osname.contains('nux'))        return 'linux';    else        throw new Exception("Unsupported os: ${osname}");}

This allowed to call the function in any pipeline context.