pipeline {
agent any
tools {
jdk 'jdk-17'
}
environment {
SONAR_PROJECT_KEY = 'sonar-analysis'
SONAR_SCANNER_HOME = tool 'SonarScanner'
// 使用 JAVA_HOME 指向 JDK 根目录
JAVA_HOME = tool 'jdk-17'
// 在 PATH 中包含 ${JAVA_HOME}/bin
PATH = "${JAVA_HOME}/bin:${env.PATH}"
}
stages {
stage('Checkout') {
steps {
// 检出代码
echo 'checkout'
}
}
stage('Build') {
steps {
// 构建代码
echo 'go build'
}
}
stage('Test') {
steps {
// 运行测试
echo 'go test'
}
}
stage('Debug') {
steps {
echo '------------ENVIRONMENT VARIABLES'
sh 'env'
echo '------------JAVA VERSION'
sh 'java -version'
echo '------------JAVA_HOME'
sh 'echo $JAVA_HOME'
echo '------------PATH'
sh 'echo $PATH'
echo '------------JAVA'
sh 'which java'
}
}
stage('SonarQube Analysis') {
steps {
echo 'go sonarQube'
withSonarQubeEnv("SonarQubeServer") {
// 将 SonarScanner 执行命令输出添加到日志中
sh "${SONAR_SCANNER_HOME}/bin/sonar-scanner -X"
}
}
}
}
}为什么输出java -version时还是用的系统默认的,而不是pipeline中指定的java
在 Jenkins Pipeline 中设置 JAVA_HOME
和 PATH
变量是为了确保 Pipeline 中的步骤使用指定的 Java 版本。然而,这些设置可能不会直接影响到 Groovy 脚本中的 sh 'java -version'
命令。
在 Jenkins Pipeline 中,sh
步骤启动一个新的子进程,该子进程将继承 Jenkins 主服务器的环境变量。即使在 Pipeline 中设置了 JAVA_HOME
和 PATH
,sh 'java -version'
将使用子进程的环境,而不是 Pipeline 中设置的环境。
为确保 sh
步骤使用正确的 Java 版本,你可以直接指定 Java 可执行文件的路径。修改 SonarQube Analysis
阶段,使用完整路径执行 java -version
,例如:
stage('SonarQube Analysis') {
steps {
echo 'go sonarQube'
withSonarQubeEnv("SonarQubeServer") {
// 使用完整路径执行 java -version
sh "${JAVA_HOME}/bin/java -version"
// 将 SonarScanner 执行命令输出添加到日志中
sh "${SONAR_SCANNER_HOME}/bin/sonar-scanner -X"
}
}
}
这样可以确保在 SonarQube Analysis
阶段使用 Pipeline 中设置的 Java 版本。
请尝试这个修改,看看是否解决了问题。如果问题仍然存在,请提供相应的输出以便更好地帮助你。