云效DevOps实践-代码扫描

简介: 9.18,13:00云效分论坛不见不散!

当代企业,离不开软件技术。软件是工程师编写的,难免可能存在质量或安全问题,这些问题可能在生产环境中引发严重的故障,直接造成企业的经济损失和信任危机。

为了将风险降至最低,建议在编码过程中启用一系列的自动化扫描服务,尽早的发现问题,将风险扼杀在摇篮中。

那么福利来了,点击https://yunqi.aliyun.com/2020/session106,直达9.18云栖大会云效分会场,即可免费领取云效AI研发助手。
图片.gif

用户的诉求或问题
编码不规范:开发者专业度有限,特别是依赖外包团队的情况,业务代码通常没有通过细致的设计,也很难保证兼容性和扩展性,存在隐藏的缺陷和故障风险;
敏感数据泄露:开发者缺乏安全意识,企业的敏感信息直接编写到代码中,可能造成敏感信息的外流,进而使得不法分子有机可乘,造成企业损失;
依赖项存在安全漏洞:代码中免不了引入二方或三方的依赖包,特别是引入开源依赖包的场景下,很可能自身代码保护周全,但是依赖的代码存在安全漏洞,使得不法分子可以通过这些漏洞发起攻击;
代码优化:开发者编写了代码,期望能够得到专业的代码优化建议;

云效代码扫描解决方案
启用服务
云效代码管理内置了多种扫描服务,为了保证每次提交都能及时的获取扫描结果,建议在创建代码库后,立即前往代码库「设置」-「集成与服务」开启自动化扫描服务。
image-10.png

点击期望开启服务右侧的开关,确认授权后服务成功启用。
image-11.png

启用时可以选择触发方式:提交触发或合并请求触发,部分服务仅支持一种触发方式。
「提交触发」在每次提交后,将自动触发相关分支的全量扫描,即扫描分支下的所有内容;
「合并请求触发」在创建或更新合并请求后,将自动触发源/目标分支的增量扫描,即扫描源/目标分支变更的内容(Diff);
如不再使用扫描服务,点击服务右侧开关关闭即可。
接下来依次介绍上述四种扫描服务。

代码质量——Java 开发规约
《阿里巴巴 Java 开发手册》是阿里内部 Java 工程师所遵循的开发规范,涵盖编程规约、单元测试规约、异常日志规约、MySQL 规约、工程规约、安全规约等,这是近万名阿里 Java 技术精英的经验总结,并经历了多次大规模一线实战检验及完善。根据约束力强弱,规约依次分为强制、推荐、参考三大类:
【强制】必须遵守。是不得不遵守的约定,违反本约定或将引起严重的后果。
【推荐】尽量遵守。长期遵守这样的规则,有助于系统稳定性和合作效率的提示。
【参考】充分理解。技术意识的引导,是个人学习、团队沟通、项目合作的方向。
Java 代码规约扫描使用《阿里巴巴 Java 开发规约》插件扫描 Java 规约问题。

代码质量——代码补丁智能推荐
缺陷检测和补丁推荐几十年来一直是软件工程领域的难题,又是研究者和一线开发者最为关心的问题之一,这里讲的缺陷不是网络漏洞、系统缺陷,而是隐藏在代码中的缺陷。帮助开发者识别这些缺陷,并进行修复,能够大幅提升软件质量。
基于业界和学术界较为流行的缺陷检测手段,并分析和规避其局限性,云效代码管理的算法工程师们提出了一种新的算法,实现更加精准和高效的分析代码缺陷并推荐优化方案,该算法已被国际软件工程大会(ICSE)收录。
代码补丁推荐服务目前应用于合并请求的代码自动扫描场景,扫描输出优化推荐方案,问题等级仅包含 MAJOR 类型:建议修复的代码缺陷。

代码安全——敏感信息检测
敏感信息检测功能,可以检测代码库中的敏感凭证和密钥,比如 API keys 等信息。集成在合并请求代码评审阶段,可以有效防止敏感信息意外提交。
敏感信息问题等级分为:BLOCKER, CRITICAL, MAJOR
BLOCKER: 通过规则扫描出来的可能性很高的明文问题 ;
CRITICAL: 通过信息熵模型得出的可能性较高的潜在问题;
MAJOR: 用于测试的敏感信息字段;

代码安全——依赖包漏洞检测
为了杜绝安全隐患,企业需要做到以下三点:
了解工程都使用了哪些依赖包;
删除不需要的依赖包;
检测并修复当前依赖的已知漏洞;
依赖包漏洞检测服务帮助企业方便的检查其工程依赖包的安全性。
依赖包漏洞等级分为:BLOCKER, CRITICAL, MAJOR,等级划分根据 NVD 国家漏洞数据库CVSS 分数评估制定。
BLOCKER: 高危漏洞,建议立即修复;
CRITICAL: 中危漏洞,建议尽快修复;
MAJOR: 低危漏洞;

提交代码执行检测
为了保证代码问题不被引入生产环境,越早进行检查,引入的风险越小。因此,建议能够在每次提交时都进行代码检测,从起点发现并扼杀问题,保障后续应用研发流程的稳定性。
开启检测服务时,勾选触发方式的「代码提交触发扫描」,如图①:
image-12.png

