一个在任何地方都能工作的CI/CD(附代码)

90 阅读2分钟

构建系统

此仓库正在积极开发中 ⚠️请定期回来查看更新。

一个在任何地方都能工作的CI/CD,甚至在你的本地环境。

buildsys 是一个可定制的、可扩展的CI/CD系统,有多个后端。它有一个基于插件的系统,允许开发人员编写他们的自定义代码来部署

从源代码构建

你将需要Go 1.18以上的版本来构建这个项目:

cd cmd/togomak
go build .

运行二进制文件

./togomak ./config.yaml

概念

提供者

提供者是一种插件,它可以在以下方面提供帮助

  • 收集信息
  • 检查任务的所有前提条件是否得到满足
  • 运行一个任务

来自 "收集信息 "步骤的提供者的数据可以在其他阶段使用。

可以在配置文件中定义一个提供者,如下所示:

providers:
  - id: git
    path: plugins/git/git

远程插件仍然是一个WIP。

阶段

阶段是默认情况下同时发生的工作。 它们可以并行或按顺序运行。 如果你需要阶段按顺序执行,你可以指定stages[].depends-on 参数

一个示例阶段可以这样定义:

stages:
    id: myuniqueid # id needs to be unique
    container: python
    args: 
        - "-c"
        - "print('Hello World')"

上面的阶段片段使用Docker(或Podman)从容器注册表中提取python 镜像,并执行args中提到的片段。

你也可以在容器中运行一个shell脚本。

stages:
    id: helloworld
    container: python
    # the above container will run the following script in 'sh'
    script: |
        echo "Hello World"

要指定各阶段之间的依赖关系,你可以使用depends-on 参数。buildsys 将等待各阶段完成后再运行下一个阶段。

stages:
    id: myuniqueid
    container: python
    args: 
        - "-c"
        - "print('Hello World')"
    depends-on:
        - helloworld

配置

配置是在yaml 。目前支持的一些字段是,一些字段支持pongo 语法,这与django的模板语法非常相似。

目前支持的字段有:

  • .steps[].condition
  • .steps[].script
  • .steps[].args