温馨提示×

CentOS Jenkins配置中的环境变量怎么设置

小樊
89
2026-01-06 07:05:55
栏目: 智能运维

CentOS 上 Jenkins 环境变量的设置方法与优先级


一 设置位置与优先级

  • 推荐按以下顺序理解优先级(由高到低):
    1. 构建时临时变量:在 Pipeline 的 environment 或 withEnv 中设置,仅对当前构建/步骤生效。
    2. 节点级环境变量:在节点配置里设置,对该节点上运行的所有构建生效。
    3. 全局环境变量:在“系统管理 → 系统配置 → 全局属性”中设置,对所有项目生效。
    4. 操作系统级环境变量:如 /etc/profile、用户 ~/.bash_profile 等,Jenkins 进程若以 jenkins 用户启动,需要保证该用户能读取到这些变量。
  • 同名变量覆盖规则:节点变量 > 全局变量 > 系统变量。在节点上设置的同名变量会优先生效。

二 在 CentOS 上配置操作系统级变量供 Jenkins 使用

  • jenkins 用户生效为例,编辑其环境文件(如 ~jenkins/.bash_profile~jenkins/.bashrc),追加变量并重新加载:
    sudo -iu jenkins
    echo 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64' >> ~/.bash_profile
    echo 'export MAVEN_HOME=/opt/apache-maven-3.8.6' >> ~/.bash_profile
    echo 'export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin' >> ~/.bash_profile
    source ~/.bash_profile
    
  • 验证 jenkins 用户环境:
    sudo -iu jenkins env | egrep '^(JAVA_HOME|MAVEN_HOME|PATH)='
    java -version
    mvn -v
    
  • 说明:Jenkins 若通过 systemd 启动,默认不加载交互式 shell 的 profile。如需注入,可在 systemd 服务中显式声明 Environment(见下一节示例)。

三 在 Jenkins 界面中配置变量

  • 全局变量
    • 路径:Dashboard → Manage Jenkins → System Configuration → System → Global properties → Environment variables
    • 添加键值对,例如:JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64MAVEN_HOME=/opt/apache-maven-3.8.6
  • 节点变量
    • 路径:Dashboard → Manage Jenkins → Nodes and Clouds → 选择节点 → Configure → Node Properties → Environment variables
    • 适合为某台构建机单独设置 PATH、JAVA_HOME、NPM 等,优先级高于全局变量。
  • 项目级变量
    • 在任务配置的 构建环境 中勾选“提供环境变量”,添加项目所需变量(如 DEPLOY_ENV=prod)。
  • 使用方式
    • 在 Shell 步骤中可直接使用 $VAR${VAR};在 Pipeline 中通过 env.VAR 读取。

四 Pipeline 中设置与打印变量

  • 声明式 Pipeline 示例(含 Node.js/npm 场景):
    pipeline {
      agent any
      environment {
        NODE_HOME = '/opt/nodejs'
        PATH      = "${env.NODE_HOME}/bin:${env.PATH}"
        JAVA_HOME = '/usr/lib/jvm/java-11-openjdk-amd64'
        MAVEN_HOME = '/opt/apache-maven-3.8.6'
      }
      stages {
        stage('Check') {
          steps {
            sh 'node -v'
            sh 'npm -v'
            sh 'java -version'
            sh 'mvn -v'
            sh 'echo "JAVA_HOME=$JAVA_HOME, MAVEN_HOME=$MAVEN_HOME"'
          }
        }
      }
    }
    
  • 脚本式或临时注入:
    node {
      withEnv(["PATH=/opt/nodejs/bin:${env.PATH}"]) {
        sh 'node -v && npm -v'
      }
    }
    
  • 打印全部环境变量用于排查:
    pipeline {
      agent any
      stages {
        stage('Dump') {
          steps {
            script {
              env.getEnvironment().each { k, v -> echo "${k} = ${v}" }
            }
          }
        }
      }
    }
    
  • 查看内置变量清单:访问 http://<JENKINS_URL>/env-vars.html

五 常见问题与排查

  • 构建机已装 Node.js/npm 但报错 “npm: command not found”
    • 原因:Jenkins(以 jenkins 用户)未加载正确的 PATH
    • 解决:
      • 方案 A:在节点属性里设置 PATH 指向 /opt/nodejs/bin(或其他 Node 安装路径)。
      • 方案 B:在 systemd 服务中注入变量(示例):
        sudo systemctl edit jenkins
        # 在打开的编辑器中添加:
        [Service]
        Environment="PATH=/opt/nodejs/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
        Environment="NODE_HOME=/opt/nodejs"
        # 保存后执行:
        sudo systemctl daemon-reload
        sudo systemctl restart jenkins
        
  • 修改了 /etc/profile 但构建机里仍无效
    • 原因:Jenkins 未以登录 Shell 执行 profile。
    • 解决:改用 ~jenkins/.bash_profile 配置,或在 systemd 中显式设置 Environment 并重启服务。

0