介绍

Apache SkywalkingApache基金下由国人开发的分布式链路追踪系统,Skeywalking可以为微服务,云原生应用提供可视化链路追踪服务,通过Skywalking可以方便的查看服务的调用链路和性能瓶颈。 ELK是三个项目首字母的缩写,分别为Elasticsearch、Logstash 和 Kibana,Elasticsearch 是一个搜索和分析引擎。Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等“存储库”中。Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。通过ELK用户可以在Kibana中方便查询应用日志,借助Elasticsearch强大的搜索能力,对于大数据量的日志也能进行快速检索。

Skywalking和ELK的集成,实际上就是将日志和调用链路关联起来,在交易出问题需要排查时,可以在Skeywalking查看其调用链路以及调用时长,到具体日志,需要到ELK中进行查看,两个系统需要有个标识符能够将其关联起来,这个标识符就是Trace id,skywalking会为每一笔交易生成一个traceid,在服务的调用链中会将该id传递到各个调用节点,服务在打印日志时,需要将该id带上,这样就能将其关联起来。

Read the rest of this entry

,

背景

客户通过Jenkins流水线构建镜像上传harbor部署到kubernetes,经过不断的CI/CD,harbor占用空间不断增大,但旧的镜像其实是可以删除掉,保留最新的几个版本供回滚就可以,因此需要制定删除策略,目前情况如下

  • 保留每个镜像最新3个版本即可
  • 用户通过tag区分环境,比如 definesys/hr:dev.20210601,definesys/hr:uat.20210601,这样就导致如果保留最新3个镜像,有可能都保留了dev.xxx,其他环境的都被删除,因此也要考虑按照环境做分组,只保留每个分组内的最新3个版本即可

harbor本身并没有提供类似的功能,但是harbor有完善的restapi,因此可以自己写工具去实现以上需求。

方案

  • java开发清理程序,打包为jar包,通过Main运行
  • 通过jenkins打包应用并执行清理动作

之所以选择jenkins运行jar包,是因为jenkins可以提供配置参数界面,可以将清理程序的一些配置项通过jenkins传入,省的再去开发界面,而且jenkins有定时调度的功能,可以实现定时清理的功能。

Read the rest of this entry

,

背景

某项目测试环境jenkins突然执行不了脚本,错误如下:

$ /bin/sh -xe /tmp/jenkins3171686575384136508.sh
FATAL: command execution failed
java.io.IOException: error=13, Permission denied
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
Caused: java.io.IOException: Cannot run program "/bin/sh" (in directory "/data/jenkins/workspace/yc-notice-service"): error=13, Permission denied
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.Proc$LocalProc.<init>(Proc.java:249)
	at hudson.Proc$LocalProc.<init>(Proc.java:218)
	at hudson.Launcher$LocalLauncher.launch(Launcher.java:935)
	at hudson.Launcher$ProcStarter.start(Launcher.java:454)
	at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:109)
	at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:66)
	at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)
	at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.build(MavenModuleSetBuild.java:945)
	at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.doRun(MavenModuleSetBuild.java:683)
	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:504)
	at hudson.model.Run.execute(Run.java:1819)
	at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:543)
	at hudson.model.ResourceController.execute(ResourceController.java:97)
	at hudson.model.Executor.run(Executor.java:429)
Build step 'Execute shell' marked build as failure
Finished: FAILURE

测试环境在更改jenkins工作目录后问题解决,这个改动量其实蛮大的,需要迁移原工作目录数据,还要更改工作目录配置。然后生产环境也出现同样的问题,这边记录下解决的过程。

Read the rest of this entry

介绍

前面两篇介绍sonar的安装和配置,并且简单介绍了下如何使用,可以点击以下连接回顾下

根据前面的介绍,我们知道,你可以通过maven工具或者sonar-scanner将代码上传到sonar,如果你只是搭一个demo自己测试自己玩,这样一点问题都没有,如果你准备搭建一个代码质量平台,希望推广到全公司,给所有的人用,不是把环境搭起来甩一篇使用文档就完事了,所有的工具都是这样的,给你的只是砖头,具体要盖平房还是高楼取决于用砖头的人。

目标

这次我们的目标希望能达到以下目的

  • 自定义前端界面,员工登录后可以提交代码质量检测请求,请求内容比较重要的两个字段就是git地址和git分支。
  • 可以通过前端界面跳转到sonar系统中对结果进行查看。

Read the rest of this entry

介绍

上一篇中,介绍了如何安装部署sonar,这一篇介绍如何配置sonar。

权限

每个项目都可以设置一个权限模板(Permission Templates),权限模板里可以对用户和组分配不同的权限,采用矩阵方式进行配置,以下就是sonar默认的权限模板

默认的权限模板不是很合理,其中群组sonar-users可以看所有的项目,因为所有sonar上的用户都属于这个群组,所以大家是可以互相查看对方项目的,很不合理。

Read the rest of this entry

sonar介绍

sonar是一款开源的代码质量检查工具,基本支持所有流行的编程语言。平时我们自己做代码review费时费力而且对审查的人要求比较高,一般是资深开发人员进行审查,有了sonar后上万行代码片刻之间就可以完成review,事无巨细的给你指出代码中存在的问题还能指导你如何进行修复。

在sonar中,问题分为三种,每种按照严重程度分为A-E五个级别,三种问题分别为:

  • bug,sonar能识别出非运行时bug,比如空指针没处理等。
  • Vulnerabilities(漏洞),存在的安全问题
  • bad smell(坏代码),不规范的代码,这个可以帮助我们改正我们代码中的一些不良习惯。

以下是sonar检测完后的报告:

Read the rest of this entry