Как получить главный IP-адрес / имя хоста Jenkins на этапе конвейера, выполняемого на ведомом устройстве?
У меня есть декларативный конвейер Jenkins, в котором я выполняю один этап и тестирую его на другом компьютере. У меня также есть центр Selenium, работающий на той же машине, что и мастер Jenkins.
pipeline {
agent none
stages {
stage('Build') {
agent { node { label 'builder' } }
steps {
sh 'build-the-app'
stash(name: 'app', includes: 'outputs')
}
}
stage('Test’) {
agent { node { label 'tester' } }
steps {
unstash 'app'
sh 'test-the-app'
}
}
}
}
Я бы хотел, чтобы тесты Selenium, которые выполняются на этапе тестирования, подключались к концентратору Selenium на главной машине Jenkins, а это значит, что мне нужно получить IP-адрес или имя хоста главной машины Jenkins от подчиненного устройства.
Есть ли способ сделать это? Основной URL / имя хоста Jenkins отсутствует в переменных среды, и я не уверен, как еще получить IP-адрес главного мастера Jenkins.
4 ответа
Не уверен, что есть лучшие способы сделать это, я могу запустить
def masterIP = InetAddress.localHost.hostAddress
println "Master located at ${masterIP}"
в моем Jenkinsfile. При первом запуске этого кода в моем Jenkinsfile сборка не удалась с
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:
Scripts not permitted to use method java.net.InetAddress getHostAddress
at org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.StaticWhitelist.rejectMethod(StaticWhitelist.java:178)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor$6.reject(SandboxInterceptor.java:243)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:363)
at org.kohsuke.groovy.sandbox.impl.Checker$4.call(Checker.java:241)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:238)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.java:28)
Я должен был утвердить подпись метода в Jenkins, перейдя к Manage Jenkins
> In-process Script Approval
,
Вдохновленный @kayvee для использования BUILD_URL, у меня сработало следующее:
def getJenkinsMaster() {
return env.BUILD_URL.split('/')[2].split(':')[0]
}
Это возвращает имя хоста или IP-адрес мастера, как это будет отображаться в URL сборки. Если вам также требуется номер порта, удалите второй split()
,
Чтобы получить текущий подчиненный хост:
Jenkins.getInstance().getComputer(env['NODE_NAME']).getHostName()
Чтобы получить мастер-хост:
Jenkins.getInstance().getComputer('').getHostName()
Вы можете просто сделать это так:
stage("SomeStageName") {
agent { label 'exampleRunOnlyOnLinuxNode' }
steps {
script {
println "\n\n-- Running on machine: " + "hostname".execute().text
}
}
}
а также "hostname -i".execute().text
напечатает IP
Попробуйте это ниже команды оболочки
def host= sh(returnStdout: true, script: 'echo ${BUILD_URL/https:\\/\\/} | cut -d "/" -f1').trim()
println("Hostname : ${host}")