Jenkinsの宣言型パイプラインがあり、あるステージでビルドし、別のステージで別のマシンでテストします。また、Jenkinsマスターと同じマシンでSeleniumハブを実行しています。
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テストをJenkinsマスターマシンのSeleniumハブに接続し直したいので、スレーブからJenkinsマスターマシンのIPアドレスまたはホスト名を取得する必要があります。
これを行う方法はありますか? JenkinsマスターのURL /ホスト名が環境変数に含まれておらず、JenkinsマスターのIPアドレスを取得する他の方法がわかりません。
これを行うためのより良い方法があるかどうかわからない、私は実行することができます
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)
Manage Jenkins
> In-process Script Approval
に移動して、Jenkinsのメソッドシグネチャを承認する必要がありました。
@kayveeからBUILD_URLを使用するように促され、次のことが私から得られました。
_def getJenkinsMaster() {
return env.BUILD_URL.split('/')[2].split(':')[0]
}
_
これにより、ビルドURLに表示されるマスターのホスト名またはIPが返されます。ポート番号も必要な場合は、2番目のsplit()
を削除してください。
以下のシェルコマンドを試してください
def Host= sh(returnStdout: true, script: 'echo ${BUILD_URL/https:\\/\\/} | cut -d "/" -f1').trim()
println("Hostname : ${Host}")
現在のスレーブホストを取得するには:
Jenkins.getInstance().getComputer(env['NODE_NAME']).getHostName()
マスターホストを取得するには:
Jenkins.getInstance().getComputer('').getHostName()