静态分析 | 开发运维

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工作流程中的。

gitlab开启Sonar gitlab sast_gitlab查看分支是谁创建的

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

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

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

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

1.安装GitLab

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

要安装GitLab:

(1) 转到about.gitlab.com,然后单击安装GitLab。

(2) 选择您首选的GitLab Omnibus软件包。

(3) 安装和配置必要的依赖项。

(4) 添加GitLab软件包存储库并安装软件包。

(5) 浏览到主机名并登录。

(6) 设置您的通信首选项。

(7) 启动GitLab。

2.安装Klocwork

接下来,您将下载Klocwork。

如果您尚未使用Klocwork,请联系上海龙智了解更多。

3.配置GitLab运行程序

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

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

4. Klocwork集成分析

这提供了现有问题的基线,完整的项目上下文;Web界面提供了项目健康状况的概览和趋势。它是Klocwork分析的主干,在此示例中,我们将在提交到主分支时运行集成分析,提交主分支应该来自于Pull Request请求。(原文:It is the backbone of the Klocwork analysis and for this example, we will configure it to run only on commits to the master branch, which given the workflow should be coming from pull requests.)

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

gitlab开启Sonar gitlab sast_gitlab合并分支到master_02

 

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

gitlab开启Sonar gitlab sast_gitlab合并分支_03

 

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

5.  KlockWork差异分析

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

gitlab开启Sonar gitlab sast_gitlab合并分支_03

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

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

3. 使用“ kwciagent create”为Klocwork创建本地工作空间。 4. 运行分析,通过传入的差异文件列表仅对发生变化的文件进行分析。 5. 可以创建检测到的新问题的记录,在这里创建xml文件。 6. 可以通过检查问题列表是否满足预先定义的阈值,如果不满足,则CI过程失败。在此示例中,如果存在任何新问题,CI过程返回失败。

GitLab SAST看起来是怎么样的

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

gitlab开启Sonar gitlab sast_gitlab合并分支_03

 

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

gitlab开启Sonar gitlab sast_gitlab使用_06

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

gitlab开启Sonar gitlab sast_gitlab开启Sonar_07

全周期

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

gitlab开启Sonar gitlab sast_gitlab使用_08

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

gitlab开启Sonar gitlab sast_gitlab合并分支_09