对于一家必须领先于黑客、欺诈者和网络犯罪趋势的全球网络安全公司来说,构建、测试和发布软件的繁琐遗留流程是一个巨大的挑战。
背景
这家国际网络安全公司为全球的企业、政府和小型企业提供服务。开发团队总是有太多的悬念,多个项目同时进行。其中包括虚拟化工具,如基于内核的虚拟机 ( KVM ) IKVM 和 Oracle 的开源 VirtualBox。项目之间的相互依存关系解决的比较好。然而,几乎所有的事情都是通过 cron 作业管理的,cron 作业是类 Unix 计算机操作系统中基于时间的调度程序,可以将作业编程为在固定时间、日期或间隔定期运行。
目标:将所有内容转移到 Jenkins,而不是依赖 cron 作业和脚本。
解决方案和结果
主要目标是拥有一个自动化的 CI/CD工具链,并通过使用 Jenkins 的几个步骤,我们得到了我们想要的。每个项目都会用 Jenkinsfile 替换 cron 作业脚本和 makefile,我们使用 Jenkins 插件 API 或基于 http 的 API,而不必调用 shell 命令。
然后我们遇到了另一个挑战:将所有代码移动到 GitLab。
为此,我们的开发人员将代码提交到 GitLab,这会触发 Jenkins 调用 Jenkinsfile。我们在容器上构建代码,后端使用 Python/C ,前端使用 node.js,允许我们推送到私有开源容器镜像注册中心 Harbor。现在我们可以拉取新镜像并部署到测试平台。完成后,我们可以启动自动化测试,如果测试通过,PM 可以发布最新版本。
我们必须遵循一些基本步骤,包括:
- 如何说服开发人员使用 Jenkins:
- 我们为每个项目创建了一个 Jenkinsfile
- 我们删除了 Makefile 和 cron 作业脚本
- 我们让开发者别无选择
- 如何通知用户构建/测试结果:
- 我们使用 Slack 和电子邮件
- 如何与 GitLab 集成:
- 我们使用了 Jenkins-GitLab-plugin
- 如何与容器集成:
- 我们使用了Jenkins-Docker-plugin
- 如何监控Jenkins:
- 我们依赖 Grafana 中的 Prometheus
现在,每个人都有一个 Jenkins 帐户,一切都可以在 Jenkins UI 上可见。这就像拥有一个 DevSecOps 中心。我们取得了优异的成绩,包括:
- 一切都是自动触发的
- 每个开发人员/QA 都知道他们的代码到底发生了什么,而且是实时的
- 与 GitLab 集成使代码管理更容易
- 与私有注册表的集成使镜像管理更容易
- Jenkins 状态始终可见,以防服务器或服务出现故障