Jenkins获取JENKINS_HOME过程

JENKINS_HOME是Jenkins的主目录。

在Jenkins上查看JENKINS_HOME:

系统管理→系统设置→主目录  (<JENKINS_URL>/configure页面)

如上图帮助文档所示:

Jenkins储存所有的数据文件在这个目录下. 你可以通过以下几种方式更改:

  1. 使用你Web容器的管理工具设置JENKINS_HOME环境参数.
  2. 在启动Web容器之前设置JENKINS_HOME环境变量.
  3. (不推荐)更改Jenkins.war(或者在展开的Web容器)内的web.xml配置文件.

这个值在Jenkins运行时是不能更改的. 其通常用来确保你的配置是否生效.

查看Jenkins的WEB-INF/web.xml,可以得知Jenkins主对象为hudson.WebAppMain:

查看WebAppMain.java的源码,getHomeDir方法即用来确定Jenkins的主目录,其逻辑如下:

鉴于Hudson是Jenkins的前身,所以为了兼容Jenkins主目录的名称有:JENKINS_HOME或HUDSON_HOME

private static final String[] HOME_NAMES = {"JENKINS_HOME","HUDSON_HOME"};

  1. 首先,会在JNDI(可在web.xml配置文件中配置)中查找JENKINS_HOME或HUDSON_HOME
  2. 其次会在系统属性中查找JENKINS_HOME或HUDSON_HOME
  3. 接着会在环境变量中查找JENKINS_HOME或HUDSON_HOME
  4. 最后,如果上述都找不到,会默认选择 $user.home/.jenkins为JENKINS_HOME($user.home/.hudson为HUDSON_HOME)

附:WebAppMain.java的getHomeDir方法源码

/**
     * Determines the home directory for Jenkins.
     *
     * <p>
     * We look for a setting that affects the smallest scope first, then bigger ones later.
     *
     * <p>
     * People makes configuration mistakes, so we are trying to be nice
     * with those by doing {@link String#trim()}.
     * 
     * <p>
     * @return the File alongside with some description to help the user troubleshoot issues
     */
    public FileAndDescription getHomeDir(ServletContextEvent event) {
        // check JNDI for the home directory first
        for (String name : HOME_NAMES) {
            try {
                InitialContext iniCtxt = new InitialContext();
                Context env = (Context) iniCtxt.lookup("java:comp/env");
                String value = (String) env.lookup(name);
                if(value!=null && value.trim().length()>0)
                    return new FileAndDescription(new File(value.trim()),"JNDI/java:comp/env/"+name);
                // look at one more place. See issue #1314
                value = (String) iniCtxt.lookup(name);
                if(value!=null && value.trim().length()>0)
                    return new FileAndDescription(new File(value.trim()),"JNDI/"+name);
            } catch (NamingException e) {
                // ignore
            }
        }

        // next the system property
        for (String name : HOME_NAMES) {
            String sysProp = System.getProperty(name);
            if(sysProp!=null)
                return new FileAndDescription(new File(sysProp.trim()),"System.getProperty(\""+name+"\")");
        }

        // look at the env var next
        for (String name : HOME_NAMES) {
            String env = EnvVars.masterEnvVars.get(name);
            if(env!=null)
                return new FileAndDescription(new File(env.trim()).getAbsoluteFile(),"EnvVars.masterEnvVars.get(\""+name+"\")");
        }

        // otherwise pick a place by ourselves

        String root = event.getServletContext().getRealPath("/WEB-INF/workspace");
        if(root!=null) {
            File ws = new File(root.trim());
            if(ws.exists())
                // Hudson <1.42 used to prefer this before ~/.hudson, so
                // check the existence and if it‘s there, use it.
                // otherwise if this is a new installation, prefer ~/.hudson
                return new FileAndDescription(ws,"getServletContext().getRealPath(\"/WEB-INF/workspace\")");
        }

        File legacyHome = new File(new File(System.getProperty("user.home")),".hudson");
        if (legacyHome.exists()) {
            return new FileAndDescription(legacyHome,"$user.home/.hudson"); // before rename, this is where it was stored
        }

        File newHome = new File(new File(System.getProperty("user.home")),".jenkins");
        return new FileAndDescription(newHome,"$user.home/.jenkins");
    }
时间: 2024-08-01 18:43:46

Jenkins获取JENKINS_HOME过程的相关文章

