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.