此后库内的每次提交都会自动执行对应的自动化检测,检测当前新提交的所有文件,可在源文件或提交页面查看检测结果:
image-13.png

image-14.png

可点击检测服务展开问题详情查看,Blocker 级别的问题建议立即解决,这类问题容易引起故障或安全漏洞:
image-15.png

合并请求执行检测
开启检测服务时,勾选触发方式的「合并请求触发扫描」,如图②:
image-16.png

此后库内的每次创建合并请求或合并请求源分支有新提交,都会针对变更文件自动执行对应的自动化检测,保证新增期望合并至目标分支的代码质量和安全。

可在合并请求列表和详情页面查看检测结果:
image-17.png

image-18.png

点击合并请求详情的检测结果详情,可以跳转代码行内查看具体问题代码:
image-19.png

安全检测
针对安全类问题,通常需要统计或追溯历史,因此云效代码库中提供了专门的安全模块,用于承载检测出的全部问题,并记录了已解决的历史数据。
若未开启过安全类检测服务,可以通过安全模块前往代码库设置-「集成与服务」中开启。
image-20.png

开启后,可以在当前页查看各分支检测出的安全问题:
image-21.png

同样,可点击问题名称查看详情和推荐的解决方案:
image-22.png

TIPS:针对敏感信息检测,若部分文件希望跳过扫描,可以使用文件白名单的功能,白名单内的文件将不被检测:
image-23.png
总结
将测试左移,对每次提交和合并进行自动化检测,保证存量和新增代码的质量和安全,能够有效的提升研发效率,助力企业更好的实现业务价值。

点击链接:https://yunqi.aliyun.com/2020/session106直达会场订阅云栖大会云效分会场,也可加入钉群:34543530,更多干货等你探索,9.18,13:00,不见不散!

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
SVN版本控制系统
SVN是现在软件开发之中的主流软件版本控制工具,在工作之中利用SVN可以有效的解决多人开发的代码管理问题,本课程将为读者讲解SVN服务器的配置以及基于MyEclipse的SVN客户端插件的配置与使用,并且在讲解之中着重讲解了冲突的产生于解决。
目录
相关文章
|
15天前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
39 2
|
5天前
|
运维 安全 Devops
DevOps实践中的安全审核和合规性
DevOps实践中的安全审核和合规性
|
5天前
|
监控 安全 Devops
DevOps实践中,如何平衡开发速度和安全审核的效率?
DevOps实践中,如何平衡开发速度和安全审核的效率?
|
7天前
|
存储 监控 Devops
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
|
8天前
|
运维 安全 Devops
DevOps实践中的安全审核和合规性
DevOps实践中的安全审核和合规性
|
16天前
|
jenkins Devops 测试技术
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第26天】随着DevOps理念的普及,Jenkins作为一款开源自动化服务器,在持续集成(CI)与持续部署(CD)中发挥重要作用。本文通过某中型互联网企业的实际案例,展示了Jenkins如何通过自动化构建、持续集成和持续部署,显著提升开发效率、代码质量和软件交付速度,帮助企业解决传统手工操作带来的低效和错误问题。
44 4
|
16天前
|
运维 监控 Devops
DevOps文化:持续交付与持续反馈的文化构建与实践
【10月更文挑战第26天】DevOps作为一种将开发与运维紧密结合的文化和实践,通过促进团队协作与自动化流程,实现快速、稳定且高质量的软件交付。本文重点探讨持续交付与持续反馈两大支柱,通过实际案例和示例代码,展示其构建与实践过程。例如,使用Jenkins构建CI/CD流水线,通过Grafana和Prometheus实现实时监控,确保软件质量和快速响应。
28 1
|
10天前
|
运维 Devops jenkins
DevOps实践之持续集成与持续交付
【10月更文挑战第32天】在软件开发的快节奏世界中,DevOps已经成为提升效率和质量的关键策略。通过将开发(Development)和运维(Operations)紧密结合,DevOps促进了更快速的软件发布和更高的可靠性。本文将深入探讨DevOps的核心组成部分——持续集成(CI)和持续交付(CD),并展示如何通过实际代码示例实现它们,以帮助团队构建更加高效和稳定的软件发布流程。
|
15天前
|
运维 Devops jenkins
DevOps文化:持续交付与持续反馈的文化构建与实践
【10月更文挑战第27天】DevOps文化强调开发和运维的紧密合作,以实现快速、高质量的软件交付。核心在于持续交付和持续反馈。本文探讨了如何通过改变组织结构、构建跨功能团队、使用自动化工具(如Jenkins)和积极收集用户反馈,来构建和实践DevOps文化。
27 0
|
20天前
|
运维 安全 Devops
DevOps实践:持续集成与持续部署(CI/CD)的自动化之路
【10月更文挑战第22天】在软件交付的快速迭代中,DevOps文化和实践成为企业加速产品上市、保证质量和提升客户满意度的关键。本文将通过一个实际案例,深入探讨如何利用持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)实现软件开发流程的高效自动化,包括工具选择、流程设计以及问题解决策略。我们将一起探索代码从编写到部署的全自动化旅程,揭示其对企业运维效率和产品质量所带来的深远影响。