Jenkins获取用户信息为空
jenkins获取用户相关信息,需要安装插件:Build User Vars Plugin,是jenkins用户相关变量插件,使得在构建过程中可以使用用户相关环境变量。官方文档
| Variable | Description | 说明 |
|---|---|---|
| BUILD_USER | Full name (first name + last name) | 全名 |
| BUILD_USER_FIRST_NAME | First name | 名字 |
| BUILD_USER_LAST_NAME | Last name | 姓 |
| BUILD_USER_ID | Jenkins user ID | jinkins 用户ID |
| BUILD_USER_EMAIL | Email address | 用户邮箱 |
在Jenkins配置中勾选”Set Jenkins user build variables“
这样在钉钉高级自定义功能里通过 ${BUILD_USER}获取,或者通过 Groovy 脚本里
//构建用户
def buildUser= manager.getEnvVariable("BUILD_USER")
Jenkins Pipeline报错“org.jenkinsci.plugins.scriptsecurity.scripts.UnapprovedUsageException: script no”
报错图片
原因:jenkins自身的安全机制,执行新的外部脚本需要审批
解决方法:Jenkins→系统管理→往下拉,倒数第2个(In-process Script Approval)
点击Approve(批准)问题解决
获取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/…
解决方案:估值APP 必须要JDK17 才能编译构建,在jenkins 服务器上安装JDK17。
自定义钉钉通知
问题描述:钉钉插件只能实现简单的自定义功能,无法满足定制需求。使用Jenkins中Dingtalk 插件,只能通过高级设置中自定义功能,通过Markdown语法设置一些钉钉消息,但是Markdown没有条件语句,判断构建成功,失败的结果,从而不能区分构建成功,失败的消息展示。
解决方案:使用groovy脚本能实现完全自主可控需求,包括打包构建的各种内容的获取和透出,例如:Git分支,版本号,渠道,构建时间,执行人,更新内容,包的下载二维码,失败详情等内容。用红色突出打包失败结果,通过鲜明的颜色足够的对比度有助于增加可识别性,提示开发同学排查失败原因。