CodeCraft——宝马“数字汽车”软件开发的领航者

亚历山大·德克
DevOps工程师和JFrog平台服务负责人

宝马在软件开发方面有着悠久的历史:公司软件、车载软件和车载软件几乎涵盖了所有领域。

20多年来,宝马在将软件引入汽车以及使用大规模后端基础设施连接我们的车队方面积累了丰富的经验。在这个领域,组件的复杂性和数量呈指数级增长,这催生了CodeCraft几年前对一个新的DevOps平台的需求,以推动宝马电子控制单元(ecu)的开发,影响从发动机到车窗、转向、刹车的每个组件。

BMW iX Sports Activity Vehicle®作为数字原生产品,将成为我们首款提供这些全新软件体验的车型。从最先进的技术开始,我们转向尖端的技术堆栈,以确保在严格的安全法规下快速稳健的开发过程,并使我们的团队能够应对所有相关的挑战。

JFrog产hth华体会最新官方网站品(如Artifactory)是该服务网格中必不可少的关键任务部分。

视频记录

大家好,热烈欢迎来到JFrog SwampUP 2021。我的名字是Alexander Denk,我是宝马的DevOps工程师,致力于我们的项目Codecraft。我是我们JFrog产品的服务负责人,也是GitHub上的代理服务。hth华体会最新官方网站我的第一次编码经历始于2002年,当时我开始使用Visual Basic进行覆盖。从那以后,我获得了计算机科学硕士学位,然后加入了一家研究公司和一家食品初创公司,后来在2018年,我终于在宝马公司(BMW)担任了现在的职位。

这不是偶然的,正如你在上面的图片中看到的那样。这是近30年前的我,坐在我的第一辆宝马车里,这开始于我对汽车的热爱。今天,我想谈谈我们的项目Codecraft,它是数字核心软件开发的驱动力,将创新带到下一个层次。在过去,当你考虑建筑成本时,主要是关于钢材的弯曲,但今天我们几乎所有的东西都是数字化的。

你可以看到,如果你仔细看看这张图,我们有机器人,我们有监控和记录,我们有一个完全数字化的供应链。但这不是我今天的主要话题,因为今天我想谈谈汽车本身。对于我们研发部门来说,我们关注的是数字汽车,这主要是硬件和软件。

今天,我们的车里有很多这两种东西。举个例子,我们有宝马8号操作系统,它支持远程软件更新,与一个庞大的后端相连,并提供了许多驾驶辅助功能,我们今天已经走向高度自动化驾驶。我们有一个数字钥匙,我们有一个支持自然语言处理的个人助理,还有一个支持手势控制的人机界面。

最重要的是,我们有很多应用。在这个例子中,你可以看到宝马的总部,这是一个在每个领域都有大规模增长的例子。当我们在90年代早期开始我们的第一个导航和娱乐方案时,我们的主机上有16mb的RAM。今天,这个数字几乎是当时的1000倍。我们看到每个领域都在增长。

我们在硬件上看到了它,在软件上也看到了它,我们现在有了服务和后端,这在15年前是不存在的,所有的服务都在向各个方向扩展。如果你看到这张幻灯片,这是我从宝马集团投资者的演讲中截取的,在2021年5月初,我们宣布了新时代2025,这是对我们自己过去毫不妥协的电动化、数字化和循环化的参考。数字化对我们来说是公司的目标之一,不仅是我们部门的目标,也是整个公司的目标之一。为客户推动创新是我们使命的重要组成部分。但是,开发者呢?首先,我们需要解决一些问题。

为什么汽车行业与其他科技公司不同?其实很简单。正如你在这里看到的,很久以前,我们有一段历史。对于大多数白手起家的科技公司来说,情况并非如此。但对我们来说,我们已经有很多过去了,我们也有一个主要的表达,没有实验。这也是有充分理由的,因为安全是至关重要的一部分。建设事业主要是关于与供应商合作的整合。

