2017-02-06 4 views
1

Ich benutze SSH-Slaves als Knoten in einem Jenkins-Pipeline-Skript.Erhalten Sie SSH-Slave-Knoten Hostname/IP in Jenkins Pipeline

Gibt es eine Möglichkeit, den Hostnamen/IP des Knotens in der Pipeline (Jenkinsfile) Skript zu holen?

Ich bin auf einem parametrisierten Knoten bereitstellen und möchte die IP des Knotens am Ende des Skripts zurückgeben.

heißt:

node('master') { 
    checkout scm 
    stash name: 'deploy', includes: 'modules/ci/,modules/compose/' 
} 

stage ('Deploy to remote server (SSH)') { 
    node(${NODE}) { 
     unstash 'deploy' 
     withEnv(["BRANCH=${BRANCH}"]) { 
      sh "chmod +x modules/ci/deployment/*" 
      sh "modules/ci/deployment/update.sh" 
     } 
     echo 'Deployment was successful, branch ${BRANCH} was deployed to https://104.xx.xxx.xx (node IP/hostname)' 
    } 
} 

Antwort

2

Soweit ich weiß, gibt es keine schnelle und einfache Möglichkeit, dies zu tun. Die folgende abruft, was jemals in Host-Feld der Konfiguration eingegeben wird:

import jenkins.model.Jenkins; 
import hudson.slaves.SlaveComputer; 
import hudson.slaves.DumbSlave; 
import hudson.plugins.sshslaves.SSHLauncher; 

def getHost() { 
    def computer = Jenkins.getInstance().getComputer(env.NODE_NAME); 
    if (!(computer instanceof SlaveComputer)) { 
    error "Not a ordinary slave"; 
    } 
    def node = computer.getNode(); 
    if (!(node instanceof DumbSlave)) { 
    error "Not a dumb slave"; 
    } 
    def launcher = node.getLauncher(); 
    if (!(launcher instanceof SSHLauncher)) { 
    error "Not a SSHLauncher"; 
    } 
    return launcher.getHost(); 
} 

Leider eine ganze Reihe von Methoden, wenn Sie Sandbox verwenden Sie weiße Liste benötigen, und es könnte einige Sicherheits Folgen haben. Das beste Ding wäre, diese util Methode in eine globale öffentliche Bibliothek

zu setzen