Jenkins调用gradle插件执行具有时序依赖关系的任务出错

问题描述

1、2021年9月17日,研发人员反馈,jenkins上Android构建job运行时结果总是不正确,jenkins上配置了很多task,第一个task是清理task,第二个task会生成一个jar文件,第三个task会调用第二个task的jar文件作为输入,混淆产生一个新jar文件,后面就不列举了。
目前问题是,第三个task执行的时候说找不到第二个task产生的jar文件,所以报错。
2、2024年1月25日,再次出现类似的问题,gradle在执行一个打包任务的时候,有个打包task要依赖于前一个task输出的jar包作为输入,生成新的jar。jenkins下载代码是正确的,但是打包结果始终不正确,前一个task输出的jar包是正确的,但是新的jar包打出来的结果始终是旧的,不能包含最新的代码。

问题1排查

1. 只保留第一个清理task和第二个task,检查输出目录,结果是正确的。 加入第三个任务以后,错误是一样的,还是找不到第二个task产生的jar文件。
2. 排查代码,第二个task在调用的时候,依赖于build 任务; 第三个task没有依赖的build任务。除此之外,逻辑上没有任何错误。 且此job以前运行正常。
3. 排查jenkins 的console,除了出错信息,只有第三个job运行的日志信息,感觉就像第二个任务没有执行一样。
4. 查看其他运行成功的Android job, 很多也只有2个task,不具有参考性。 也有一个很多task的job,运行也是正常的,检查发现,这些task中每一个都显示定义了job依赖于clear和build任务。   猜测,是不是跟build有关。
5. 恰好另一个研发同事说,我以前给他解决过类似的问题,就是在调用之前,先执行build操作,整个job就正常了。 至于原因是什么,我一点印象也没了。

问题2排查

检查build.gradle配置文件,没有发现问题,突然想到问题1的解决方案,按照问题1的解决方案尝试了一下,问题直接解决了。

cd ${WORKSPACE}/sps
/usr/local/gradle-6.5/bin/gradle build

问题解决

在调用gradle插件前,执行“gradle build”命令:
#!/bin/bash
cd ${WORKSPACE}/corecomponent
/usr/local/gradle-6.5/bin/gradle build

问题解决,特此记之。

原因可能分析

1、猜测jenkins的gradle插件,在某些特殊情况下,不能保证多个task的时序,导致打包结果不正确。
2、也可能gradle SDK,编译的时候不能正确清理缓存,导致打包结果不正确。

总之一句话,解决方法就是到对应的真实的build.gradle配置文件所在的工作区,先执行一下build,再调用gradle插件来执行任务即可。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值