It is often the case that you run a staging / test Jenkins server that has identically configured jobs as the production one. In such cases you want your pipeline to be able to distinguish in which system it runs on.
One way to do so it by checking the value of the BUILD_URL
environment variable. However, this is not very helpful when you’re running the master inside a container, in which case you get back the container hostname in response.
There are also a number of solutions in StackOverflow you can look at, but you may opt to utilise the fact that you can add labels to each master accordingly and then query the master for the value of the labels it carries. Our solution depends on the httpRequest plugin in order to query the master.
import groovy.json.JsonSlurper
def get_jenkins_master_labels() {
def response = httpRequest httpMode: 'GET', url: "http://127.0.0.1:8080/computer/(master)/api/json"
def j = new JsonSlurper().parseText(response.content)
return j.assignedLabels.name
}
def MASTER_NODE = get_jenkins_master_labels()
pipeline {
agent {
label 'docker'
}
stages {
stage("test") {
steps {
println MASTER_NODE
}
}
}
}
The trick here is that the part outside of the pipeline { ... }
block runs directly on the master, so we can go ahead and call http://127.0.0.1:8080/computer/(master)/api/json
to figure out stuff. get_jenkins_master_labels()
queries the master and returns a list of all the labels assigned to the master (or a single string, master
if no other labels are assigned to it). By checking the values of the list, one can infer in which Jenkins environment they are running on and continue from there.