首页 > 解决方案 > Jenkins 管道:如何获取从站的主机名

问题描述

我有两个不同的 Linux 服务器(prod 和 dev)$HOSTNAME,它们具有不同的证书,默认情况下以主机名命名。

现在我想在 Jenkins-Pipeline 中确定我在哪个主机上,从而使用正确的证书。

为此,我编写了以下测试脚本:

def labels = []
labels.add('jenkins_<slavehost>_x86')
def builders = [:]

for (x in labels) {
    def label = x
    builders[label] = {
        ansiColor('xterm') {
            node (label) {
                stage('cleanup') {
                    deleteDir()
                }
                stage('test') {
                    sh """
                        echo $HOSTNAME
                    """
                }
            }
        }
    }
}

parallel builders

由于$HOSTNAME未定义,因此不起作用。

groovy.lang.MissingPropertyException: No such property: HOSTNAME for class: groovy.lang.Binding

如何sh在管道中获取 jenkins-slave 的主机名?


由于您可以以任何您喜欢的方式命名节点,因此您不能只使用NODE_NAME,它不必与从机上的 bash 上的$HOSTNAMEecho 获得的相同。$HOSTNAME

标签: jenkinsenvironment-variablesjenkins-pipelinejenkins-slave

解决方案


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

您可以从 url 获取主机名


推荐阅读