OCaml Docker 基础镜像构建
ocurrent/docker-base-images 包含一个管道,用于为各种 Linux 发行版、CPU 架构、OCaml 编译器版本和配置选项构建 OCaml 的 Docker 基本映像 。例如,要在 Debian 10 上测试 OCAML4.09,可以执行以下操作:
$ docker run --rm -it ocurrent/opam:debian-10-ocaml-4.09:~$ ocamlopt --version4.09.0:~$ opam depext -i utop[...]:~$ utop----+-------------------------------------------------------------+------------------| Welcome to utop version 2.4.2 (using OCaml version 4.09.0)! |+-------------------------------------------------------------+Type #utop_help for help about using utop.-( 11:50:06 )-< command 0 >-------------------------------------------{ counter: 0 }-utop #
以下是管道的外观(单击可查看完整尺寸)
文章插图
它每周提取 opam 存储库的最新 Git 提交,然后为每个发行版构建包含该内容的基本映像和 opam 包管理器,然后为每个受支持的编译器变体构建一个映像 。许多图片是建立在多个架构(amd64、arm32、arm64 和 ppc64)上的,并被推到 Docker Hub 的一个暂存区 。然后,管道将所有散列组合起来,将一个多架构清单推送到 Docker Hub 。还有一些别名(例如,debian 表示 debian-10-ocaml-4.09) 。最后,如果有任何问题,则管道会将错误发送到松弛通道 。
您可能想知道,我们是否真的需要一个管道来实现这一点,而不是从 cron 作业运行一个简单的脚本 。但是拥有一个管道可以让我们在运行它之前看到管道将要做什么,观察管道的进度,单独重新启动失败的作业,等等,几乎与我们编写的代码相同 。
如果你想看完成的流水线,可以阅读 pipeline.ml 。
OCaml CI
ocurrent/ocaml-ci 是一个用于测试 OCaml 项目的(实验性的)GitHub 应用程序 。管道获取应用程序的安装列表,获取每个安装的已配置存储库,获取每个存储库的分支和 PRs,然后针对多个 Linux 发行版和 OCaml 编译器版本测试每个存储库的头部 。如果项目使用 ocamlformat,它还会检查提交的格式是否与 ocamlformat 的格式完全相同 。
文章插图
结果作为提交状态被推回到 GitHub,并记录在 web 和 tty ui 的本地索引中 。这里有很多红色,主要是因为如果一个项目不支持特定版本的 OCaml,那么构建会被标记为失败,并在管道中显示为红色,尽管在生成 GitHub 状态报告时会过滤掉这些失败 。我们可能需要一个新的颜色跳过阶段 。
结论编写 CI/CD 管道很方便,就好像它们是一次连续运行这些步骤并始终成功的单点脚本一样,然后只要稍作更改,管道就会在输入更改时运行这些步骤,同时提供日志记录、错误报告、取消和重建支持 。
使用 monad 可以很容易地将任何程序转换为具有这些特性的程序,但是,与常规程序一样,在运行某些数据之前,我们不知道该程序将如何处理这些数据 。特别是,我们只能自动生成显示已经开始的步骤的图表 。
传统的静态分析方法是使用箭头 。这比单元格稍微有限,因为流水线的结构不能根据输入数据而改变,尽管我们可以增加有限的灵活性,例如可选的步骤或两个分支之间的选择 。但是,使用箭头符号编写管道是很困难的,因为我们必须使用无点样式(没有变量)编程 。
通过以一种不寻常的方式使用 monad(这里称为“dart”),我们可以获得静态分析的相同好处 。我们的函数不是接受纯值并返回包装值的函数,而是接受并返回包装值 。这导致语法看起来与普通编程相同,但允许静态分析(代价是无法直接操作包装的值) 。
如果我们隐藏(或不使用)monad 的 let*(bind)函数,那么我们创建的管道总是可以静态地确定的 。如果我们使用绑定,那么管道中会有随着管道运行而扩展到更多管道阶段的孔 。
基本步骤可以通过使用单个“标签绑定”创建,其中标签为原子组件提供静态分析 。
我以前从未见过使用过这种模式(或者在 arrow 文档中提到过),它似乎提供了与 arrow 完全相同的好处,而且难度要小得多 。如果这个名字是真的,告诉我!
这项工作由 OCaml 实验室资助 。
原文链接:
https://roscidus.com/blog/blog/2019/11/14/cicd-pipelines/
推荐阅读
- 辨别铁观音好坏的方法,碧螺春茶叶辨别好坏的方式
- 白茶长期存放,白茶存放方法
- 白茶的功效与作用有哪些 白茶的保存方法
- 天目湖白茶的功效与作用 天目湖白茶的保存方法
- mac操作界面?mac桌面设置方法
- 冬季最有效的减肥方法是什么呢
- 男士冬季减肥方法有哪些呢
- 冬季运动减肥最好的方法是什么呢
- 瘦腿最快运动方法有哪些呢
- 六安瓜片最正宗的读法,六安瓜片鉴别方法