Bazel 是 Google 公司于 2015 年开源的一款构建框架,至今收获了 21k 的 star 数,远超 gradle、maven、cmake 等同类产品。近几年来,字节阿里腾讯等互联网大厂也逐步拥抱 Bazel,搭建自己的构建体系。
最近在 BazelCon 23 上宣布,Bazel 7 推出了多年来一直在开发中的一系列新功能,其中包括全新的模块化外部依赖管理系统 Bzlmod、全新优化的“Build without the Bytes”模式、得益于 Project Skymeld 的多目标构建性能改进等等。
经过三年的试用,2020 年,Spotify 决定采用 Bazel 作为 Spotify iOS 应用程序的官方构建系统。按照 Spotify 工程师 Patrick Balestra 的说法,这一切换将他们的构建时间减少了四分之三。
作者 | Gregory Szorc 译者 | 王者 策划 | 万佳 与几年前相比,现在的 CI 平台要强大得多。总的来说,这是一件好事。借助强大的 CI 平台,软件公司和开发人员可以更频繁地发布更可靠的软件,这对软件用户或客户来说是有利的。一些集中式 CI 平台(如 GitHub Actions、GitLab Pipelines 和 Bitbucket)带来了规模效益,互联网提供了有关如何使用它们的信息。只要搜索一下如何在 CI 平台 Y 上执行 X 操作,就可以找到一些可以直接复制和粘贴的代码。毕竟,没
Bazel 支持很多内置的规则,语言相关规则有 Shell、Objective-C、C++ 和 Java,比如 sh_binary、cc_binary、cc_import、cc_library、java_binary、java_import等。但是 Go 编译内置规则没有支持,不过好在 Bazel 支持规则扩展,可以自定义 Go 相关规则,包括可以实现如 go_binary、go_library、go_test等规则。而 `rules_go`[1] 就是 Bazel 官方维护的 Go Bazel 开源扩展规则。`gazelle`[2] 这个项目可以将 Go 项目转为 Bazel 方式构建,包括生成 BUILD.bazel 文件,根据 go.mod 文件自动生成下载依赖模块规则 go_repository。这里简单介绍下 rules_go 和 gazelle 相关内容,更多可以参考官方相关文档。
我们之前的文章里经常使用常规规则(regular rules)函数 rule() 来创建自定义规则,但是这些规则都有一个问题:他们依赖于主机系统上安装的各种工具。这样就会出现一个问题,即构建是不可复制的,如果同一项目上的两个开发人员安装了不同版本的 Go SDK,则他们将构建不同的二进制文件。它还会中断远程执行,即主机的工具链可能在执行平台上不可用。而 repository_rule() 就可以解决这个问题。
本篇的源码放在: https://github.com/backendcloud/example/tree/master/bazel-remote
技术是安身立命之本,实践出真知,熟能生巧,佐以业务能力,遇上风口之时,可逆天改命!
{Fast, Correct} - Choose two Build and test software of any size, quickly and reliably
hawkingrei(王维真),中间件高级开发工程师,开源爱好者,TiDB & TiKV Contributor。
操作系统:GUN Linux操作系统AARCH64架构。 istio-proxy版本:istio-proxy1.15.2
经过一周的反复折腾,终于能顺利 debug envoy 源码,中途踩了无数坑,在此记录一下。
本文的目的是分享在TX1上安装Tensorflow Serving时遇到的主要问题,避免重复踩坑。
我是在大概2015年的时候加入B站,之前是负责整个B站的后端,大概在2018年的时候转架构师,监管一个EP的团队。其实之前虽然没有做EP的一些事情,但是在转团队的时候,其实也进行了这样的实践。自己也有一些想法,如何快速交付、如何监管代码质量、如何测试等等。
上一篇大概介绍了istio引入了wasm以及wasm的简史介绍。虽然引入了一些知识引导读者了解一下它的简单特性,但是还有些欠缺,这里要打个补丁。详细阐述一下 wasm 构建及使用的相关知识。
Istio由控制面和数据面组成。其中Envoy是Istio在数据面缺省使用的转发代理,Istio利用Envoy的四层和七层代理功能对网格中微服务之间的调用流量进行转发。今天我们来分析一下Istio 使用到的Envoy构建流程。
容器镜像是编译构建而成、存储在镜像仓库中、由Docker命令或kubectl命令启动运行的软件包。在容器镜像的构建、保存、获取以及启动环节中,有很多的安全隐患。
内容来源:作者——shengofbig,链接:https://www.jianshu.com/p/d01472734a78,好文请多支持!谢谢你的阅读。
RocketMQ 5.0 是一个里程碑式的版本,经历了近 5 年的打磨,代码变更达到 60%。
在当今的软件开发世界中,构建工具的选择对于提高开发效率、维护代码质量以及提升团队协作能力都至关重要。谷歌作为全球技术巨头,为了解决大规模代码构建和测试的挑战,开发了一款名为Bazel的构建工具。Bazel具有强大的功能和灵活性,已成为开源社区中的明星工具。本文将深入探讨谷歌的Bazel构建工具及其在软件开发中的应用。
宏是实例化规则的函数。当 BUILD 文件过于重复或过于复杂时,它就非常有用,因为它允许您重复使用某些代码。
本文会讲述 Bazel 自定义工具链的两种方式,Platform 和 Non-Platform 方式。会存在这两种方式的原因是 Bazel 的历史问题。例如,C++ 相关规则使用 --cpu 和 --crosstool_top 来设置一个构建目标 CPU 和 C++ 工具链,这样就可以实现选择不同的工具链构建 C++ 项目。但是这都不能正确地表达出“平台”特征。使用这种方式不可避免地导致出现了笨拙且不准确的构建 APIs。这其中导致了对 Java 工具链基本没有涉及,Java 工具链就发展了他们自己的独立接口 --java_toolchain。因此非平台方式(Non-Platform)的自定义工具链实现并没有统一的 APIs 来规范不同语言的跨平台构建。而 Bazel 的目标是在大型、混合语言、多平台项目中脱颖而出。这就要求对这些概念有更原则的支持,包括清晰的 APIs,这些 API 绑定而不是分散语言和项目。这就是新平台(platform)和工具链(toolchain) APIs 所实现的内容。
随着2024年的到来,JavaScript的世界再次迎来了技术革新的浪潮。今天,我有幸阅读了一篇国外技术大咖对即将主导这一年的5大JavaScript构建系统的深度解析。这不仅仅是一篇文章,而是一扇通往未来前端开发世界的窗户。我决定将其翻译并整理,与大家一同探索这些可能改变我们工作方式的工具。在这篇文章中,我们将一起揭开2024年构建系统的神秘面纱。让我们一起开始这场技术之旅,看看这些构建系统如何在新的一年里助我们一臂之力。以下,是我为您准备的精彩内容。
TensorFlow对Android、iOS、树莓派都提供移动端支持。 移动端应用原理。移动端、嵌入式设备应用深度学习方式,一模型运行在云端服务器,向服务器发送请求,接收服务器响应;二在本地运行模型,
Monarch 是 Pinterest 的批处理平台,由30多个 Hadoop YARN 集群组成,其中17k+节点完全建立在 AWS EC2 之上。2021年初,Monarch 还在使用五年前的 Hadoop 2.7.1。由于同步社区分支(特性和bug修复)的复杂性不断增加,我们决定是时候进行版本升级了。我们最终选择了Hadoop 2.10.0,这是当时 Hadoop 2 的最新版本。
本文来自张绍文老师的《Android开发高手课》,我把我认为比较好的文章整理分享给大家。
对于个人和公司来说,存在许多状况是更希望在本地设备上做深度学习推断的:想象一下当你在旅行途中没有可靠的互联网链接时,或是要处理传输数据到云服务的隐私问题和延迟问题时。
选自DataScience 作者:Chia-Chun 机器之心编译 参与:Edison Ke、路雪 本文作者 Chia-Chun (JJ) Fu 是加州大学圣塔芭芭拉分校的化学工程博士。她在 Insight 工作的时候,在安卓系统上用 TensorFlow 部署了一个 WaveNet 模型。本文详细介绍了部署和实现过程。 对于个人和公司来说,存在许多状况是更希望在本地设备上做深度学习推断的:想象一下当你在旅行途中没有可靠的互联网链接时,或是要处理传输数据到云服务的隐私问题和延迟问题时。边缘计算(Edge c
作为一名围棋渣渣,时不时会上对弈平台下下棋。围棋太博大精深,非常惭愧,虽然在下棋上花的时间很多,但一直处在菜鸟阶段,长期在1级和1段之间徘徊(腾讯野狐围棋上的排位)。要提升水平,需要下功夫去记定式、做死活题,但那太枯燥了,相较而言,我更喜欢上网厮杀,屠龙或被屠,爽一把再说。我等初级选手,经常会碰到那种不按套路的对手,有时明明觉得对方下了无理手,但就是不知道如何反击。再就是棋盘太空旷,不知如何选点。这些虽然在书上可以学到一些基本技巧,但一到实战,往往不知如何下手。
作者:刘才权 编辑:田 旭 安装平台 1 平台 目前TensorFlow已支持Mac、Ubuntu和Windows三个主流平台(64位平台), 2 GPU vs CPU 在安装时可以选择安装版本是否
作者 | Motiejus Jakštys 译者 | 平川 策划 | 罗燕珊 本文最初发布于 Motiejus Jakštys 的个人博客。 免责声明:我在 Uber 工作,我的一部分职责是将 zig cc 引入公司。但这篇文章是我的观点,与 Uber 无关。 我日前在 Zig 的一场交流会上作了题为“Uber 引入 Zig”的 演讲。本文从技术和社交两方面简单介绍了“Uber 是如何使用 Zig 的”,而主要的篇幅是介绍“我把 Zig 带到 Uber 的经验”。 本文要点: Uber 使用
genrule 的 参数 分为:sources,a tool(例如一个内置命令,一个shell脚本),一条命令,outputs
之前搞 opentelemetry-cpp 的时候接触了下 bazel 构建系统。这玩意儿用起来有一点坑,特别是使用自定义编译环境的时候。
(1)NVIDIA的显卡驱动程序和CUDA完全是两个不同的概念哦!CUDA是NVIDIA推出的用于自家GPU的并行计算框架,也就是说CUDA只能在NVIDIA的GPU上运行,而且只有当要解决的计算问题是可以大量并行计算的时候才能发挥CUDA的作用。
为了实现如标题所述的将多个静态库合并为一个动态库,内置的 Bazel 规则是没有这个功能的,Bazel C/C++ 相关的内置规则有:
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
Bazelisk Python版本已经废弃,最新的是用 Go 编写的,bazelisk 在 Bazel 外面又包装了一层。它会根据项目当前的工作目录自动选择一个配置的 Bazel 版本,从官方服务器下载它(如果需要),然后将所有命令行参数透传给真正的 Bazel 二进制文件。这样就可以像调用 Bazel 一样调用它。
Tensorflow Lite官方在移动端提供了官方编译好的库,我们直接拿来用就好。Tensorflow 在Linux平台与Mac平台下编译也非常轻松,基本不会遇到太多问题(据说Google内部只用Linux与Mac)。但是在Windows下编译真是一波三折,好在已经编译成功了,记录一下Windows 10下Tensorflow Lite编译过程,帮助一下跟我一样被Tensorflow折腾的不行的人。
先用Go写个hello-world源文件。执行go mod init和go mod tidy
Bazel是一个类似于类似于 Make、Maven 和 Gradle的构建和测试工具。使用 Java、C++、Go、Android、iOS 以及许多其他语言和平台进行构建和测试。Bazel 可在 Windows、macOS 和 Linux 上运行。
原因还是以前常见的镜像服务错误:http: server gave HTTP response to HTTPS client
本文示例可见:https://github.com/ikuokuo/start-cpp20
本篇的代码放在: https://github.com/backendcloud/example/tree/master/bazel-sample/docker WORKSPACE文件内容: 加载rules_go 加载rules_docker 加载gazelle 准备基础镜像alpine_linux_amd64和distroless_linux_amd64 (类似Dockerfile的FROM) ⚡ root@localhost ~/bazel-sample/docker main ± c
tensorflow bazel 编译命令: (编译cpu支持的版本,限制编译的内存为2GB, 并兼容旧版本的ABI)
为了实现程序的灵活性,可以手动指定从哪儿采集数据、以及配置上报到HDFS上什么样的位置。因为要从命令行中接收参数,此处使用Google-option来进行解析。以下是Google-option的github地址:https://github.com/pcj/google-options
领取专属 10元无门槛券
手把手带您无忧上云