jenkins进阶
jenkins进阶
记录最近踩的jenkins大坑,知识点比较零散
悲剧的起因
最近计划通过测试覆盖率工具来量化测试工作,避免漏测,少测试,因此选型jenkins+jacoco来实现
悲剧时间线
- jenkins插件市场,找到jacoco插件
- 下载jacoco插件,提示当前jenkins版本过低
- 升级jenkins版本
- 重启jenkins失败
- 登陆jenkins机器看日志,提示jdk版本过低
- 安装jdk11,并设置java环境变量
- jenkins 重启成功
- jenkins tool 新增jdk8 和jdk11
- 配置jenkins job,使用 jdk8
- 运行job,提示编译失败,找不到jdk8的 rt.jar (jdk11没有改jar)
- job新增打印环境变量,输出结果是 jdk8,但是maven 插件依然使用jdk 11
- 修改jenkins所在机器的java环境变量为8,重启 jenkins 使用jdk11绝对路径启动
- 运行job,依然提示失败,使用当前jenkins进程对应的jdk11
- 回滚jenkins 版本到之前版本(jdk8)
- 重启jenkins失败,提示config.xml解析异常
config.xml解析异常
百度和谷歌了一把,都没找到有效的,这里吐槽一下百度,大量重复的内容
参考了一番搜索结果,查了下jenkins官网资料,最终有效的办法是注释掉报错的xml节点
xml文件路径在 配置的{jenkins_home}目录下
根本原因是 新旧版本xml格式不兼容
jenkins 所有配置都使用xml方式存储的,遇到坏掉的插件,可以直接注释,或者修改成对应版本的格式
job配置的xml在{jenkins_home}/jobs/{job_name}/config.xml
只要xml没被删除,可以通过xml还原之前的配置
maven插件不使用设置的jdk
这个问题如果使用maven项目则比较麻烦(jenkins哪些版本没这个bug,具体不详),改成使用pipeline构建job
理论上来说,编译使用的jdk版本和jenkins进程使用的jdk版本完全是隔离,例如 jenkins 使用11,项目使用8,反之亦然
推断原因应该是jenkins的maven项目 使用 scriptEngine 执行shell的时候,写法有问题。
pipeline 进阶知识点
基础的 jenkins pipeline我不介绍了,搜索一下,或者自己看官网文档。下面列下进阶技巧
账户密码托管
jenkins job 有时候会涉及访问远程资源就需要使用对应的账户,例如git账户,oss账户,或者服务器账户
安全上来讲要统一使用凭证管理
新增凭证
pipeline 新增凭证参数,并且使用
1 | pipeline{ |
打印出来的用户名/密码是星号
Publish Over SSH 替代方案
大部分时候jenkins所在的服务器和java服务运行的服务器不是同一个,这个时候就需要上传jar到远程服务,且运行启动脚本
网上查了下资料,大部分使用publish over ssh,但这个插件已经不维护了,最新版本jenkins插件市场都找不到
推荐的替代方案是使用 SSH Pipeline Steps 替代
1 |
|
当前workspace 在{jenkins_home}/workspace/{job_name}
动态插件方案
有时候有些疑难杂症,难以解决,需要在脚本运行期间使用 jenkins进程相关信息
注意,不要勾选沙箱运行,因为要获取jenkins实例,要突破沙箱限制
1 |
|
高版本的jenkins除了关闭沙箱之外,还需要授权同意
jenkins发布流水线参考demo
1 |
|