jenkins学习之Jenkins插件页面的一个报错


首先从 
doCheckUpdatesServer() 

这里 开始 执行 start(),在执行 start 方法之前需要初始化 updateServerRetrier变量,

FormValidation result = updateServerRetrier.start();

在 Retrier.java  类中的 有个 start() 方法,中会执行 result = callable.call(); 这个。
这个callable 是什么呢?

看  doCheckUpdatesServer() 中怎么初始化 updateServerRetrier的。updateServerRetrier 是 Retrier<FormValidation> 类型的。
初始化是 调用的 new Retrier.Builder<>(), 这个方法需要几个参数:
	public Builder(@NonNull Callable<V> callable, @NonNull BiPredicate<Integer, V> checkResult, @NonNull String action) {
		this.callable = callable;
		this.action = action;
		this.checkResult = checkResult;
	}
可以发现第一个 参数就是 	callable。	继续看  doCheckUpdatesServer() 中,把 这个 this::checkUpdatesServer 作为第一个参数传入 callable了。
初始化 Retrier.Builder 后又调用了 withAttempts , withDelay, withDuringActionExceptions, withDuringActionExceptionListener 这么几个方法,
这几个方法是为了设置几个成员变量的,最后在调用 build() 完成 new Retrier<>(this);的初始化。

在 Retrier.java  类中的 有个 start() 方法 中会执行 result = callable.call(); 这个, 然后这个方法抛出了异常,被捕获到了,然后会初始化 result,这个就是 最开始FormValidation result = updateServerRetrier.start(); 这里得到的result。
result = duringActionExceptionListener.apply(currentAttempt, e); 我们看这个 result怎么生成的,是调用了duringActionExceptionListener变量的apply() 方法,
这个 duringActionExceptionListener 是什么玩意呢? 看 上面的 那个 withDuringActionExceptionListener 方法,我们发现这个 玩意是一个 java lambda 表达式,其实也就是一个匿名方法,具体就是 (attempt, e) -> FormValidation.errorWithMarkup(e.getClass().getSimpleName() + ": " + e.getLocalizedMessage()),
其实 调用 apply(currentAttempt, e) 就是调用这个 lambda表达式,也就是调用 FormValidation.errorWithMarkup() 这个方法了,可以看到 e 就是 先前抛出的 异常, 好像 currentAttempt 这个参数没有用到。
到这里 我最后返回的 result 值已经生成初始化好了。接着 Retrier.java  类中的 有个 start() 方法中有做了一些判断,最后 返回 这个 result了。
最后 通过 lastErrorCheckUpdateCenters = Messages.PluginManager_CheckUpdateServerError(result.getMessage());  吧这个result 格式化配上本地化字符串赋值给lastErrorCheckUpdateCenters变量了。
在 src/main/resources/hudson/PluginManager/advanced.jelly 中的 check.jelly 文件中会 显示 这个 lastErrorCheckUpdateCenters 变量的值到 web 页面上。

checkUpdatesServer() 又是什么呢?  是 PluginManager.java 中的一个方法。

其实执行顺序 就是 doCheckUpdatesServer() ---> checkUpdatesServer()

checkUpdatesServer()中 for 循环所有site,其中只有一个site,URL是:https://updates.jenkins-zh.cn/update-center.json

FormValidation v = site.updateDirectlyNow();
   updateDirectlyNow(DownloadService.signatureCheck);
      updateData(DownloadService.loadJSON(new URL(getUrl() + "?id=" + URLEncoder.encode(getId(), 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值