1

I have the following pipeline (Jenkinsfile):

@Library('mylib@master')

import com.mylib.*


pipeline {

    agent { label 'WindowsSlaveWS2016' }

    stages {
        stage('Demo') {
            steps {
                echo 'a'
                determineOS()
                echo 'b'
                // sh 'echo "[Version 1.0.0]" | tee -a changelog.txt'
                sayHello()
                //getServiceVersion('.', 'changelog.txt', 'myservice')
                // cat service.properties
                // sendEmail('failed', '[email protected]')
                script {
                    def utils = new Utils()
                    if (utils.isWindows()) {
                        echo '<-- Is windwos -->'
                    }
                    else {
                        echo '<-- Is linux -->'
                    }
                }
            }
        }
    }

}

determineOS() groovy script is a simple script that does the following:

#!/usr/bin/env groovy

def call() {
    if (System.properties['os.name'].toLowerCase().contains('windows')) {
        println "it's Windows"
    } else {
        println "it's not Windows"
    }
}

and utils.Windows() does the following:

#!/usr/bin/groovy

package com.ciplatforms;

class Utils implements Serializable {

    def isWindows() {
        if (System.properties['os.name'].toLowerCase().contains('windows')) {
            println "it's Windows"
            return true
        } else {
            println "it's not Windows"
            return false
        }
    }

}

I am running the job in a Windows machine as you can notice in the pipeline but the log displays the following:

Running on WindowsSlaveWS2016 in C:\Jenkins\workspace\test-pipeline-shared-library
[Pipeline] {
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Demo)
[Pipeline] echo
a
[Pipeline] echo
it's not Windows
[Pipeline] echo
b
[Pipeline] echo
Hello, human.
[Pipeline] script
[Pipeline] {
[Pipeline] echo
<-- Is linux -->
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

Any ideas why this is happening? Thank you.

1
  • How do you call this script in configuration page in Jenkins?
    – Vader
    Commented Feb 10, 2020 at 14:59

1 Answer 1

2

I got the answer. As Mark Waite answered here:

https://groups.google.com/forum/#!topic/jenkinsci-users/aGYt-OEYds8

Use the isUnix pipeline step rather than writing your own version of that step. The System.properties that you are using will execute on the master, not on the agent. When it executes on the master, it will report the os.name value of the master.

1
  • 1
    should accept your answer so it's closed. nice find Commented Feb 11, 2020 at 8:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.