2017-02-06 3 views
1

Я использую ведомые SSH как узлы в сценарии сценария Jenkins.Получить имя хоста slave узла SSH/IP в конвейере Jenkins

Есть ли способ получить имя хоста/IP узла внутри сценария конвейера (Jenkinsfile)?

Я развертываю к параметризованному узлу и хотел бы повторить IP-адрес узла в конце скрипта.

т.е:

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)' 
    } 
} 

ответ

2

Насколько я знаю, нет быстрый и простой способ сделать это. Ниже отыскивает то, что когда-либо вводится в поле хоста конфигурации:

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(); 
} 

К сожалению, если вы используете песочницу вам нужно белый список всего много методов, и это может иметь некоторые последствия для безопасности. Лучше всего было бы поместить этот метод использования в Глобальную публичную библиотеку

Смежные вопросы