首页 文章

Jenkins / Hudson环境变量

提问于
浏览
94

我正在从用户 jenkins 运行Jenkins,因为 $PATH 设置为某些东西,当我进入Jenkins Web界面时,在系统属性窗口( http://$host/systemInfo )中,我看到了另一个 $PATH .

我已经使用Jenkins网站上的原生rpm在Centos上安装了Jenkins . 我正在使用 sudo /etc/init.d/jenkins start 安装提供的启动脚本

任何人都可以向我解释为什么会这样吗?

20 回答

  • 5

    迈克尔,

    两件事情:

    当Jenkins连接到计算机时,它会转到 sh shell,而不是 bash shell(至少这是我注意到的 - 我可能错了) . 因此,不会考虑对bashrc文件中的$ PATH所做的任何更改 .

    此外,您在本地shell中对$ PATH所做的任何更改(您个人搜索到的)都不会在Jenkins中显示 .

    要更改Jenkins使用的路径,您有两个选项(AFAIK):

    1)编辑 /etc/profile 文件并添加所需的路径

    2)转到从站的配置页面,并添加环境变量 PATH ,其值为: $PATH:/followed-by/paths/you/want/to/add

    如果您使用第二个选项,系统信息仍然不会显示它,但您的构建将看到添加的路径 .

  • 13

    我一直遇到这个问题,但现在我只是添加:

    source /etc/profile
    

    作为构建过程的第一步 . 现在我的所有后续规则都被加载,以便Jenkins顺利运行 .

  • 9

    您还可以编辑 /etc/sysconfig/jenkins 文件以对环境变量等进行任何更改 . 我只需将 source /etc/profile 添加到文件末尾 . /etc/profile 已设置所有正确的 PATH 变量 . 执行此操作时,请确保重新启动Jenkins

    /etc/init.d/jenkins restart
    

    我们正在运行ZendServer CE,它在不同的路径中安装pear,phing等,所以这很有帮助 . 此外,我们没有得到我们过去使用Oracle客户端和Jenkins的 LD_LIBRARY_PATH 错误 .

  • 19

    我试过 /etc/profile~/.profile~/.bash_profile ,但没有一个有效 . 我发现为jenkins slave帐户编辑了 ~/.bashrc .

  • 0

    这个答案的信息已经过时了 . 您需要转到配置Jenkins>然后您可以单击以从中添加环境变量键值对 .

    例如: export MYVAR=test 将是 MYVAR 是键, test 是值 .

  • 2

    在我的新EC2实例上,只需将新值添加到Jenkins用户的.profile的PATH中,然后重新启动tomcat就可以了 .

    在配置不同的旧实例上,使用Sagar's answer中的#2是唯一有效的(即.profile,.bash *不起作用) .

  • 4

    我发现了两个插件 . 一个加载文件中的值,另一个允许您在作业配置屏幕中配置值 .

    Envfile Plugin - 此插件允许您通过文件设置环境变量 . 文件的格式必须是标准的Java属性文件格式 .

    EnvInject Plugin - 此插件可以添加环境变量并执行设置脚本,以便为Job设置环境 .

  • 0

    你不能只在Jenkins设置中将它添加为环境变量:

    管理Jenkins - >全局属性>环境变量:然后单击“添加”以将属性PATH及其值添加到您需要的值 .

  • 2

    这就是我解决这个烦人问题的方法:

    我改变了 PATH 变量,因为@sagar在他的第二个选项中提出了这个变量,但我仍然得到了与我预期不同的 PATH 值 .

    最终我发现是 EnvInject 插件替换了我的 PATH 变量!

    所以我可以卸载 EnvInject 或者只是用它来注入PATH变量 .

    由于我们的许多Jenkins工作都使用该插件,我不想卸载它...

    所以我在Jenkins主目录下创建了一个文件: environment_variables.properties .

    该文件包含我需要的路径环境值: PATH=$PATH:/usr/local/git/bin/ .

    来自Jenkins网页界面: Manage Jenkins -> Configure System . 在那个屏幕中 - 我勾选了 Prepare jobs environment 选项,在 Properties File Path 字段中我输入了我的文件路径: /var/lib/jenkins/environment_variables.properties .

    这样每个Jenkins作业我们都会收到我在这个 environment_variables.properties 文件中放入的任何变量 .

  • 0

    在“/etc/init.d/jenkins force-reload”之后,我在这个问题上只取得了进展 . 我建议在其他任何事情之前尝试,并使用它而不是重新启动 .

  • 133

    在我的Ubuntu 13.04上,我尝试了一些调整,然后才成功:

    • 编辑/etc/init/jenkins.conf

    • 找到"exec start-stop-server..."开始的位置

    • 插入环境更新就在那之前,即

    export PATH = $ PATH:/ some / new / path / bin

  • -1

    Jenkins还支持格式 PATH+<name> 前置任何变量,而不仅仅是PATH:

    全局环境变量或节点环境变量:

    Jenkins variable + notation

    管道步骤 withEnv 也支持此功能:

    node {
      withEnv(['PATH+JAVA=/path/to/java/bin']) {
        ...
      }
    }
    

    请注意,它适用于变量 . 如果必须附加,则需要执行其他答案显示的操作 .

    请参阅管道步骤文档here .

    你也可以使用语法PATH WHATEVER = / something来/ $ to $ PATH

    或者EnvVars上的java文档here .

  • 34

    解决方案对我有用

    source ~/.bashrc

    解释

    我第一次验证Jenkins正在运行BASH,使用 echo $SHELLecho $BASH (注意我明确地将 #!/bin/bash 放在Jenkins的textarea上,我需要获得BASH) . source ing /etc/profile 正如其他人所说的那样无效 .

    看着 /etc/profile 我找到了

    if [ "$PS1" ]; then
    ...
    

    并检查"$PS1"发现它为空 . 我试过欺骗 $PS1 无济于事

    export PS1=1
    bash -c 'echo $PATH'
    

    但是这并没有产生预期的结果(加上我希望看到的其余部分) . 但是,如果我告诉bash是互动的

    export PS1=1
    bash -ci 'echo $PATH'
    

    $PATH 按我的预期改变了 .

    我试图弄清楚如何正确地欺骗交互式shell来加载 /etc/bash.bashrc 但是事实证明我所需要的只是 ~/.bashrc ,所以简单地说它解决了问题 .

  • 4

    /usr/bin/bash
    

    Jenkins - >管理Jenkins - >配置系统 - > Shell-> Shell可执行文件

    詹金斯使用sh,所以即使/ etc / profile对我不起作用当我添加它时,我有所有的env .

  • 0

    在Ubuntu上我只需编辑/ etc / default / jenkins并在最后添加source / etc / profile,它对我有用 .

  • 1

    使用环境变量set运行命令也很有效 . 当然,您必须为您运行的每个命令执行此操作,但您可能有一个作业脚本,因此每个构建可能只有一个命令 . 我的作业脚本是一个python脚本,它使用环境来决定使用哪个python,所以我仍然需要将/usr/local/bin/python2.7放在它的路径中:

    PATH=/usr/local/bin <my-command>
    
  • 1

    对我有用的是覆盖奴隶的PATH环境 .

    Set:   PATH 
    To:    $PATH:/usr/local/bin
    

    然后断开并重新连接从站 .

    尽管系统信息显示它有效 .

  • 4

    我通过zypper(包管理器)在SLES 11 SP3上安装了Jenkins 1.639 . 安装配置jenkins作为服务

    # service jenkins
     Usage: /etc/init.d/jenkins {start|stop|status|try-restart|restart|force-reload|reload|probe}
    

    虽然 /etc/init.d/jenkins 来源 /etc/sysconfig/jenkins ,但是任何设置的env变量都不会被jenkins进程继承,因为它是在一个单独的登录shell中启动的,具有如下新环境:

    startproc -n 0 -s -e -l /var/log/jenkins.rc -p /var/run/jenkins.pid -t 1 /bin/su -l -s /bin/bash -c '/usr/java/default/bin/java -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --javaHome=/usr/java/default --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --httpPort=8080 --ajp13Port=8009 --debug=9 --handlerCountMax=100 --handlerCountMaxIdle=20 &' jenkins
    

    我设法为jenkins进程设置env变量的方法是在其主目录 /var/lib/jenkins 中通过 .bashrc . 我不得不创建 /var/lib/jenkins/.bashrc ,因为之前不存在 .

  • 0

    我尝试了上面所有的东西 - 对我不起作用 .

    我找到了两个解决方案(均为SSH-Slave)

    • 转到从站设置

    • 添加新的环境变量

    • 路径

    • $ :$ /.pub-cache / bin:$ /.local / bin

    “$ ”部分非常重要 . 这使得额外的PATH绝对 . 相对路径对我不起作用 .

    选项II(管道脚本)

    pipeline {
        agent {
            label 'your-slave'
        }
        environment {
            PATH = "/home/jenkins/.pub-cache/bin:$PATH"
        }
        stages {
            stage('Test') {
                steps {
                    ansiColor('xterm') {
                        echo "PATH is: $PATH"
                    }
                }
            }
        }
    }
    
  • 2

    1-添加到您的profil文件“.bash_profile”文件

    它位于“/ home / your_user /”文件夹中

    vi .bash_profile

    加:

    export JENKINS_HOME=/apps/data/jenkins  
    export PATH=$PATH:$JENKINS_HOME
    

    ==>这是e jenkins工作区

    2-如果使用jetty:转到jenkins.xml文件

    并添加:

    <Arg>/apps/data/jenkins</Arg>
    

相关问题