我们有很长的开发电路,远离CI和CD需求。基本上,我们过去有三到七年的时间来开发一辆车,严格的规定也使我们能够拥有高质量的功能。所以基本上,你可以说SVN已经足够好了。然而,正如我们在之前的幻灯片中看到的,我们有一个数字优先的方法,为了实现这个方法,在课堂上做到最好是一个很难的要求。最重要的是,我们有新的科技竞争对手,比如特斯拉或Neo。我们拥有更多的东西。

正如我们之前看到的,我们在后台有很多微服务。我们在车里有很多很容易使用的东西来处理不同的东西,最重要的是,我们在车里和车后面都有很多软件。我们希望避免因为软件故障而导致汽车无法上路的负面报道。不可能发生在我们身上,也不应该发生在我们身上,说实话。这也与安全有关,因为安全是防止人们被杀的一部分,但另一方面,安全也变得越来越重要,例如,数字钥匙可能不会被用来偷你的车。那么,举例来说,SVN真的足够好吗?

答案很明显。不,不是。所以,有了这些,让我们来到未来,这是我们的Codecraft。Codecraft是我们的HI软件生产工厂。它基本上是几个商业和开源服务的集合和集成。它容纳了多个ECU项目,这些项目来自当前的一代,目前正在推向市场,也将容纳下一代,正如你之前看到的,新克拉斯,将于2025年及之后宣布。

我们试图给项目留下尽可能多的选择余地,然而,我们希望提供一个统一的体验,一个统一的过程。这在细节上意味着什么?因此,我们提供了一个高质量的工具链,我们提供了最佳实践,并且我们希望为项目提供尽可能多的指导。但无论如何,我们不希望他们需要打破自然生态系统。例如,Android开发人员可能习惯于使用Carrot或Workitem,这对我们来说很好,因为如果你被迫使用GitHub,它不会像预期的那样工作。

然而,我们不希望每个项目都有一个完全脱离常规的工具链。所以这对我们来说很重要,让所有东西都保持整齐。引用的是什么?我们正在使用10,000个cpu来并行运行数千个GFCI下降,这导致每天有数以万计的OCI行程。所有这一切使我们能够处理日益增长的复杂性在各个方面的数字。那么是什么让Codecraft与众不同呢?

嗯,我们努力成为班上最好的。因此,我们需要一个现代化、快速、安全、有保障的发展环境。它必须对开发人员具有吸引力,并且必须支持良好的协作。因此,我们过去开发软件的方式对今天的我们来说是没有选择的。正如你在上面的图片中看到的,它可以被比作一棵植物。我们在工厂里有并行性,我们有合作,我们必须有趣。

关于cocraft的架构,我想先简要介绍一下技术栈和我们的核心产品组合。所以没有什么大的惊喜,我们在多个Kubernetes集群上运行Codecraft,我们利用vm和所有在内部和外部私有云上运行的东西。我们经常使用的是普通的开源软件。

例如,用于监控和记录的ELK,我们还有Prometheus和Grafana。对于监控,我们有很多横切服务,例如,涵盖SSL质量、状态和支持主题。当然,我们有用于二进制文件管理的JFrog产品等等,而且我们hth华体会最新官方网站有GitHub作为整个平台的主要驱动力。而且,不常见的是,我们有一个单独的CI和CD系统,以及我们自己的CI库。此外,我们还使用了很多标准的Git工作流。

如你所见,它只是提交代码,发出拉取请求,然后运行查看眼药水并传递结果。这是我们正在使用的非常正常的Git工作流,这非常好,因为每个开发人员都熟悉它。过去几年我们面临的主要挑战之一是,我们在所有领域都取得了巨大的增长。例如,我们完全预计在第一次使用中会有增长,因为我们开始在新平台上安装新项目,但在2020年及之后,我们也会看到CI数量和用户数量的大幅增长,这主要是为了开始生产。

然而,增长并不总是最好的事情,所以我们尽量限制它,因为扩展并不总是最好的选择,但无论如何,扩展是必要的。在幕后编写代码。我们试着吃自己的食物,所以我们试着完全在平台本身开发平台,一切都是用最先进的技术开发的。举个例子,我们大量使用代码。在左侧,您可以看到Artifactory的简单存储库定义示例。

