web-dev-qa-db-ja.com

スレーブで実行されているパイプラインステージ内でJenkinsマスターIP /ホスト名を取得するにはどうすればよいですか?

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アドレスを取得する他の方法がわかりません。

3
user8370684

これを行うためのより良い方法があるかどうかわからない、私は実行することができます

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のメソッドシグネチャを承認する必要がありました。

2
ivan.sim

@kayveeからBUILD_URLを使用するように促され、次のことが私から得られました。

_def getJenkinsMaster() {
    return env.BUILD_URL.split('/')[2].split(':')[0]
}
_

これにより、ビルドURLに表示されるマスターのホスト名またはIPが返されます。ポート番号も必要な場合は、2番目のsplit()を削除してください。

2
urban

以下のシェルコマンドを試してください

def Host= sh(returnStdout: true, script: 'echo ${BUILD_URL/https:\\/\\/} | cut -d "/" -f1').trim()
println("Hostname : ${Host}")
0
kayvee

現在のスレーブホストを取得するには:

Jenkins.getInstance().getComputer(env['NODE_NAME']).getHostName()

マスターホストを取得するには:

Jenkins.getInstance().getComputer('').getHostName()
0
ldenisey