Jenkins获取git tags代码

配置Jenkins获取git tag代码的方式其实方法很多,目前我使用比较多的主要是通过Git Parameter 来配置动态的获取最新tags代码,主要我们首先需要安装一下Git Parameter Plug-In插件,有时候直接安装会安装失败,那就直接手动安装一下. 下载地址:http://updates.jenkins-ci.org/download/plugins/git-parameter/ 1.我们进入我们目标Jenkins任务,选择[参数化构建过程]->[添加参数]->[Git

jenkins获取git上的源码

jenkins获取git上的源码会遇到三种情况,我们在这里会分别介绍一下: 一.获取git上public(公有)的项目 只需配置仓库的URL即可 jenkins下使用git获取源码的配置方法 二.获取git上的private(私有)项目 2.1 使用用户名密码 仓库的URL使用http协议 2.2 使用密钥 仓库的URL使用 ssh协议的,以git开头 原文地址: http://www.xuebuyuan.com/2042085.html

jenkins + sonar 搭建过程

一.首先配置JDK 在/etc/profile 末尾加入环境变量:(命令 vim /etc/profile 打开编辑环境变量) export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_11 export JRE_HOME=/usr/lib/jvm/jdk1.8.0_11/jre export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$JRE_HOME/lib:$CLA

Jenkins获取编译状态

背景:在通过python的API调用Jenkins,启动Jenkins的job任务时,是需要知道Jenkins的编译状态,获取编译状态为 status=server.get_build_info(jobname, get_number2)['result'] #jobname,为任务的job名称,get_number2为编译版本号 目前是以前项目中截取的代码,我连接Jenkins是用了两种方式,因为有一种方式不能进行编译job,另外一种获取其他数据有问题,也是一直存在的bug def conne

gitlab+jenkins+maven+docker持续集成(六)——.Jenkins获取git tags代码进行持续集成

GitFlow的工作流 如上图所示,在开发工作中,不同的代码分支对应着项目或产品的不同形态,围绕特定形态的人力投入也不相同.随着时间的推进, 我们在 开发分支 中合并产品的功能实现,产品的功能逐步完善. 当产品功能完善到一定阶段,可以交付给测试团队进行内部测试时,产品代码可以合并到 测试分支(注意,上图未体现测试分支,实际中是否需要测试分支需要具体而定),编译打包测试. 经过若干迭代测试,功能稳定成熟,产品可以发布,此时,代码合并到主干(master)分支,用于发布(TAG标记). 所以这里用T

对获取IP过程的详解

获取ip之所以搞这么麻烦,是因为存在很多种网络结构,如 Nginx+Resin.Apache+WebLogic.Squid+Nginx. 首先,明确一下,Nginx 配置一般如下所示: location / { proxy_pass http://yourdomain.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_

获取 metadata 过程详解 - 每天5分钟玩转 OpenStack(167)

接上节,启动 neutron router 后 instance c1 终于拿到了 metadata, 从下面 c1 的启动日志可知: c1 所认为的 metadata 服务地址是 169.254.169.254,端口为 80.我们在 c1 中尝试访问一下 metadata. 确实能够拿到 metadata.但我们知道 nova-api-metadata 是运行在控制节点上的,IP并不是 169.254.169.254,这是怎么实现的呢?下面我们分析一下这个过程. 从 c1 的路由表得访问 16

touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? docker 安装 jenkins

拉取镜像 运行容器 docker run -v $home/jenkins:/var/jenkins_home --name jenkins8888 -p 8888:8080 -p 50000:50000 jenkins 报错 原因 :官方文档 Ensure that /your/home is accessible by the jenkins user in container (jenkins user - uid 1000) or use -u some_other_user param

Centos7 &amp; Docker &amp; Jenkins &amp; ASP.NET Core 2.0 自动化发布和部署

写在前面 Docker一直很火热,一直想把原本的Jenkins自动部署工具搬到Docker上面,无奈今年一直忙于各种事情,迟迟未实施这个事情,正好迎来了dotnet core 2.0 的正式发布,升级项目的同时,顺便直接将Jenkins搬到Docker上.为什么要写这篇文章呢?因为找过相关的资料,大多数文章都是基于Ubuntu 安装.net core 又或者 GitLab 进行持续集成 自动部署等等等,并未有人尝试过Centos7.3 上部署 Jenkins 并且 构建 ASP.NET CORE