对于正在开发整洁代码的每个人来说,这是非常熟悉的。所以我们更喜欢这个而不是人工智能的东西,因为这可以自动检查。这可以自动验证,可以自动部署,而且,它对每个开发者来说都很熟悉开发者是我们平台上的主要客户。所以一切都以开发者为中心。

为了获得最好的体验,对我们来说,使用客户正在使用的东西是非常重要的。今天,我想主要谈谈cocraft中三个不同的或不寻常的主要构建块,这可能是你意想不到的。首先,我们有OpenStack环境。我猜,这不是你们期望我谈论的内容,因为今天,我们更愿意谈论AWS、Azure、阿里巴巴或任何其他公共云。然而,出于各种各样的原因,我们仍然在使用外部私有云。

例如,我们有固定的成本,我们有固定的资源,我们能够针对用例进行优化,这将导致更低的成本和更少的资2022世界杯阿根廷预选赛赛程源,这将是一个安静的公共云环境。如果你去大规模,我们肯定是在大规模,它不是那么容易产生,例如,1000个虚拟机在公共云中,并保证在特定的时间范围内响应。一个主要的问题也是最好的朋友。所以这是一个很大的优势,走到你的邻居的桌子,然后告诉他,嗯,我们需要这个,或者我们有一个问题,你会得到直接的帮助。在公共云环境中并非总是如此。

然而,你必须有一个很大的学习曲线,我们有这个,这也可以在我这里链接的源代码中查找。永远不要忘记,总是使用最适合您用例的东西。例如,我们也使用AWS。所以OpenStack不是我们唯一的解决方案,但对于我们大部分的基本负载来说,它是最好的解决方案。下一部分我要讲的是罗勒。这是一个p链接系统,这可能也是意料之外的,因为开发主要使用例如Yocto或os来制作文件。

尽管如此,我们还是想献上罗勒,因为我们对它有着非常奇妙的体验。对于我们来说,basil允许更快的增量构建链,这主要是因为它允许分布式缓存,并且只重建真正需要重建的部分。我们已经在basil中集成了依赖项管理,并且工具和依赖项直接冻结在存储库中,这允许我们有可复制的构建,这对于开发安全关键软件非常重要。我们得到了Ripple项目的支持,这对我们来说非常重要,因为我们有很多供应商在开发相同或类似的组件,他们不允许看到彼此的代码。第一辆上路的罗勒汽车是几个月前推出的新款宝马X。

如果你看不出来,它很快,对,选二。我想谈论的最后一个组件是Zuul。Zuul不应该和Netflix的Zuul混在一起,后者关心的是微服务,我们的Zuul是用于CI\CD的,是由OpenStack社区提供的,被设计成Jenkins的替代品。它确保大多数代码总是绿色的,因为它可以防止我们将损坏的代码合并到主线中。它还支持跨项目依赖,并为基于Ansible定义比喻的剧本提供简单且可重用的风格。在我们的例子中,我们在上面也有一个CI库,它包含了Ansible剧本和Ansible角色,它涵盖了你能想到的所有CI建议的一个相当大的基础集。

例如,从分布式工件设置中上传或下载工件。此外,宝马也在积极参与Zuul的开发。核心开发人员之一是我们团队的成员。与往常一样,在开源社区中,贡献和集成总是受欢迎的。我们来总结一下。

正如我们在之前的幻灯片中所看到的,这张幻灯片展示了宝马集团投资者关系的展示,新克拉斯2025应该是不折不扣的电动化、数字化和循环化。为了实现这一切,最好的就是足够好。如果没有创新,我们就无法像10年前那样在汽车行业开发软件。所以我们需要一个现代,快速,安全的工具链,这对开发者来说是有吸引力的,因为我们需要在未来雇佣很多新的开发者,它必须是协作的,就像你在上面的计划中看到的那样。

非常感谢。现在有了提问和回答的空间。

要么释放,要么死亡