Jenkins 自动打包踩坑记录

621 阅读2分钟

Jenkins获取用户信息为空

jenkins获取用户相关信息,需要安装插件:Build User Vars Plugin,是jenkins用户相关变量插件,使得在构建过程中可以使用用户相关环境变量。官方文档

VariableDescription说明
BUILD_USERFull name (first name + last name)全名
BUILD_USER_FIRST_NAMEFirst name名字
BUILD_USER_LAST_NAMELast name
BUILD_USER_IDJenkins user IDjinkins 用户ID
BUILD_USER_EMAILEmail address用户邮箱

在Jenkins配置中勾选”Set Jenkins user build variables“

image.png 这样在钉钉高级自定义功能里通过 ${BUILD_USER}获取,或者通过 Groovy 脚本里

//构建用户
def buildUser= manager.getEnvVariable("BUILD_USER")

Jenkins Pipeline报错“org.jenkinsci.plugins.scriptsecurity.scripts.UnapprovedUsageException: script no”

报错图片

image.png 原因:jenkins自身的安全机制,执行新的外部脚本需要审批

解决方法:Jenkins→系统管理→往下拉,倒数第2个(In-process Script Approval)

image.png 点击Approve(批准)问题解决

image.png 获取Jenkins中某个任务的构建详情

背景:Jenkins打包失败需要透出 任务的构建详情页,用于开发同学查看构建失败日志,排查并解决问题。

问题描述:通过查看Jenkins官方文档,Jenkins使用环境变量 通过BUILD_URL可以定位此次构建结果的 URL(比如 http://buildserver/jenkins/job/MyJobName/17/

通过 manager.getEnvVariable("BUILD_URL") 或者 ${BUILD_URL} 获取到 ”http://0.0.0.0:8080/job/游估值/18/“ 因为获取的是Jenkins服务器的本地地址,通过钉钉通知跳转会报错。

解决方案:需要将”http://0.0.0.0:8080“替换成Jenkins服务器的地址”android.pxb7.internal“。

//构建job页面
def jobBuildUrl= manager.getEnvVariable("BUILD_URL").replace("http://0.0.0.0:8080","http://xxx")

在构建失败中透出:

 "\n\n **失败详情:** [构建任务]("+jobBuildUrl+")" 

Jenkins 安装jdk 17

问题描述:Execution failed for task ':app:kaptGenerateStubsNormalDebugKotlin'.

'compileNormalDebugJavaWithJavac' task (current target is 17) and 'kaptGenerateStubsNormalDebugKotlin' task (current target is 11) jvm target compatibility should be set to the same Java version.

Consider using JVM toolchain: kotl.in/gradle/jvm/…

image.png 解决方案:估值APP 必须要JDK17 才能编译构建,在jenkins 服务器上安装JDK17。

自定义钉钉通知

问题描述:钉钉插件只能实现简单的自定义功能,无法满足定制需求。使用Jenkins中Dingtalk 插件,只能通过高级设置中自定义功能,通过Markdown语法设置一些钉钉消息,但是Markdown没有条件语句,判断构建成功,失败的结果,从而不能区分构建成功,失败的消息展示。

image.png 解决方案:使用groovy脚本能实现完全自主可控需求,包括打包构建的各种内容的获取和透出,例如:Git分支,版本号,渠道,构建时间,执行人,更新内容,包的下载二维码,失败详情等内容。用红色突出打包失败结果,通过鲜明的颜色足够的对比度有助于增加可识别性,提示开发同学排查失败原因。