51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2124|回复: 1
打印 上一主题 下一主题

Jenkins获取JENKINS_HOME过程

[复制链接]
  • TA的每日心情
    无聊
    12 小时前
  • 签到天数: 528 天

    连续签到: 1 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2018-12-20 14:05:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    JENKINS_HOME是Jenkins的主目录。

    在Jenkins上查看JENKINS_HOME:

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

    如上图帮助文档所示:

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

    • 使用你Web容器的管理工具设置JENKINS_HOME环境参数.

    • 在启动Web容器之前设置JENKINS_HOME环境变量.

    • (不推荐)更改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

    1. private static final String[] HOME_NAMES = {"JENKINS_HOME","HUDSON_HOME"};
    复制代码
    • 首先,会在JNDI(可在web.xml配置文件中配置)中查找JENKINS_HOME或HUDSON_HOME

    • 其次会在系统属性中查找JENKINS_HOME或HUDSON_HOME

    • 接着会在环境变量中查找JENKINS_HOME或HUDSON_HOME

    • 最后,如果上述都找不到,会默认选择 $user.home/.jenkins为JENKINS_HOME($user.home/.hudson为HUDSON_HOME)


    附:WebAppMain.java的getHomeDir方法源码

    1. /**
    2.      * Determines the home directory for Jenkins.
    3.      *
    4.      * <p>
    5.      * We look for a setting that affects the smallest scope first, then bigger ones later.
    6.      *
    7.      * <p>
    8.      * People makes configuration mistakes, so we are trying to be nice
    9.      * with those by doing {@link String#trim()}.
    10.      *
    11.      * <p>
    12.      * @return the File alongside with some description to help the user troubleshoot issues
    13.      */
    14.     public FileAndDescription getHomeDir(ServletContextEvent event) {
    15.         // check JNDI for the home directory first
    16.         for (String name : HOME_NAMES) {
    17.             try {
    18.                 InitialContext iniCtxt = new InitialContext();
    19.                 Context env = (Context) iniCtxt.lookup("java:comp/env");
    20.                 String value = (String) env.lookup(name);
    21.                 if(value!=null && value.trim().length()>0)
    22.                     return new FileAndDescription(new File(value.trim()),"JNDI/java:comp/env/"+name);
    23.                 // look at one more place. See issue #1314
    24.                 value = (String) iniCtxt.lookup(name);
    25.                 if(value!=null && value.trim().length()>0)
    26.                     return new FileAndDescription(new File(value.trim()),"JNDI/"+name);
    27.             } catch (NamingException e) {
    28.                 // ignore
    29.             }
    30.         }

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

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

    43.         // otherwise pick a place by ourselves

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

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

    57.         File newHome = new File(new File(System.getProperty("user.home")),".jenkins");
    58.         return new FileAndDescription(newHome,"$user.home/.jenkins");
    59.     }
    复制代码

    此外,在Tomcat/logs/stdout_YYYYMMDD.log中有如下日志:

    Jenkins home directory: F:\JENKINS_HOME found at: EnvVars.masterEnvVars.get("JENKINS_HOME")

    这与getHomeDir方法的相应源码对应:

    1. System.out.println("Jenkins home directory: "+home+" found at: "+describedHomeDir.description);
    复制代码

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-18 22:32 , Processed in 0.065585 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表