Jenkins Pipeline env.JAVA_HOME отличается от sh printenv - PullRequest
1 голос
/ 25 февраля 2020

Jenkins 2.2024.2
Плагин Kubernetes 1.22.0

Переменная env.JAVA_HOME получает значение, отличное от того, что показывает sh 'printenv'. Я думал, что env является отражением окружающей среды. Я также не могу найти, где установлен env.JAVA_HOME. Это не отражает значение в конфигурациях Global JDK. Я также извлек директорию Jenkins Master root для openjdk и нашел только правильное значение.

bash-4.4# grep openjdk *
config.xml:      <home>/usr/local/openjdk-8/jre</home>

Вот конвейер, демонстрирующий поведение.

pipeline {
    agent {
        kubernetes { label 'java8-mvn3' }
    }

    stages {
        stage('test') {
            steps {
                container ('java8-mvn3') {
                    echo env.JAVA_HOME
                    echo "++++++++++++++++++++++++++"
                    sh 'printenv | grep JAVA_HOME'
                }
            }
        }
    }
}

** OUTPUT **

[Pipeline] echo
/usr/lib/jvm/java-1.8-openjdk
[Pipeline] echo
++++++++++++++++++++++++++
[Pipeline] sh
+ printenv
+ grep JAVA_HOME
JAVA_HOME=/usr/local/openjdk-8

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Переменная среды JAVA_HOME устанавливается в зависимости от среды Jenkins Master. В то время как printenv показывает переменные окружения подчиненного контейнера.

0 голосов
/ 26 февраля 2020

На странице man: http://man7.org/linux/man-pages/man1/printenv.1.html

   NOTE: your shell may have its own version of printenv, which usually
   supersedes the version described here.  Please refer to your shell's
   documentation for details about the options it supports.

Так что вам нужно go с указанными c оболочками с чем-то вроде sh '''#!/bin/bash -c ...

Или в качестве другого варианта экспортируйте тот, который необходим на глобальном / этапе определения уровня среды

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...