Gerhard started Ship It as an extension of the work he was doing on Changelog, focusing on infrastructure and the process of taking applications to production. The podcast was a way to share the insights and experiences gained over years of working in this space.
Dagger is a tool that allows teams to replace YAML and scripts in CI/CD pipelines with code they are familiar with, such as Python, Go, or TypeScript. It helps scale automation for teams and makes it easier to share and reuse modules, reducing the need for templated YAML or Jenkins files.
Dagger's key features include the ability to write automation in familiar programming languages, shareable modules, OpenTelemetry integration for tracing, and a shell for interactive discovery of automation. It also ensures consistent execution across local and CI environments.
Documentation provides a blueprint for understanding inefficiencies and ensures that automation is built on a solid foundation. It helps teams avoid mistakes and provides a reference for future changes, making it essential before any automation is implemented.
The vision for Dagger is to become the standard for automation, similar to how containers revolutionized application packaging. It aims to make automation more consumable, shareable, and documented, reducing the need for repetitive tasks like downloading and validating packages.
At scale, Dagger faces challenges such as managing distributed caching, ensuring reliable pipeline execution, and optimizing costs. Running thousands of CPUs for testing can be expensive, and the tool must balance performance with cost efficiency.
Dagger allows application teams to own their CI/CD pipelines by writing automation in their preferred language, unlike traditional tools where DevOps teams often drop in Jenkins files. This shifts the responsibility to the application teams, making CI/CD more aligned with their workflows.
Dagger modules are shareable packages of automation code that can be written in various languages. They allow teams to reuse and combine functions, making it easier to build pipelines without reinventing the wheel. Modules are self-documenting and can be discovered and used by anyone.
OpenTelemetry in Dagger captures detailed traces of every operation within a pipeline run, providing insights into execution times, caching efficiency, and step performance. This data is visualized in Dagger Cloud, helping teams optimize their automation workflows.
Dagger's portability allows teams to run the same automation locally and in CI environments, making it easier to test and debug pipelines. It also enables teams to choose where to run their pipelines, whether on-prem or in the cloud, based on cost and performance needs.
<context>CI/CDagger Gerhard Lazu 加入节目讨论 Ship It! 是如何开始的,以及为什么你可能想要一个通用语言用于你的 CI/CD。 加入讨论Changelog++ 会员在这一集节省了 8 分钟,因为他们让广告消失。今天就加入吧!赞助商:Sentry – 当你的应用崩溃时,使用 Sentry 更快地修复它。注册时使用代码 CHANGELOG 可获得团队计划 100 美元的折扣。了解他们在启动周和移动会话重播中发布的内容。
Make it work 播客 Make it work 视频 Dagger Daggerverse
Justin 和 Autumn 的新播客将于 2025 年推出 fafo.fm 有什么遗漏或损坏?欢迎 PR!</context> <raw_text>0 一。
这是与 Justin Garrison 和 Autumn Nash 的 Ship It。如果你喜欢这个节目,你会爱上 The Change Log。周一的软件新闻,周三的深度技术访谈,周五为你周末享受的精彩脱口秀。在你获取播客的地方搜索 The Change Log 就能找到它。Ship It 由 Fly.io 提供支持。五分钟或更少时间启动你的应用。了解更多信息,请访问 Fly.io。
朋友们好。我在这里与 Sentry 的首席技术官 Dave Rosenthal 一起。所以 Dave,当我看 Sentry 时,我看到你朝着完整的应用健康、错误监控的方向努力,这一切都是从这里开始的,会议重播,能够重播用户在遇到问题时的界面视图,完整的追踪,完整的数据,你在追踪和分析方面所做的进展,定时监控,共同覆盖,用户反馈,以及
还有大量的集成。给我一个不可避免的未来的瞥见。你们正在朝着什么方向努力?是的,我们看到的事情之一是,过去人们有独立的系统,他们在服务器上有日志,写入文件。他们可能会将一些指标发送到 Datadog 或其他系统。他们可能在监控某个产品的错误,也许是 Sentry。但我们看到越来越多的人希望将所有这些遥测源在逻辑上结合在一起。
这正是我们现在在 Sentry 所追求的。我们有一个追踪 ID 的概念,这是一种将与用户操作相关的所有数据片段联系在一起的关键。因此,如果用户加载一个网页,我们希望将发生的所有服务器请求、任何发生的错误、收集的任何指标联系在一起。这使得后端
你不必只看三张不同的图表并试图将它们按时间排列,试图得出自己的结论。你实际上可以分析、切片和切块数据,并说,嘿,这个指标对于使用这个操作系统的人看起来是什么样子,而这个指标对于使用另一个操作系统的人又是什么样子,实际上可以深入到这些细节中去。因此,这种将所有遥测数据结合在一起的想法,使用这个追踪 ID 的概念或基本上某种关键,我认为是很有趣的。
对于开发人员来说,这是一个巨大的胜利,帮助他们诊断和调试现实世界的系统,这是我们为每个人铺平道路的事情。好的。让我们看看你明天能否做到。是的,完美。结果将会有什么不同?团队将会有什么不同?
是的,我的意思是,我想我会继续说下去,但我认为这又回到了调试体验。当你深入研究一个问题时,拥有一种更丰富的数据模型,你的日志是结构化的。它们是一种层次结构,带有跨度。不仅仅是结构化的跨度,它们与错误相关,与其他事物相关。因此,当你拥有一个相互关联的数据模型时,它就能发挥作用。
打开了各种各样的分析,这些分析之前要么非常手动,要么只是猜测,也许这个日志是在与其他事情同时发生,或者根本不可能。我们不仅对通过这种相互关联的数据模型可以检测到的新类型问题感到兴奋,而且对于我们检测到的每个问题,解决它的难易程度也感到兴奋。
我喜欢它。好的,他们说代码崩溃时是认真的。使用 Sentry 更快地修复它。超过 100,000 个不断增长的团队使用 Sentry 快速找到问题,你也可以。了解更多信息,请访问 Sentry.io。那是 S-E-N-T-R-Y.io。并使用我们的代码 CHANGELOG。获得团队计划 100 美元的折扣。这几乎是你尝试 Sentry 的四个月免费。再次强调,Sentry.io。
你好,欢迎来到 Ship It,这是一档关于 Git Push 之后一切的播客。我是你的主持人 Justin Garrison,和我在一起的总是 Autumn Nash。你好吗,Autumn?我很高兴能在这里。稍微喝了点咖啡,快到了。快到了。再来一点咖啡。
Autumn,我们要告诉大家你的新工作吗?是的,我们现在可以了。我是说,世界此时已经知道了。没错。你在 LinkedIn 上宣布了这一点。我们很好。那么你的新工作是什么?我现在是...
Azure Linux 的产品经理。所以微软的 Azure Linux 发行版。刚刚开始这一周。恭喜你。实际上,我是安全产品经理。我相信 Azure Linux 上有很多 PM。是的,所以我是负责 Azure 的安全愿景的人。
所以听播客的任何人,如果你在 Azure 上遇到安全问题,你知道吗?粗鲁,Justin。粗鲁。别撒谎。私信会来自你创建的不同账户。我的机器人军队。是的。
这将是 Justin 的机器人军队在说,能帮我解决这个问题吗?我遇到了一个错误。对于节目的长期听众来说,你们会认识我们的嘉宾。你好吗,Gearheart?我很好。我很高兴能回来。这感觉很舒适。我很兴奋能见到你。我觉得我让你感到兴奋。同样。我是这个节目的长期听众。我觉得它很棒。你能告诉我们吗?你为什么开始 ShipIt?
这始于我们与 Adam 和 Jared 在 Changelog 上所做的所有工作。我是说,有很多...
基础设施工作,设置一切,经历你通常在将应用程序投入生产时所做的所有流程。在 ShipIt 开始之前,我们已经这样做了很多年,但这已经酝酿了多年。在那之前还有博客文章。有一天我们意识到,实际上这里有太多东西,我们可以开始一个播客,开始一个新节目,如果你愿意的话。
其余的就是历史。你坚持了 90 集,我认为这很棒。然后我们也有从你在第 90 集停止到现在的完整循环。我们有一些消息要分享,所有其他的 Ship It 作为这个播客将在年底停止。因此,在 2024 年 12 月底,
不知道你现在在听这个,但我们要停止播客。再次为你,Gerhard。对我和 Otto 来说,这是第一次停止。好吧,这对我来说也是个新消息。当我们安排这次谈话时,我们并不知道这一点。我很高兴我能在原始的 Ship It 以这种形式暂停之前再回来一次。我总是喜欢说它是暂停。也许是无限期的。
最有可能也是肯定的。但你说得对。这就像历史重演。是的,对于所有听众来说,抱歉这个消息是这样传达给你的。这是 Changelog 作为网络的决定。他们正在缩减。他们不会再做很多额外的播客。我认为 GoTime 和 JS Party,他们想专注于主要的 Changelog 播客。
这对我来说完全有意义。我认为我们现在有七个播客。我在我们重新启动 Chipit 时加入。我们只是想看看会发生什么。Autumn 和我已经做了将近一年。他们想削减,这完全有意义。Autumn 和我计划继续以某种形式继续这个播客,至少一段时间。我们仍然有
一群了不起的人要采访,关于所有这些不同的话题,我们只是想,知道吗?这已经有了一些势头。我们已经感谢所有在听的人,和我们交谈,告诉我们,给我们反馈,告诉我们他们喜欢这个节目的哪些方面。所以我们想继续这样。我们认为在播客宇宙中有这个空间。
这是一个热情,Autumn 和我以及很多人都分享的,关于基础设施和技术,以及运行软件的责任。
总的来说。认识所有维护和运行软件和基础设施的人真是太棒了。多样性。从 3D 打印机软件(如 Octoprint)到太空中的东西,了解所有不同的事物及其挑战真是太棒了,但也有很多事情是相同的。是的,以最搞笑的方式非常相似。
我们还应该看看听众是否想给我们一些新播客名称的想法,因为那会很不错。那将是无拘无束的。是的。但那时你会得到最好的东西。
所以是的,这一集,我认为在这一集之后我们还有三集要结束这一年。希望在最后一集中,我们将有一些更正式的公告,关于你可以在哪里找到我们,未来的方向。Jared 和 Adam 一直很棒,他们鼓励我们继续,并允许我们继续这样做。因此,他们可能会为那些在 2024 年底之后收听的人保留某种重定向。但我们希望能够
为一些人继续这样做,并尽可能无缝地进行。但你可能需要在你的播客听众中添加一个新的订阅源。我真的很兴奋,我觉得这只是允许 Ship It 的新演变。是的。我是说,你有 40 集,对吧?九个月。实际上超过 40 集,接近 50。你会如何用几个词来总结这一点?到目前为止你做的所有集数,
以这种格式。我认为回到 Justin 所说的,看到你可以在太空中运行卫星,或者在运行管道和平台团队,这真是令人惊叹。虽然有很多不同之处,但也有很多相同之处。我们为使基础设施更容易而构建的新技术也让人想起了过去,你知道,这让它
我不知道。这就像你可以用各种不同的方式解决这个令人惊叹的大难题。我认为有时技术变得非常奇怪,你知道,这个播客让我记起了我为什么热爱我们所做的事情,并让我在过去的一年中保持热爱。
对我来说,我最喜欢的一些集数是回顾性的,对吧?像与 Rich 和 Mandy 交谈,和那些说“这就是运行 AOL 聊天室的感觉”的人。我觉得那太棒了,对吧?这基本上就像我们现在所做的,只是用每个人都说“哦,你不应该再使用那些”的工具。我是说,那曾经支撑了互联网多年。我们不能仅仅因为不再喜欢它而抛弃所有功能强大的旧东西。因此,那些对我来说真的很酷。此外,我认为这很疯狂,
我们遇到的人的数量,他们只是说,“我们在做这个很酷的事情,我发现了它,然后我开始做它。”然后这导致了这份工作和整个职业生涯。学习如何在太空中运行 Linux 等等对我来说真是太疯狂了,以及你必须确保...
它可以被更新,所有投入其中的思考。但我们遇到的人几乎比技术本身更酷。绝对是。我是说,是的,进入这个领域的人们的旅程真的很有趣。在几乎每种情况下,都是有人说,“我只是站出来学了一些东西。”这就是我所说的。但有多少工作可以对世界产生这样的影响,赚取这样的金钱和建立这样的社区?是的。
仅仅因为你觉得某件事情很酷,并且你对此感到兴奋,这就是让我们在一天结束时仍然想要做这件事的本质,对吧?是的。我认为我最喜欢的想法是从“这无法完成”开始。是的。这太疯狂了。这就像,不,这绝对行不通。经历这些周期,要么意识到,确实,这不会以我想的方式工作。
但沿途的学习和你建立的关系,那些将带你去往下一个地方的关系。所有的小步骤,一些失误,通常失误是教会你最多的东西。我认为这将是我从 ShipIt 和你在这个行业所做的所有工作中得到的一个收获,从错误中学习。
如此强大。如此真实。因为我认为我曾经非常害怕犯错误,想要在所有事情上都做到完美,这就是我有毒的工程师特质。而且我认为在你在生产中做了这么多事情,并且在这个行业工作了这么长时间后,你就不再害怕犯错误。你几乎必须像
享受模糊性一样,知道做困难的事情是因为你别无选择。当你被赋予做这件事的自由时,对吧?像,良好表现团队的首要贡献因素是心理安全,对吧?能够说“我不知道”或“我犯了一个错误”,每个人都说“很好。我们从中学到了什么?我们接下来要去哪里?”能够拥有这样的自由去犯错误,和,
对我们中的一些人来说,这有很多特权。我想作为一个白人男性在技术领域,我在职业生涯中得到了比我应该得到的更多的怀疑利益,能够说,实际上,我不知道这个,或者我搞砸了。抱歉,下次我会修复它,我知道很多人没有得到这个。但许多公司也没有提供这个,因为他们只是说我们雇佣高级人员,而高级人员知道他们在做什么。对吧。像,不。
高级人员也不知道他们在做什么。他们只是以前把生产搞砸了。对吧。这就像初级人员害怕把生产搞砸,而高级人员则说,“哦,不,这没问题。”但这就是我认为这个播客很重要的原因。这就是我为我们做的最后 50 集感到自豪的原因,因为我觉得有很多播客在技术上很强大,但
我欣赏我们谈论犯错误的方式,以及我们谈论人性方面的方式,以及你必须拥有安全的环境。我们可以谈论多样性和所有这些不同的事情,因为我认为人们真的认为多样性或安全的地方或所有这些事情是技术的附加奖金,但你不能在不考虑人们的情况下做出好的技术,不考虑如何创造更好的环境。因此,
无论我们能做什么,利用我们拥有的特权来影响和改善事物,帮助人们知道他们可以开始。也只是与那些在技术上非常优秀但来自各种不同背景的人交谈。看看我们在节目中邀请的所有人。因此,我认为能够利用我们拥有的特权来...
努力让事情变得更好,让其他人被看到,并且还展示出你可以不同但仍然非常技术深厚,是很酷的。好吧,我想我们就直接过渡到 Gearhard。自从你离开 Ship It,离开 Change Log 以来,你一直在做什么?你在负责什么软件?所以,
我感觉我从未真正离开 ChangeLog,因为首先,Kaizen 集和我们仍在推动的所有基础设施改进仍然非常明显。尝试我们多年来所做的所有事情,并将其带到现在的地方,并继续这段旅程
这是一个长期的,非常令人满意的旅程。这就是我想说的。我很高兴这仍在继续。我们找到了与 Adam 和 Jared 一起工作的方式。因此,这对我个人来说是非常令人满意的事情,也是专业上非常令人满意的事情。
在 ShipIt 之后,对我来说,甚至在我上次出现在第 19 集“拥抱变化”时,优先事项就是,我必须重新安排一堆优先事项。基本上,我必须给我的主要工作更多的时间,而当时的主要工作是 Dagger,现在仍然是 Dagger。
我认为这是我开始 ShipIt 和那时不得不分开的之间发生的重大变化之一。2021 年是一个非常有趣的年份,这并不是因为 COVID,但显然这让每个人都变得有趣。但对我个人而言,我再次过渡到初创公司。我从当时的大型企业 VMware 转到
在 VMware,我已经在 RabbitMQ 上工作了六七年。我经历了不同类型的团队,直到最终进入核心 RabbitMQ 团队。因此,你接触到所有 Erlang,接触到所有 Make,还有一个故事,因为它与 Dagger 相关。
你可以看到许多非常重要的系统,分布式系统,分布式系统问题。你意识到内核是多么重要,即使你没有使用容器。
因此,不同内核之间的小差异可能对 Erlang VM 的行为产生巨大影响。这些都是非常重要的应用程序,比如银行、金融机构、GPS 跟踪器,你可能在想食品配送,但还有一些其他 GPS 跟踪器,它们的正确工作非常重要。尾巴,支付系统,遍布各地。在某个时候,我们没有意识到,一些汽车的门无法打开。
RabbitMQ 就在那个堆栈中。我没有预料到这一点。你知道,你真的不会预料到这一点。看到技术最终的去向以及它是如何被使用的真是疯狂。很多时候它被错误地使用。因此,在拥有大型团队、大型预算和大型企业时进行这些对话并经历这些周期是有趣的,但这也是一种特定类型的游戏。因此,在玩了六七年这样的游戏后,我说,你知道吗?是时候回到初创公司了。
因为在到达 VMware 之前,我确实开始了那段旅程。我们是一个小型初创公司。我们是 Cloud Credo。我们是当时 Cloud Foundry 的顾问,对于那些记得 Bosch 的人,也许你也在听。
而 Chef 对那些系统并不奏效。因此,一个 20 多人的团队,然后我们成为了 Pivotal,因为我们被 Pivotal 收购。但在我看来,我们在某种程度上接管了 Pivotal,因为那种疯狂的精神。那运作得很好。因此,成为 Pivotal 的一部分是很棒的,配对编程和极限编程是其核心。
然后 Pivotal 最终被 VMware 收购。因此,从 20 到 2000 到 40000 的过渡是巨大的跳跃和巨大的变化。因此,我写下了所有这些,我说,你知道吗?是时候回到初创公司了。这就是 Dagger 进入的地方。Dagger 很有趣,因为我对 Docker 感到着迷,我在使用 Docker,但我没有帮助构建 Docker。因此,Dagger 正好是在我可以尝试的时刻。
三年后,我在这里。对于任何不知道 Dagger 是什么的人,描述一下你在做什么,或者 Dagger 实际上作为一个产品、作为一个初创公司,是什么,嘿,我们要为这个事情改变世界。那是什么?所以 Dagger 是当你厌倦了所有 YAML 时发生的事情。当你厌倦了管道中的所有 YAML,尤其是你的 CI/CD 管道,或者当你厌倦了你的 Jenkins 文件,或者当你厌倦了你的脚本时,
你想要一些可以与团队和想法扩展的东西,这些东西很难用 YAML 捕捉。如果你发现自己开始为 GitHub Actions、CircleCI 或任何 CI/CD 系统模板 YAML,你知道你需要 Dagger。另一个选择是转向 Bazel,进入那个世界。但对于任何了解那个世界并经历过的人来说,知道那是一个非常沉重的企业世界。
因此,Dagger 将所有脚本和所有 YAML 允许你用代码捕捉。因此,这意味着想象一下编写你的自动化。它可以是一个 make 文件。它可以是你的 GitHub Actions YAML。它可以是你的 CircleCI 配置,你的 Jenkins 文件,所有这些东西你都可以拿出来,放在你熟悉的代码中。
无论是 Python,Go,TypeScript,还是一些仍然非常存在的遗留语言,如 PHP 或 Elixir,例如 Rust,一些更新的语言。你可以使用这些语言编写你的自动化,并将其打包成称为模块的东西。你可以像分发任何包一样分发这些模块,并可以及时组装它们,并可以与其他模块结合。
这意味着现在你正在编写自动化,你与 CI/CD 的集成只是调用来自正确模块的正确函数,并确保该函数与它所需的所有其他内容连接在一起。例如,你有你的测试,对吧,构建,你说,好吧,但你可以用 make 文件做到这一点,或者你可以使用 just 文件,或者你可以使用任何类似的东西,这是真的,你可以。
但最终发生的事情是,会对自动化运行的上下文有一些假设。Dagger 唯一的假设是会有一个引擎,即容器运行时。在该容器运行时中,你始终必须指定,嘿,你想运行哪个容器镜像?你想从哪个开始?因此,所有这些函数总是有一个上下文。这个上下文在你运行的地方都是相同的。
这意味着如果你想在本地运行它,它将与在世界任何 CI 平台上运行时完全相同。你可以在 Jenkins 中运行 Dagger,如果你愿意的话。这是一个选项。我已经做了很长时间的容器和 make 文件,对吧?像我可以在 Jenkins 或我的本地机器上运行 make 并且它运行相同的假设。我不需要 Dagger 来做到这一点,对吧?正确。就像我可以做到,我一直在做,对吧?像,所有的,很多东西都可以工作,哦,只需执行容器。这里有一些参数。像,你知道,变量到 make 文件。这没问题。因此,这一方面并没有真正改变我一直在做的事情。至少我知道它确实改变了很多人正在做的事情,因为 bash 是普遍存在的。这里的第二件事,我认为很有趣。对我来说,Dagger 一直是
几乎是 DevOps 团队的匕首,DevOps 在大型企业中是如何工作的事实是...
应用程序团队会编写一堆代码,DevOps 团队会进来,像放一个 Jenkins 文件,对吧?这是你的 PR,给你的 Jenkins 文件。现在这一切都将神奇地工作。我们在 Disney Plus 有一个团队,像一个 lib Jenkins 团队。我们编写库。我没有这样做。我讨厌 Jenkins 文件,但他们为这个 groovy 脚本编写了库,以便他们的每个 Jenkins 文件都会导入该团队的 lib Jenkins,然后它会为他们默认执行一堆操作。
但这仍然是必需的。还有其他团队在做其他事情,使用与应用程序团队外部的其他语言。我的感觉是,Dagger 要求应用程序团队现在拥有 CI/CD,因为他们是那些人,因为代码的熟悉性并不重要,如果你不是编写代码的人,对吧?如果你是某个外部人员,你会有自己的
pep 格式化 Python 和自己的模块和格式,因此它不会与应用程序团队很好地结合。因此,在这种情况下,当编写代码的团队也是进行 CI/CD 的团队时,Dagger 是最有意义的。是的,这是一个有效的看法。我们看到不同的团队和不同的公司以不同的方式使用 Dagger。到目前为止,我们已经看到各种方式,它们都是有效的。
关键是它迫使不同的观点以代码的形式结合在一起。因此,忘记像 Makefile、Jenkins 文件或脚本或任何东西,我们将编写我们公司最熟悉的代码,无论你是 DevOps 人员
还是社区中编写模块的某个人,这并不重要。关键是我们都将查看相同的代码,我们理解相同的代码,我们可以为相同的代码做出贡献,所有的自动化最终都是我们可以从任何地方本地运行的代码。因此,举个例子,假设你将今天的 Dagger 存储库作为基础。
<context>CI/CDagger Gerhard Lazu 加入节目讨论《Ship It!》是如何开始的,以及为什么你可能想要一个通用语言用于你的 CI/CD。 加入讨论Changelog++ 会员在这一集节省了 8 分钟,因为他们让广告消失。今天就加入吧!赞助商:Sentry – 当你的应用崩溃时,使用 Sentry 更快地修复它。注册时使用代码 CHANGELOG 可获得团队计划 100 美元的折扣。了解他们在启动周和移动会话重播中发布的内容。
Make it work 播客 Make it work 视频 Dagger Daggerverse
Justin 和 Autumn 的新播客将于 2025 年推出 fafo.fm 有什么遗漏或损坏?欢迎 PR!</context> <raw_text>0 Dagger 仓库有一个模块,封装了该仓库中可能发生的所有事情。因此,在你不知道它是如何运行或需要什么的情况下,你可以开始发现这个模块中可能的功能。例如,给我构建文档。
但也要提供文档。你只需一个命令,就可以在本地机器上构建、检查、提供 Dagger 文档,而无需了解任何内容或安装除 Dagger CLI 之外的任何东西。
同样,如果你想的话,你可以自己构建一个 Dagger CLI,一旦你发现命令是什么。而且它都是自我文档化的,所有内容都在那里。因此,它提供了一种非常好的方式来消费这些东西,而你对这段软件的了解并不多。它几乎就像是代码的 API。
但这是一个消费代码的 API,消费资源的 API。我不在乎它是 Python 还是 PHP。我想要的是工件,或者我想要的是文档,或者我想要的是自动补全,无论情况如何。那么你如何以其他人可以理解和轻松消费的方式封装这些呢?好吧,但这里有一个理解某事和使用某事之间的分离,而不需要理解它,对吧?因为我写过很多
事情,就像你只需运行 make docs,文档就在那里,对吧?就像 make docs dev。他们就像,我不,他们不需要知道 make 文件背后发生了什么,它仍在运行容器。它正在做那些事情。我认为这里真正有趣的事情是,这些模块是可共享的,而这些模块是,
Terraform 为我们做的非常强大的事情,对吧?就像 Terraform 模块很强大,因为你只需知道幕后发生的事情。并且,当然,在某个时候你可能需要逃离模块。你可能需要覆盖模块。你可能需要构建自己的模块,但你可以从一些对我们认为你应该这样做的事情有一些看法的东西开始。在 Dagger 和 Terraform 的意义上,大多数时候,这些东西只会为你工作,而不需要关心。对。所以就像,我可以,
Dagger 或其他任何东西,我可以从模块开始,哦,这就是我想要的。这看起来不错。我将使用默认值。如果我需要更改它,我可以。因此,基本上,你能否通过 Dagger 摆脱 make 文件和所有这些,只需说你正在构建一个初创公司或应用程序,而你
没有 Justin 拥有的经验,对吧?而你只需要弄清楚如何让你的 CI、CD 和你的 DevOps,整个领域运作。而你没有那种经验。这是否使你能够以不同的方式跳过所有这些额外的文件,并让你的整个团队学习如何使用 Dagger 以那种方式进行基础设施?是的。如果你去到 Justin 的模块,如果首先,这将需要 Justin 花时间
编写模块并分享它们,以便其他人可以发现它们,基本上只是把他放在他的 GitHub 仓库上,约定是 daggerverse,所以很多人都有 daggerverse 仓库,这是人们使用和编写的不同模块的集合,因此在这一点上,我认为有五或六个 Go 模块的实现
它处理与 Go 应用程序相关的所有测试、构建、检查等事情,所以你是对的,从这个意义上说,你需要弄清楚如何编写自动化,只是使用它的问题。你有一个 Go 应用程序,太好了,这就是你提供源代码的方式,这就是可用的选项,你可以尝试在本地运行它,它工作得很好。那么我如何在 CI 中运行这个?同样的命令,你在本地运行的命令,你放在 CI 中,它将完全一样地工作。
不再需要弄清楚 YAML,不再需要弄清楚很多事情,比如缓存。例如。我是说,我们甚至还没有解开 Dagger 的这一方面,它是如何缓存的,如何例如为每个在其中发生的操作发送开放遥测跟踪。这里有很多东西。在表面上,它看起来像是你脚本的替代品,一种嵌入这些知识并与他人共享的方式。但其他工具以前也做过这个。
那么这有什么特别之处?还有其他我们没有深入探讨的事情,这使得它成为一种非常全面的将自动化放入代码、与他人共享并让他人重用的方式,而不是每个人都必须以自己的特定方式编写相同的东西。我认为代码这一部分对我来说总是对很多人来说是一种障碍,因为
说你可以用你熟悉的代码编写所有自动化对很多人来说是一个锁定,因为很多人并不擅长代码,他们并不是所有编写 YAML 的人都是专家 YAML 工程师,他们知道 GitLab YAML 将如何在某些情况下做不同的事情,比如有一个列表与数组,无论是什么。对,他们就像我知道这个东西,但一旦你让我去写一些 Go 代码
我就不太熟悉了。如果我是一个外部人员,去做和维护这个事情为另一个团队,那我就感觉有点不自在。那是一个应用团队,对吧?因为我在很多公司工作过,应用团队总是像是这种高级的,你不要去打扰他们。他们是赚钱的人,而你其他人只是开销。你就像,哦,你写 YAML,其他人都写代码,对吧?我认为这对很多人来说是一个障碍。
不过,我认为这也是一种视角,因为想想看。当你去上计算机科学学校或第一次接触计算机时,你是在写 Python 或 Java,对吧?没有人告诉你关于 DevOps 的事情。没有人告诉你关于脚本的事情,除非你以某种方式...
偶然发现这一点。因此,我认为对于那些可能从系统或脚本开始的人来说,是的,但对于那些刚开始编写高级代码的人来说,这是一个巨大的障碍。然后突然间,他们被扔进了生产环境。好吧,现在他们必须管理基础设施。就像,
我认为你有更多的人来自编写代码,因为当你考虑到,当你听到训练营或学校,或者你去这些不同的方式,人们被教育进入技术行业时,每个人都告诉你关于代码,而没有人告诉你关于脚本和版本控制以及...
DevOps 和 CI/CD,对吧?所以我认为这是一个很好的工具,让这些人更容易进入 DevOps 和 CI/CD,并能够维护你的基础设施,因为
每个人都在谈论制作这个非常酷的应用程序,但没有人谈论维护这个非常酷的应用程序和发布它。这就是我们在这里的原因。这就是这个播客的目的。是的,没错。我认为这是一个很好的观点,这是一个双向的障碍。有一个人只写过使用 Spring Boot 的 Web 应用程序。他们就像,我不知道这个 Docker 是什么。不要...
你知道,我不会深入到不是我的事情的细节中。实际上,这都是你的事情。系统的人也是如此,他们就像,我不知道 JVM 将如何做那件事。就像,好吧,你最好学会。因为那也是你的事情。因为我觉得当他们说,他们会说,好吧,你必须学习前端,但你必须学习后端,然后你必须学习如何修复,如何让它连接到数据库。但没有人谈论如何像
保持所有这些一起工作和维护它。是的,你知道,所以我觉得在学校和 AWS 培训期间以及参加不同的训练营和所有事情时,我一直在想,为什么我们总是谈论主要的,像大主要产品,但没有人谈论你需要做的所有秘密,以使所有这些一起工作,你知道吗?我认为在尝试接近 Dagger 时,有一个类比非常有效,你试图弄清楚这个东西适合在哪里?
想象一下,你正在构建一个软件工厂,对吧?你的初创公司、你的公司、你的团队,无论是什么,你都是一个软件工厂。你正在以软件的形式向用户提供价值。很好。
帮助你维护工厂的东西在哪里?帮助你做所有事情的东西在哪里?我意思是,弄清楚如何运行你的测试并没有太多价值,对吧?或者如何正确缓存它们,或者如何也许检查。这是另一个。如何打包。我是说,你想花多少小时弄清楚如何打包一个 JVM 容器或 Java 容器?说真的。
我是说,当然,有一些你可以复制的配方,人工智能非常有帮助。但如果一些对这件事非常热情并且有时间的人,他们用 Java 编码这个,假设使用 Java,然后只需使用它?那不是很好吗?但不仅如此,当你让 AI 去做这件事时,很难获得上下文。但是如果你团队中的其他人或与你同一家公司工作的人,你可以联系并说,嘿,我想重用这个,但我不理解这一部分,你知道吗?
是的,如果你给人们 Makefile 或 Jenkins 文件或 YAML,他们会怎么说?我意思是,你上次收到一个 YAML 包是什么时候,你说,哇,这太酷了。我将使用这个。这太棒了。什么时候有人对 Jenkins 文件感到兴奋?很少。不仅如此,它从来没有对每个人都有效。确实如此。每个人都说,使用这个,它是如此简单。你就像,真的是这样吗?是的。
我是说,对于很多代码也是如此,对吧?就像,我尝试解决的许多 NPM 模块和 Python 事情,这坏了,对吧?就像,这个东西的期望是什么?我认为将其封装在一个可以做到这一点的整体容器中,已经解决了很多这些问题。但一旦我说,我需要围绕这个东西编写一些软件,但我甚至无法运行这个东西就是一个问题。是的。
当涉及到自省时,好的,所以太好了。我有这个我运行的命令。太好了,我会弄清楚如何运行它。让我们看看,它在 make 文件中。那么当它执行时,这个东西实际上发生了什么?我如何可视化不同步骤的执行?我怎么知道一个步骤是否运行或不运行?我曾经喜欢 make。我仍然有 make 文件,我至今仍在使用。
它们很好。只是文件,同样的事情。最近在 Kaizen 上我们谈到了 just 文件,以及如何在 changelog 的上下文中,just 更有意义。这很好。你知道,如果你对你的 make 文件感到满意,如果你对你的 just 文件感到满意,任何对你有用的自动化,保留它。这是好事。这是资产,而不是负担。但是当那个东西停止工作时,当你感到沮丧时,当你遇到所有 YAML 的问题,以及所有你可能已经辛苦工作多年的事情时,
当你考虑更好的东西时,看看这是否有意义。然后发现网页 UI,发现跟踪,发现所有可用的东西以及正在变得更好的东西。发现 shell。我甚至还没有谈论 shell。顺便说一下,那是一个即将到来的 Dagger 版本中的隐藏实验性功能。
它已经默默发布了一段时间。但如果你感兴趣,你可以加入社区电话,了解更多。但关于 Dagger 的话题就到此为止。如果你愿意,我们可以谈谈基础设施。我想深入探讨你所谈论的所有其他事情,对吧?因为我有很多从未喜欢过的 make 文件。我一直认为它是神秘的,很难学习,以一种非常守门的方式,对吧?我就像,这就像,
有人在 18 年前学过一次,他们就像,是的,我写了那个 make 文件。我不知道它做了什么。一直很难重新进入。你就像,这都是过时的旧文档,不再相关。
但它有效,对吧?如果它是那个东西,如果它继续工作,酷。如果它不工作,那可能是你的问题。它在某个地方有效。但你谈到 Dagger 是某些东西的替代品。但还有哪些其他东西在边缘,实际上,我们通过不这样做而错过了什么,通过没有一个更新的工具来做到这一点?你提到了 OpenTelemetry。你提到了 shell。你提到了模块。这些都是部分,但...
很难理解,为什么我需要那些东西?或者我今天不能做什么?好的。模块,作为一个类别,是一种打包你编写的代码并与他人共享的方式。
想象一下,它就像是相互配合的原子代码片段。例如,Go 模块将封装与 Go 应用程序编写相关的所有代码。还有 Node.js 的东西,还有 Helm 的东西,甚至还有 Kubernetes 的东西。如果你想弄清楚如何在 Dagger 中运行 K3S,那是可能的。许多这样的东西都在 Daggerverse 中。Daggerverse.dev 是查看可用模块、我可以选择和挑选的地方。所以这些就是模块。
开放遥测是我们捕获 Dagger 调用内部发生的事情的方式,当 Dagger 基本上运行时。我们将所有这些信息通过这些跟踪发送到 Dagger Cloud,以便我们可以可视化你运行时发生的事情,想想网络图。
因此,在浏览器中,如果你打开网络图,你会看到资源加载所需的时间、跨度、跟踪,这正是相同的概念。这为你提供了对自动化中发生的事情的深入洞察。你可以看到哪些步骤花费了很长时间,或者哪些步骤,例如,缓存效果不好。所有这些信息将在这种情况下传达给 Dagger Cloud。
因此,做到这一点的方法是,你基本上将你的 CLI 连接到你的 Dagger Cloud 帐户。你必须为此创建一个,基本上对个人来说是免费的,对于团队来说是付费计划。但是作为个人,你可以尝试看看这是什么样子。你知道,你可以也许让你的团队成员在你肩膀上看,或者分享你的屏幕看看这是什么样子。每个人都可以这样做。这为你提供了对自动化中发生的所有事情的洞察和欣赏。
然后,第三件事是 shell,是一种让你处于上下文中的方式,你试图发现可用的自动化以及如何将不同的功能结合在一起。这正是我们如何使用管道的方式,你基本上从不同部分获取功能,并尝试进行实验,以查看什么是合适的排列。例如,这个管道的正确排列是什么?
缓存良好,工作良好,昂贵的步骤首先发生。你可以在 Dagger shell 中做到这一点。因此,这是一种互动式发现和处理自动化的方式。视角是 Dagger 中声明的功能。因此,这是起点。
我认为这非常重要,因为我们没有足够的运维可用性和对我们自动化的实际洞察。自动化是一个很好的工具,它使你能够扩展并消除许多人为错误。但如果你对你的自动化没有深入的理解,这使得维护和扩展它以及一般使用它变得非常困难。当它崩溃时,你就有点倒霉。所有这些东西加在一起,都是关于...
一种更具视觉体验的体验。这是一种更精心策划的体验,对吧?几乎就像,如果你必须正确地进行自动化,你会怎么做?如果你不得不重新思考 make 文件、Jenkins 文件和脚本在以容器为先的世界中应该如何工作,你会怎么做。容器很重要,因为它是不可变的东西,对吧?
因为这些就像拥有某种不可变的东西,拥有某种缓存的东西,拥有一个实际的层能够以一种其他方式难以做到的方式加速事情。Makefile 是本地的,对吧?你如何分发 makefile 解析?它有一个 DAG,但你如何分发 DAG?
这就是今天,例如,在 Dagger 中,我们正在非常接近实现这一点。你所说的接近是什么意思?缺少什么?那么你如何拥有缓存?我们尝试了几次迭代,我们知道这如何失败。你如何拥有一个可以安全地存储操作的远程缓存?想象一下每个运行的步骤,对吧?它有一些输入,它执行一个函数,然后它有一些输出。
如果你能够缓存这些输出,将它们放在某个地方,比如 CDN 或对象存储,无论如何对象存储是我们拥有的,然后当管道再次运行或相同的调用再次运行时,无论你从哪里调用它,只要引擎连接到这个对象存储,它就可以检索步骤,对吧?它可以检索层,它不必重新计算它们。有时,拉取这些层比重新计算操作要高效得多。
你如何安全地以可扩展的方式做到这一点,使其易于使用和操作?这就是难点。缓存应该始终是不可见的,对吧?就像你知道,最简单的缓存是你不知道你正在使用的缓存。这是本地的。就像在本地,它工作得很好。当你去分布式时,问题就开始了。那时你会遇到竞争条件。例如,那时你会遇到修剪,当你处理许多 TB,比如数百 TB 的数据时,这就变成了一个难题。
有时,取决于网络,我甚至不想说网络条件,重新计算它在本地可能更便宜。你能依赖 Docker 为缓存所做的多少?对吧?因为我可以在某个地方有我的 build X 缓存,这基本上是我得到这个具有 SHA 的层,我可以说,哦,我要得到相同的 SHA,只需给我数据,对吧?这有多少...
是依赖于容器底层的东西,而不是构建一些新的东西。因此,当输入不那么频繁变化时,这是有意义的。在这种情况下,输入是源代码,而源代码变化很大。那么你如何在输入是每次提交时仍然拥有良好的缓存命中率?
那么你如何对源代码进行排序?你如何将其划分,以便你知道哪些功能依赖于哪些源代码,以便你能够正确地进行失效,并且不会过于频繁地破坏缓存?这是一个难题。
你们好,书呆子们!我和 Fly 的联合创始人兼首席执行官 Kurt Mackey 在一起。你知道我们喜欢 Fly。所以,Kurt,我想和你谈谈云的魔力。你对此有想法,对吧?对。我认为了解云背后的魔力是有价值的,因为如果你理解这一点,你可以为用户构建更好的功能。你可以做很多事情,特别是现在人们正在做 LLM 的事情,但如果你理解这一点并能够创造性地使用它,你可以做很多事情。那么当你说云不是魔法时,因为...
你正在为开发人员构建一个公共云,并且你继续解释它是如何工作的。这对你意味着什么?在某种程度上,这意味着这些东西都是从某个地方来的,就像在云之前的一个更简单的时代,我们会在 Rackshack 获取一台服务器,然后我们会 SSH 或 Telnet 进入它,甚至将文件放在某个地方并自己运行 Web 服务器以提供给用户。
云并不是魔法,除此之外,它们只是以更复杂的方式做同样的事情,以满足许多人的需求,而不仅仅是一个人。我认为人们错过的一件事,很多其实是因为 AWS 和 GCP 创建了如此大的黑箱抽象。
就像 Lambda 实际上是非常黑箱的。你不能像从外部拆解 Lambda 并查看它是如何工作的。你必须有点只使用那里提供的东西。但现实是,Lambda 并没有那么复杂。它只是一种现代方式来启动小虚拟机并从中服务一些请求,让它们像暂停和恢复一样释放物理计算时间。
了解云如何工作的有趣之处在于,它让你为用户构建一些你从未预料到的功能。我们对此的经典版本是,当我们查看如何隔离用户代码时,我们决定只暴露这个机器概念,这是一个比 Lambda 更低级别的抽象,你可以用它来构建 Lambda。机器就是这些虚拟机
旨在快速启动,旨在快速停止然后重新启动,旨在像你的笔记本电脑关闭时那样暂停并在你告诉它们时快速恢复。我们发现,给人们这些原语实际上,有新的应用程序正在被构建,这些应用程序以前无法构建。
特别是因为我们走得如此低级,并在一般的 Linux 内核功能之上构建了如此最小的抽象。我们平台的很多部分实际上只是围绕 Linux 内核功能提供一个良好的用户体验,我认为这很有趣,但你仍然需要理解它们在做什么,以便充分利用它们。
非常酷。好的,所以体验 Fly 的魔力,了解 Fly 的秘密,因为这就是他们想让你做的。他们想分享 Fly 云背后的所有秘密,适合高效开发者的云,适合交付的开发者的云。了解更多并免费开始使用 fly.io。再次是 fly.io。
我在你谈论事情时在 Daggerverse 中挖掘。你有一个 shell SDK 吗?
那是一个东西吗?是的,所以我所谈论的 Dagger shell,是的,shell SDK 曾经是一个东西。我的意思是,好吧,让我稍微展开一下。Dagger 的力量,Dagger 的一个特性是它提供了一个 GraphQL API,它暴露了一个所有 SDK 交互的 GraphQL API。
因此,工作发生的引擎,我可以把它想象成服务器,与之交互的方式是通过这个 GraphQL API。SDK 只是 GraphQL 客户端,暴露了来自 GraphQL API 的所有操作和所有资源
以特定语言的方式。有 Java。顺便说一下,这里有一个 Java SDK 及其 shell。因此,如果你能够通过 shell 函数建模与 GraphQL API 的交互,它将有效。Dagger 之前发布的其中一件事是能够混合和匹配 SDK,对吧?因此,我可以使用用 Go 编写的模块,但我的应用程序是用 Python 编写的,我可以在其上用 Python 编写我的函数。
这似乎是一个
所有东西都与 GraphQL API 交谈的结果,对吧? - 是的,没错。 - 一切都只是,好吧。就像,我们都只是与 API 交谈。我不在乎你是怎么到这里的。如果你在做 curl 命令,你可以到这个 GraphQL,做一些事情,然后下一步由你来用你想要的任何语言编写。 - 这也很棒,因为它使得在同一个初创公司或企业中使用多种语言的多个团队变得可访问,因为它达到了企业希望开始使用的点。
每个人都使用两种语言,而你就像,伙计,这种语言并不适合你想要做的事情。就像,我的意思是,它可以,但这不是正确的,你知道,就像它达到了你为每个项目使用锤子的地步。他们想优化可共享性。对。他们只是说,嘿,通过让每个人都写 Kotlin,那么一切都会更顺利。别撒谎。通常是 TypeScript。我们都知道。是 TypeScript。
但它回到了两种语言,对吧?就像所有前端,那个,也许还有一些后端 Kotlin 或类似的东西。就像,好吧,现在每个人都写这些语言,因为我们必须能够共享这些东西。我们在角落里有这个 DevOps 团队,他们在那里编写 YAML。他们就像,好吧,我只是要插入这个 YAML 东西。就像团队说,不,我不想要那个。但如果 Kotlin 团队正在编写 Dagger 模块,而 TypeScript 团队也想使用该模块,他们可以,因为你刚才说我们的最低公分母是 API。
<context>CI/CDagger Gerhard Lazu 加入节目讨论 Ship It! 是如何开始的,以及为什么你可能需要一种通用语言来进行 CI/CD。 加入讨论Changelog++ 会员在这一集节省了 8 分钟,因为他们让广告消失。今天就加入吧!赞助商:Sentry – 当你的应用崩溃时,使用 Sentry 更快地修复它。注册时使用代码 CHANGELOG 可享受团队计划 100 美元的折扣。了解他们在启动周和移动会话重播中发布的内容。
Make it work 播客 Make it work 视频 Dagger Daggerverse
Justin 和 Autumn 的新播客将于 2025 年推出 fafo.fm 有什么遗漏或损坏?欢迎 PR!</context> <raw_text>0 如果你能调用 API,我真的不在乎你用什么语言来调用它。我们将为你提供相同的功能。每种语言都有一种方式来调用 WebSocket 或某种方式来调用外部 API,并说,这里有数据,给我返回一些东西。你正在使开发团队能够使用他们更熟悉的语言来完成这项工作,对吧?而且你允许他们将其融入到...
他们已经构建的任何东西中,这意味着你并不是试图完全... 这就是我所寻找的。很多时候,他们只是说,去重构所有这些代码以适应这个 API,然后你会破坏六个东西。它工作得不对。任何可以让你的生活更轻松而不需要进行大规模重构的方法都是...
启用和强制有点相同,对吧?因为并不是所有的开发团队都想要这个。他们会说,实际上,我更喜欢外部团队负责这件事。当它崩溃时,我只需给他们发一封电子邮件,然后去吃午饭,对吧?很多开发者都喜欢这样。确实如此,但在这个我们资源更少、试图以更多的方式做更少的事情的时代,我不知道人们是否总会有一个完整的团队。你明白我的意思吗?想想企业的重组以及你必须与初创公司保持精简的事实,对吧?
你可能没有选择拥有那个完整的团队。人们为云服务、托管产品和 SaaS 产品支付如此高的费用是有原因的,因为它消除了你的 DBA。它消除了你运营团队的部分,你可以拥有一个更小的运营团队,因为归根结底,人们希望我们以最少的资源和资源来完成所有事情。
我的意思是,我还想说,如果你去 RDS 并且摆脱了你的 DBA,你犯了一个错误。就像那并不一定是你认为它会是的东西。我也认为这些东西是不断发展的,对吧?所以,比如说,现在很多人需要数据架构师,而不是 DBA,对吧?所以也许,
也许你不需要有人在数据中心跑来跑去,传统意义上的 DBA。但仅仅因为你摆脱了 DBA,你现在需要一个数据架构师来告诉你如何做访问模式以及如何优化你的数据库。但一个是更容易签约的,而另一个是你每天都需要的。所以这都是权衡,对吧?这都是对你的业务和你的用例有效的东西。
但我认为我们面临的问题是,人们对这些差异了解得不够,我们只是告诉他们这是一个新的闪亮的东西。因此,他们没有被赋予做出这些决定所需的正确信息。它们都有价值,但对于你想要做的事情,什么才是最有价值的?你知道吗?在我看来,至少在我的经验中,很多时候都是那些
追求晋升的人,你会看到更大的,你知道,你会说,嘿,猜猜看?我要重写我们所有的 make 文件和 dagger。这将对业务产生影响。而这里的另一个人会说,但你为什么不学习我们最初为什么有 make 文件?你为什么不学习?他说,那很难,对吧?就像,业务的那一面要困难得多,而且也永远不会让你晋升。我想我们都知道,make 现在从来没有出现在任何工程师的晋升文档上。是的。
顺便说一下,我不推荐这样。如果你有一个 makefile,我会说,不要在 Dagger 中重写它。先尝试在 Dagger 中运行它。这将是一个更聪明的第一步。
并始终首先关注文档。Ship It 第 44 集。你能大声说出来吗?因为我觉得人们认为自动化意味着我们不再需要记录事情,这让我整个灵魂都感到痛苦。自动化不是文档。我将以几种方式强调这一点。首先,Ship It 第 44 集是我职业生涯中一个非常重要的时刻。
当我们与 Kelsey 坐下来,讨论理解复杂系统工作的重要性时。文档是你在接触之前应该做的第一步,在你甚至考虑自动化之前。因为当你记录时,你会意识到所有的低效,并且你会意识到,如果你在任何时候改变你的自动化,
正如你提到的,Justin,重写 makefile 在 Dagger 中。你真正想要的是 makefile 的蓝图。而蓝图就是你没有的文档。我曾经是那样的人。我记得 Neil Fedotov,我不会忘记他。我们一起在 RabbitMQ 上。
他问我要文档。我说,“嘿,Daniil,你不需要文档。我写了这个漂亮的 Makefile。它为你做了一切。它是自文档的。它告诉你目标是什么。你是什么意思,文档在哪里?这就是文档。”我花了很多年才明白
我当时是多么错误。而我做对了。所以当我加入 Dagger 时,我做的第一件事就是确保发布过程是有文档的。我们是如何发布 Dagger 的,我们从一份文档开始。那份文档在过去三年中几乎每两周更新一次。
那是我们在 Dagger 所有自动化中使用的蓝图。这让我心里感到非常高兴。发布 MD。所以我吸取了教训,我希望你也能。亲爱的听众,先写文档。保持更新。不断完善。继续努力。与团队分享。它永远不会完成。
然后再添加你的自动化。你们听到他了吗?重播。我只是,是的。因为这让我感到震惊。你知道你是怎么说的,人们想要为了晋升而重写所有东西?或者人们会说,我们已经用 Bash 以同样的方式做了 20 年,我们永远不会改变任何东西,还有这么多新的方法可以做到,但我们就这样永远做下去。你就像...
并不是说,我确实认为有时候如果真的很简单,bash 有时就是最好的选择。对吧。但从未考虑过如何让新员工入职、分享知识并让每个人都更轻松。就像,
你只是永远在做同样的事情。而注释也不是文档,对吧?就像很多开发者会说,嗯,那有很多注释。我们知道,不,不,不。你把那些放在别的地方。你让它对其他不在代码中的人可搜索。我曾经有人告诉我不要放注释,因为脚本是自解释的。不,他们会说,自动化是自解释的。如果你写得足够干净。我说,不,不,不,是的。是的,我知道。是的。
我现在知道。当你是新手,从未见过这个时,它并不是自解释的。我在的每一份工作中,我写的文档比我写的代码持续得更久。如果你想要持久的影响,文档就是会持续的东西。但我们并没有激励文档。我们没有奖励它们。是的,这就是我所说的。这没有意义,因为在学校或你学习编码的地方,第一条规则是什么?他们总是说,写下来,计划好,然后你开始编码。但我不知道我们在自动化中哪里错过了。我们只是说,哦,但那只是针对代码,而不是脚本或其他任何重要的东西或发布过程。当发布过程和脚本以及基础设施通常比你想要发布的代码花费更长时间时。所以,为什么你不尽职尽责地确保呢?好吧,我的意思是,老实说,关于编写代码的会议花费的时间更长。是的。你知道,
但这就是让我感到痛苦的地方,当他们说,工程师只需要能够编写非常好的代码并具备技术能力时。我想,这只是成为优秀工程师的一小部分。很多人害怕 AI 能够编写代码,就像,你只是看到了工程师所做的事情的一小部分。那些是我们激励和奖励的部分,成为这个可以快速编写和构建东西的 10 倍开发者,但像...
但想想看。那些人每两年就跳槽一次,其他人不得不去修复你拼凑在一起的 10 倍开发者的东西,没有人知道它做什么。没有人记录它。你正在毁掉其他人的值班生活。Autumn,你可以随便说名字,如果你想的话。我有点被触动了。就像...
我对科技兄弟们感到厌倦。那么你认为这会走向何方,Gerhard?像 Dagger 这样的东西的最终目标是什么,或者说,是什么让这个变得... 我觉得 Dagger 是产品化的 make,对吧?就像如果我,如果我抹去一切,问,如果这是一个非常好的产品,
我们把它放在这里,给他们良好的体验、良好的工具和良好的 UI,围绕这个一直以来都很模糊、只有一两个人在团队中能理解的东西。就让我们让每个人都更容易理解。让我们让它成为一个可维护的、可共享的、可扩展的东西。
那里的最终目标是什么?你在最后会想,哦,如果我们到达这里,我们就成功了。你让我想起了虚拟机和云之间的区别。Dagger 就像是制作的 make 文件。记得容器为应用程序做了什么吗?那是我设想的所有脚本的时刻。所有你编写的自动化的时刻。
所有这些东西的容器时刻,我们同意首先将这些东西放入容器,以一种不可变的方式,以一种内容可寻址的方式。如果我们这样做,如果这增长到某个程度,我们将不再编写自动化。自动化知道如何使用其他人构建的资源。
而不需要我们去弄清楚如何将它们连接在一起。例如,你有多少次去下载包,检查或像 tarball 一样解压缩,检查 sha256 确保它没问题,确保阅读变更日志,阅读发生了什么变化,弄清楚像什么东西被弃用,所有这些加起来一千倍。
在你的职业生涯中,你至少会做过一千次。你让我感到 PTSD,像是闪回。有没有更好的方法让我消费这些东西?我可以运行它。我可以验证我的软件是否正常工作。无论我想做什么,它都能很好地与所有这些东西结合在一起。
以一种更友好的方式。你会获得一种全新的软件消费、构建、分发的体验,以及在将源代码发布到人们面前之前所需做的任何事情。将所有这些知识封装起来,以一种也有文档的方式,对吧?因为回到文档,你不记录东西,但也许你愿意记录你的参数。也许你愿意记录你的函数。
并解释这个函数应该如何使用以及如何进行交互。你的函数是一个非常小的部分,世界现在可以使用,因为你对 Java 充满热情,并且你知道如何构建 Java 应用程序并拥有包容器。你能否进行一次关于文档和自动化的演讲巡回演出?因为我觉得你可以一次修复一个文档。一次一个文档,是的。你觉得我们会犯什么错误吗?
我觉得,尽管容器做得很好,但在应用程序打包和共享方面,容器还有很多做得不好的地方。你觉得里面有什么东西,可能这是...
一般来说,不是特别针对 Dagger,但也许这个过程,比如编写代码,对其进行一堆操作,然后将其打包并发送到其他地方。也许这就是问题。我认为问题在于雄心太大,我们无法在实践中很好地捕捉它。因此,如果我们与现实脱节太多,如果我们谈论这些假设而没有真实的东西来支持它们,
一切都将无法到达它需要去的地方,因为气球里空气太多,它会爆炸。气球只是空气,仅此而已。这是我的担忧。我认为每项技术都会出现这种情况。
此外,你开始获得竞争者,可能他们主导市场,但也许他们并不是解决问题的正确方案。但他们是市场上的大猩猩,800 磅的大猩猩。每个人都朝着他们靠拢,因为他们在市场上拥有垄断地位。每个人都在谈论这个。然后你会得到一些巨大的收购,然后一切都变得混乱。
所以我认为有一个真正的风险,就是不保持与现实的联系,过于深入假设。
也许没有足够处理那些小纸切割,因为有很多小纸切割,我们试图解决它们。太多的小纸切割。是的。现在我特别谈论 Dagger,但你是对的。即使在软件行业中,也有很多东西是破碎的。我认为你需要其中一些,因为这是一种技术债务,对吧?你需要同时进行创新。但如果它太破碎,那就是一个问题。
所以我们面临的挑战之一,或者说这是我承担的事情,如果你想了解更多,可以去 Dagger 问题 8184。你猜我怎么知道的?因为我已经在上面待了几个月,Dagger 如何在规模上使用 Dagger。这意味着什么?我所说的规模,当我们的管道运行时,我们正在启动
可能多达 10、15 个大型 EC2 实例,总共约 500 个 CPU 来运行 Dagger 的所有管道。如果你有五六个拉取请求同时发生,你会启动数千个 CPU 来测试 Dagger 的各种东西。这是需要真正花钱的。这是一个难题。你的管道越不可靠,运行所需的时间越长,痛苦就越高。
浪费也就越高。这是一个难题。每个团队在某个时候都会遇到这个问题,如果他们成功的话。我们正在朝这个方向发展。我们在查看我们的 AWS 账单,想着,哇,这真贵,真的非常贵。我们能做些什么?而我们使用 Dagger 的某些方式,我们需要打破缓存。我们需要做某些事情,在这种情况下,容器是做这件事的正确方式吗?让
我们来看看。使用 overlayFS 的开销是什么?磁盘的开销是什么?拉取所有这些位的网络开销是什么?当你没有分布式缓存时,重新计算相同事物的开销是什么?所以这里有一些难题。解决这些问题很有趣。这可能是我一生中最大的成功,也可能是我一生中最大的教训。我将以同样的喜悦接受这两者。
我认为你也提出了一个观点。我为我的本地开发桌面做了一个计算,像是 AMD 线程撕裂者与亚马逊的某个可比产品。
当我查看我用零件构建的机器时,基本上花费了大约 600 多美元。而在 AWS 上获取某个东西的成本是 101 倍。不是 10 倍,而是,对于一个,这是消费级的,不是 ECC RAM。不是所有那些东西。像我不需要那些东西来做这些事情。我们在做本地开发和测试时,我不需要 ECC。我不需要所有这些东西。当你有像 Dagger 这样便携的东西时,它更有意义,
也许实际上只需几台没有所有我们实际上不需要的好处的 PC 就可以为我们节省很多钱。即使它们没有被使用,因为如果人们说,哦,这很浪费,对吧?你并不是一直在使用它。像,当它便宜一百倍时,这实际上并不重要。
我可以用它的时间是它的百分之一,仍然从中节省钱。这个数学是成立的。所以你只是觉得,哦,也许一堆构建机器有时确实是有意义的。我觉得这很有趣。有时确实是有意义的,但有时你也必须记住
如果你在使用它,而不仅仅是在玩弄它,并且你需要它可靠,你必须更换它。你必须维护它,你必须有知识来做到这一点。所以,我的意思是,人们构建,你知道,看看,我有 terraform 代码和云中的所有其他东西。所有这些东西都需要维护和处理。因此,无论哪种方式都不是免费的。它们都不是免费的,但像,
我认为我们在云上走得太远。我们全力以赴,它是所有问题的答案。但现在我们的态度是自动认为我们不需要云,一切都可以在本地完成。两者都不正确。就像,有用例和时间适合两者。你必须弄清楚什么是最有效的,什么是最具成本效益的。有时一种方法有效一段时间,然后你增长得太快,需要做另一件事。
但我确实认为,假装一刀切,认为我们可以在本地完成一切是对自己的不公。我们不能,像,不,是的,绝对如此。如果是那样的话,我们仍然会在我们奶奶的地下室里运行服务器。你知道我的意思吗?我仍然在。现在是你的地下室,但,
但你知道我的意思吗?你用来娱乐的东西和你用来维护的东西,我不知道,一个大型企业是完全不同的事情。而且,有趣的是,有这么多公司在谈论他们如何在本地运行,但他们本质上是在构建自己的云,而其他人正在维护它。这便宜一点,但他们并没有真正真正地在本地运行。就像,
他们把他们的硬件送到别人那里去运行。所以这几乎是云的另一个迭代。你知道我的意思吗?这不是所有 AWS 和我车库里的所有计算机。这是一个混合体,哦,有 colos。我可以临时租一些东西。我可以获得裸金属的地方。这就是我所说的。所以这几乎是云、硬件和本地的一个迭代。我们处于一个奇怪的地方,我认为因为每个人都在...
试图节省资金并弄清楚我们如何以不同的方式做事情,以至于人们几乎在 scrambling,看看什么实际上能为人们节省金钱和时间,并且对他们的用例有好处,或者他们是否最终陷入另一个兔子洞,但我认为我们只是像
像假装它们都是同样的事情,实际上你并没有本质上使用不同类型的云。你只是在使用一个私有云。如果我们去掉“云”这个词,就像在齿轮中,它就像,是的,它只是虚拟机。这就是我所说的,它们都是虚拟机。因此,我的观点是 Dagger 是一个新工具,因为拥有一个
本地构建机器的缺点,我在很多工作中都有,就是维护成本,比如,哦,有人调整了某些东西,现在我不知道是什么坏了。对吧。但 Dagger 对这些工作的封装,意味着,嘿,实际上这应该在任何地方运行,只要这个引擎存在。
现在我们可以整体封装,而不那么依赖于基础操作系统或其版本。你甚至,我们开始谈话时,你说内核在很多情况下也很重要。因此,有些事情在整个范围内并不是通用的。那里仍然有一些维护成本,但在大多数情况下,
应该比我正在做 bash 脚本的 make file 更可移植。对吧?这方面就像,哦,现在我有那个灵活性,可以决定我想在哪里运行这个,应该如何运行这个,哪里有便宜的计算资源。对吧?我可以使用现货实例来降低价格,或者如果我在壁橱里有一些额外的计算机,我可以直接插入并这样做。就像,那里有选项,因为你正在
将可移植性构建到工具中,我不会失去我可能会从像,嘿,我在 AWS 中做虚拟机。我需要从中获取日志。哦,酷。这些日志就在 CloudWatch 日志中。在这种情况下,不,我们都在与 API 交谈。你默认获得跟踪数据,通过使用这个 Dagger Cloud 或者通过使用,你获得日志,你获得其中的东西。就像我认为 GitHub Actions 周围有如此多的引力,因为 GitHub Actions 就像,我们给你一堆这些默认值,但它并不是可移植的。它不是一种容易移动和决定的东西,我不想再在这里运行这个。我认为这将是那些真正喜欢的初创公司,成为下一个大型科技公司,真正从我们所处的这种奇怪的技术沉没地带中受益,在那里每个人都试图像
用最少的资源赚取尽可能多的钱,像那些允许你提升和转移并保持可移植性的初创公司,以及监控你所有不同的云、所有不同的实例和你正在运行的所有东西,像无论什么给你那种可移植性和可观察性以及监控所有不同的东西,因为每个人都想做混合云,所有不同的法规即将到来,或者现在一种云或一种方式做它或本地更便宜。他们想要从这个东西上提升到那个东西,像所有将使软件更可移植和更容易切换的东西。
将是那些真正扩展并且像,现在就会发生的事情。这就是我认为 Dagger 完美契合的地方,
我们可以说我们可以在任何地方运行这个。我不能在任何地方编写代码。我需要一个开发者机器。我需要一些本地有工具的东西。在我尝试过的所有基于网络的开发工具中,我从未坚持过任何一个,因为它们总是对我有某种限制,或者它们最终变得非常昂贵。我想,实际上,我已经为这台计算机付费。我可以使用这台计算机,并支付我确保这东西运行的维护成本。
而在另一端是,我们有这些容器,我们可以打包它们。我们有这个 Cooper 和 Eddie 的东西,可以在任何地方运行。我们有所有这些东西,在另一端,我们可以拥有可移植性,但在编写代码和将代码部署到某个地方的构建管道之间,CICD 的东西总是超级粘稠。
而且很难说,我可以把这个转移到某个地方。我不能提升和转移 Jenkins。我可以,但这需要很多工作。它实际上并不是一个端点。你必须在不同的环境中重现相同的东西。我认为这很酷,就像你一开始提到的,对吧?这就是容器为应用程序所做的事情。Dagger 可以为 CICD 中间管道做的事情,这是可移植的,我们在这里有一些选择。
此外,当你扩展发布基础设施时,曾经有效的东西肯定会达到你有太多管道和增长过快的地步,然后提升和转移是世界上最痛苦的事情。
我的意思是,这对很多公司来说是一个独特的问题。并不是所有公司都有这个问题。像亚马逊就有这个问题。那绝对是亚马逊。这里有很多管道来确保事情安全并推出所有这些东西。但并不是每个人都需要那样的数量。但当你为不同架构构建东西时,能够将它们提升和转移到不同的东西,因为在 Mac 上有效的东西可能在 Windows 上无效,你知道我的意思吗?所以能够看到这是否真的在该架构中本地有效是非常重要的。是的。我们之前谈到的一个重要点,我认为是关于什么造就了一个好的开发者。可以说,进一步说,什么造就了一个好的工程师,一个好的软件工程师。它不是文档,尽管这在其中扮演了非常重要的角色。它不是他们编写的代码,尽管这必须存在。
它不是他们的展示和谈话方式。但同样,这必须存在。他们如何分享想法,你知道,他们如何向世界展示并做他们必须做的事情。
那些是全面发展的人。我可以看到这种全面性如何转化为无论是云、还是本地,或者下一个东西是什么,你需要在所有这些事情上全面发展。你应该使用它们所有,因为如果你不使用它,你就会失去它。非常简单,非常真实。这永远不会改变。因此,你应该使用云,但你应该以云应该被使用的方式使用云。
0 而你,贾斯廷,提出了一个非常好的观点。在迪士尼,你们是如何使用云的,这可能是正确使用云的最佳例子,对吧?扩展,启动所有这些实例,然后再拆除它们。这就是它应该被使用的方式,对吧?这是按需容量,巨大的容量。你不会想要购买这些。但当你需要它时,它就在那儿。这是一个很好的商品。
这要贵100倍,因为这就是这个商品的成本。还有哪里可以说,嘿,启动100个强大的实例?那不会花几个月的时间。可能需要几年才能采购到所有这些东西。顺便说一下,不,我不想要那个AMD CPU。我想要那个Intel CPU。哦,ARM?我想我会有一些ARM。顺便说一下,我会有,我不知道,
10,000个ARM CPU。你在哪里能得到这些?这就是它的便利性。现在,如果你知道你需要什么,对吧,作为一个成功的企业,作为一个成功的初创公司,那么,对于你确实需要的东西,那就像是你在基础设施方面的基本运营预算,把它放在一个合理的地方。让它便宜。让它,嗯,我说是成本高效。做一些有意义的事情。混合云。Wasm怎么样?
Bozzy运行时呢?它们如何改变我们看待容器和与容器合作的方式?这会来吗?好吧,我可以告诉你,React并不适用于Dagger Cloud。React,DOM,生成我们必须生成的所有东西只是崩溃了。技术不够成熟。那么我们做了什么?我们看了Bozom v3。
那是V3云。我们经历了三次重写,才把它做到应该有的性能水平。那里有很多挑战。不要认为这是一个神圣的地方,你拿起它,一切都很棒。哦,不。循环又开始了。但这就是它的美。开始这些循环。继续经历它们。继续学习。继续迭代。最终,你将能够认为自己是全面发展的。
其他人会看着你说,哇,我希望他能回应我的拉取请求。我希望他能留下些评论并做一些审查,因为我喜欢他的审查。我希望他能多写博客。或者我希望他能去做一些演讲,因为她是一个出色的演讲者。
所以寻找全面发展,而不是10倍。我认为这是结束这一集的一个很好的地方。再次感谢你,杰拉德,感谢你开始这个播客,提供一个人们可以学习的地方,并且能够接触到那些他们可能无法接近并与之交谈的人,然后从他们过去的所有循环和失败中学习,以及他们想要分享的事情。
这就是我们试图继续的事情。这些事情不仅仅是让酷的人参与激动人心的对话,我们确实喜欢这样,而是能够帮助人们更全面地理解,实际上那个数据库是重要的。实际上CICD是重要的,以及围绕代码和负责这些事情的业务的所有事情,
都是重要的,我们如何帮助他们变得更负责任,并帮助运行它们的人理解它们,所以非常感谢你,我真的认为人们对这一部分的讨论不够多。
这就是人们需要的信息。因为我们没有奖励它,对吧?但这确实是如此。没有数据库或基础设施,没有所有这些东西,你就无法拥有任何这些酷炫的东西。所以我只是认为,向人们展示他们可能没有接触到的事物,并让那些每天都在做这些事情的人告诉他们,
注意事项或他们尝试过的事情,以及他们讨厌的地方和他们成功的地方,你知道吗?如果人们想要联系你,继续对话,他们应该在哪里找到你?Gerhard.io。这是一个不错的地方。还有这个新空间,现在有了域名,makeitwork.fm和makeitwork.tv。
我认为这就像是为极客制作的电影。来Blue Sky吧,这样我们就可以打扰你。我是。我必须开始使用它。我在那里,但我必须开始使用它,因为社交平台太多了,有太多事情要做。我认为这是我在全面发展方面做得不够好的一个领域。
在社交媒体上更加活跃。我认为蓝天正在成为每个人似乎都在去的地方。我真的希望它能坚持下去,因为我无法管理所有这些社交媒体平台。是的。我是说,有很多。我希望蓝天成功,仅仅是因为,
这将鼓励人们希望能建立自己的网站。我认为蓝天的真正使命和目的就是让互联网更加民主化,让人们理解我应该能够拥有和运行这些数据,无论我想在哪里,然后发布我自己的内容并拥有一个域名。像这些东西对我来说是超级重要的。而且,这不仅仅是另一种集中化,
嘿,我们是新的搜索引擎。我们是新的社交媒体。大家都来这里。其实不是,而是每个人如何相互互动并在其他人所做的基础上以民主化的方式构建,我认为这对互联网的长期成功至关重要。我喜欢它具有其他社交媒体的便利性,但正如你所说,它确实迫使你去...
但不仅仅是迫使你,你可以保留你所投资的内容,你的数据。你看不到,我在我身后的树莓派上运行一个PDS。所以我有一个用户在蓝天上,实际上是在这里报告。我已经做了一个视频,很快就会发布。我在等蓝天冷却。来教你的侄子们如何在树莓派上运行东西,因为有太多事情要做,我没有时间去弄清楚这一点,他们一直在打扰我。来吧,
我们将很快在播客上邀请一位来自蓝天基础设施的人。他们正在处理各种规模的问题,过去几天每天都有数百万人。所以我在等着发布我的视频,因为我在和他们交谈。我说,嘿,如果每个人都开始这样做,这会对你们造成问题吗?他们说,是的,实际上请等一下,等一周,我们就没问题了。但我们很快会请他们上节目,因为我对他们过去几周和几个月的扩展旅程感到着迷。
他们做得很好。而且他们在印刷方面也做得很好。是的,贾斯廷,我有个问题。它会在Kubernetes PDS中工作吗?
是的。我是说,它只是一个带有SQLite数据库的Web服务器。就这样。它就像是一个Git树在SQLite中,仅此而已。就像,是的,如果你能把它发布到某个地方,那就是,我认为蓝天的自我拥有的联邦与Mastodon相比,确实很酷,Mastodon的扩展故事要困难得多,因为你需要Postgres,你有一个Ruby on Rails应用程序,你需要缓存。
我只是无法承诺那种类型的开销。我并不是讨厌Mastodon。我只是无法承诺那种社交媒体的开销。我有太多事情要做。而PDS实际上是,他们在一个容器中部署它。如果你有一个Debian的东西,它已经打包在一个容器中。你只需要一些可靠的存储,以便你的SQL数据库始终可用并备份。