AlloyCI 简介

AlloyCI 简介

原文:https://medium.com/hackernoon/introducing-alloyci-a41aef2dd2f1

用 Elixir & Phoenix 编写的新的持续集成协调器

我想学长生不老药和凤凰已经有一段时间了,几个月前我终于决定尝试一下。我开始阅读迪夫·托马斯的《编程灵丹妙药 1.3》和克里斯·麦考德等人的《编程凤凰》。艾尔。(均来自《实用主义书架》,如果想入门《仙丹与凤凰》,强烈推荐)。

我遵循了书中的大部分代码指南,但有时仍然感觉有点陌生。我想做一些更复杂、更有挑战性的东西。我还想把它作为开源软件发布,所以它必须对更广泛的受众有用,而不仅仅是我。

我一直喜欢 CI 系统和它们提供的价值,但是我还没有找到一个能提供我所需要的一切的系统。我希望它高度可配置,易于扩展,易于安装,有一个健壮的执行器,可以在多种操作系统上运行,并且是开源的。与此最接近的 CI 服务是 GitLab CI,但它与 GitLab 本身紧密耦合,所以我不能在 GitHub 中使用它。我也不想安装一个完整的源代码管理系统 只是为了它的 CI 服务

这就是创建竞争情报系统的想法的来源。我在 GitLab 的时候学到了很多关于 CI 系统应该如何工作的知识,所以我觉得这是向前迈出的正确一步。事实上,我决定使用 GitLab CI Runner 作为这个项目的执行者。

GitLab CI Runner 是在 Go 中编写的,它是实际负责运行构建的一段代码,以及执行管道所需的任何其他操作。最棒的是,它基本上是一个“哑盒子”,这意味着你需要做的就是告诉它以它期望的方式做什么,它就会去做!它也非常强大和可配置,它可以使用 Docker 来执行您的构建,并利用 Docker Machine 让您自动缩放它用于您的构建的机器,它可以使用 Kubernetes,在 Digital Ocean 的虚拟机上运行,运行 Xcode 和 Windows 构建,等等。

使用一个已经存在的项目作为我的 CI 系统的执行程序,让我可以专注于协调程序,这是一个软件,它读取项目的配置,创建管道,构建,并以它期望的方式将所有这些信息发送给执行程序。它还收集由执行者传递的所有信息,如构建跟踪和其他工件,并以一种易于理解的方式呈现给用户。

因为这是一篇介绍性的文章,所以我不会详细介绍 AlloyCI 不同部分的实现。为此,我将创建几个独立的帖子,并尽可能详细地介绍。现在,让我告诉你它的特点。

( AlloyCI Dev 日记的第 1 部分是 live! )

特征

请记住,这是 AlloyCI 的第一次公开发布,而且它只有 0.1.0 版本。随着时间的推移,许多功能将会得到改进,随着我们向 1.0 迈进,还会有更多的功能出现。你可以在这里查看 1.0 的路线图:https://github.com/AlloyCI/alloy_ci/projects/1如果你想贡献点什么,请继续。

User’s Dashboard

基本配置项功能

对于 0.1 版,目标是至少具备 CI 功能的最基本要素。其中包括以下内容:

  • 解析配置文件以创建和准备构建和管道
  • 支持不同的构建阶段
  • 允许构建和运行者被标记,从而允许细粒度的控制哪个运行者选择哪个构建
  • 以预期的格式处理并发送构建信息到 GitLab Runner
  • 接受从 GitLab Runner 收到的关于特定构建的信息
  • 显示每个构建的输出跟踪,并在查看活动构建时跟踪它
  • 正确管理每个构建的状态,并且只向运行者发送应该被处理的构建
  • 通过上次提交的 SHA 引用向 GitHub 报告每次推送的状态
  • 通过电子邮件和/或 Slack 向用户发送有关管道状态的通知
  • 通过deploy阶段执行自动部署

就商业上可用的 CI 系统而言,AlloyCI 与其他 CI 服务提供的过多功能相比相形见绌,但这没关系。我想从简单开始,从 CI 体验中提炼出最必要的特性。铃声和汽笛声将随后出现😉

临时演员

我只是为了“值得拥有”的价值添加了一些东西,即每个项目和运行者的构建统计数据。您可以看到一些漂亮的图表,描绘了过去一周的构建数量、成功或失败的数量以及处理的构建总数。

Project’s Settings

runners 图表还将减少 project 处理的构建数量,因此您可以看到哪些 runners 正在处理哪些构建。

Runner’s Admin Settings

怎么才能试出来呢?

您可以使用 Docker 和 Docker Compose 在自己的服务器上安装 AlloyCI。请按照我们的文档开始。

试用 AlloyCI 最简单的方法是去https://alloy-ci.com,用你的 GitHub 账户登录,然后添加一个项目。

New Project’s View

在添加项目之前,系统会提示您在自己的帐户上安装 AlloyCI 集成。这样做之后,您想要添加的项目在添加之前需要有一个.alloy-ci.json配置文件。你可以阅读更多关于如何创建这个文件在这里。这里有一个关于灵丹妙药的简单例子:

{
  "image": "elixir:latest",
  "services": [
    "postgres"
  ],
  "before_script": [
    "mix deps.get"
  ],
  "after_script": [
    "rm secrets"
  ],
  "stages": [
    "build",
    "test",
    "deploy"
  ],
  "mix credo": {
    "stage": "build",
    "script": ["mix credo"],
    "tags": ["elixir"]   
  },
  "mix test": {
    "stage": "test",
    "script": ["mix test"],
    "tags": ["postgres", "elixir"]   
  }
}

一旦文件被提交到存储库中,您就可以将它添加到 AlloyCI 中了。添加项目并推送新代码后,您将在项目的仪表板中看到新创建的管道。

Project’s Dashboard

如果您单击 pipeline,它会将您带到它的构建,在那里您可以跟踪它们的输出和整体状态。

Build Job’s Output

测试服务器资源有限,并且只有 2 个注册的运行者来处理构建,所以处理您的管道需要一段时间。幸运的是,你可以将你自己的跑步者注册为“项目特定跑步者”,这意味着它将只从你自己的特定项目中获取构建。有关如何添加特定跑步者的说明,请转到您项目的设置。

我为什么要建造 AlloyCI?

我之前提到过,我建 AlloyCI 是为了学习仙丹和凤凰。我选择了一个 CI 协调人,因为我对他们很熟悉,并想加入我自己对他们的看法。我也将它作为 GPLv3 许可开源代码发布,因为我认为其他人可能会觉得它有用。拥有一个重要的代码库是学习一门新语言的绝佳资源。我知道我的代码远非完美,但这是一个开始,我希望人们能看看它,批评它,并提供有用的反馈,这样我、和其他人,就可以从这个项目中学习和受益。

我将继续开发 AlloyCI 一段时间。我计划在可预见的未来维护它,我甚至可能考虑在 Elixir 本身中编写一个新的 runner/executor,这样项目就不依赖于 GitLab 保持 GitLab Runner 开源和维护的良好意图。

如果你喜欢这个项目,请把它放在 GitHub 上,如果你想到这个项目可以使用的东西,或者有一些建议或反馈,无论如何,请打开一个问题。我想去❤️听听你的想法。


本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除