Gitlab是一款涵盖整个DevOps生命周期的集成解决方案。此外,KlockWork是一款能够优化DevSecOps生命周期的静态代码分析器,例如CI/CD Pipelines。当你同时使用GitLab和KlockWork这两款工具的时候,它们可以为开发团队提供强大的GitLab SAST解决方案。在这里,我们将解释Klocwork和GitLab集成的优秀之处。

GitLab是什么

GitLab是一款基于Web应用 的DevOps生命周期的工具,它为wiki、问题追踪和CI/CD 流水线功能提供了Git仓库。GitLab由GitLab Inc.开发并于2011年发布。软件开发团队可以使用GitLab来统一开发人员的工作流,并缩短DevOps的周期时间,从而让他们能够生产更高质量的软件。

GitLab可以运用于不同产业的软件开发,广泛运用于航空航天,汽车,医疗器械以及视频游戏开发。

GitLab SAST: 为什么建议GitLab的使用者也使用Klockwork

Gitlab是一款知名的DevOps生命周期工具。因为它缩短了生命周期时间;降低了工程风险;有助于确保应用更安全;并在各个阶段之间架起桥梁。为什么更多的开发人员会选择使用静态软件分析工具KlockWork来补充GitLab呢?

Klockwork 能够为GitLab提供更多功能

差异分析

使用服务器提供的系统上下文数据(system context data), Klockwork能只分析已更改过的文件,同时还提供差异分析结果,就如同对整个系统进行了分析一样。这个差异分析大大缩短了整个系统对新代码和更改代码的分析时间。

集成分析

使用服务器系统提供的上下文数据,Klockwork能够提供软件项目当前健康状况的快照。每次集成分析之后,Klockwork都会自动生成一份检测到的代码问题列表以及其它代码情况的报告。通过定期运行集成分析,你可以提升代码质量并确保你代码库的统一性。

怎样同时使用GitLab和Klockwork

有很多办法可以将Klockwork的静态分析工具集成到连续集成系统(如GitLab)中。因为Klockwork提供了命令行接口(command-line interface)和灵活的工具,它们能适用绝大多数的工作流。这里有一个建议示例,说明了如何使用开发人员功能分支将Klockwork集成到DevSecOps工作流程中的。

a2a9c12d92516b5c218e8356853d7b32.png

图上工作流显示了开发者的简化版本,他们创建了自己的功能分支以开发新特性或解决已知的缺陷。解决了新功能或修复bug后,代码将合并到主分支中,等待发布。

使用Klocwork工具,您可以使用集成分析工具在代码库中创建已知问题的基线。然后,这些结果将可以通过门户网站让所有人看到,可以分派修改这些问题或者推迟解决。该集成分析为后续的差异分析提供了完整的项目上下文和现有问题数据。

借助差异分析可以在服务器端检查开发人员提交的内容是否包含新缺陷,或者将要合并的分支是否会带来额外的技术负担。

然后可以通过GitLab向开发人员提供反馈,说明他们的提交包含新的缺陷,并且基于质量标准拒绝相应的pull request请求。

1.安装GitLab

首先,您需要安装GitLab。如果您已经完成此操作,请跳至下一步。

要安装GitLab:

  1. 转到gitlab官网,然后单击安装GitLab。
  2. 选择您首选的GitLab Omnibus软件包。
  3. 安装和配置必要的依赖项。
  4. 添加GitLab软件包存储库并安装软件包。
  5. 浏览到主机名并登录。
  6. 设置您的通信首选项。
  7. 启动GitLab。

2.安装Klocwork

接下来,您将下载Klocwork。

3.配置GitLab运行程序

运行人员需要找到配置Klocwork的位置,第一种方法是通过ssh连接到现有的计算机,第二是通过ssh或是Klocwork配置docker映像。

Klocwork提供了用于差异分析和集成分析的工具包,这意味着开发人员可以通过复制和提取将其轻松部署到机器上。其次需要为runner配置一个标签,runner能够以此标签进行Klockwork分析,然后可以在作业步骤中使用它。在这些例子里,使用Klocwork标签。

4. Klocwork集成分析

这提供了现有问题的基线,完整的项目上下文;Web界面提供了项目健康状况的概览和趋势。它是Klocwork分析的主干,在此示例中,我们将在提交到主分支时运行集成分析,提交主分支应该来自于Pull Request请求。

编辑项目中的“.gitlab-ci.yml”文件

1f3804205b604ada866b2fd900b93efe.png

将变量引入与此相关的Klocwork服务器和项目的文件可以简化配置。

13d85964e4edc8d2763b016c96547be6.png

集成分析基于命令行,此处已被过滤,仅作为测试阶段的一部分在主分支上运行。捕获,分析和加载过程与通常的流程相同,但是有一个变化是使用提交引用作为KlockWork基线构建的名称,在以后的增量分析中作为参考。

5. KlockWork差异分析

在整体分析被实施之后在项目里至少有一个基线是有效的,可以无需过往的本地数据,快速地分析项目。

13d85964e4edc8d2763b016c96547be6.png

在项目的同一个yml文件中,还可以自行配置差异分析。可以对除master分支以外的所有对象运行(即任何开发人员功能分支),可将其配置为运行Klocwork差异工具“ kwciagent”。采取的步骤如下:

1. 使用Klocwork的工具捕获构建数据。

2. 生成一个文本文件,该文件应包含此提交中已更改文件的列表,且不进行任何格式设置(每行一个文件)。显示的是一个示例git/ diff命令来生成此命令,它需要diff的引用,我们使用其最后的基准构建名称。

3. 使用“ kwciagent create”为Klocwork创建本地工作空间。

4. 运行分析,通过传入的差异文件列表仅对发生变化的文件进行分析。

5. 可以创建检测到的新问题的记录,在这里创建xml文件。

6. 可以通过检查问题列表是否满足预先定义的阈值,如果不满足,则CI过程失败。在此示例中,如果存在任何新问题,CI过程返回失败。

GitLab SAST看起来是怎么样的

创建功能分支并提交pull request请求后,便可以了解分析的大致情况:

13d85964e4edc8d2763b016c96547be6.png

上面提到的差异分析,与基线代码相比较,新加入的代码引入了新的问题,所以分析结果被标记为失败。显示为红叉,标记为第二阶段失败了,在这个例子中,意味着编译成功了但是测试阶段失败了。

ef9f83a274ab9812c1227efe412e6c85.png

根据pull request请求,现在可以查看流水线是否在开发功能分支中成功完成,以此为合并提供警告。还请注意,在配置过程中,已将其配置为存档差异结果文件和更改列表,这些文件可从流水线中下载

0236b35dcd973b78b278be42a2134c82.png

全周期

通过pull request请求显示有关合并的警告,可以解决缺陷并重新提交。GitLab将在新提交上自动运行差异分析并更新pull request请求的状态

14ca807a1e579798f3b17ef94196228b.png

合并到master分支后,将再次执行完全集成以创建新的基准,捕获由合并所做的更改,这可以在下面显示:

61e569a95741b15aa9d811a835c446b2.png

Perforce公司也关注到我们国内开发人员的需求,在国内也部署了其技术服务网点—上海龙智数码,可以为我们国内企业在 Klockwork 的使用及技术支持上提供帮助。

点击文末“了解更多”可进入龙智官网,欢迎咨询相关产品。更多DevOps解决方案可关注微信公众号「龙智数码」。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