Skip to content

deoops-net/dotam

Repository files navigation

Dotam

Dotam 读法 dot-am, 原意为dotfiles automation。

为什么创建另一个自动化工具

我自己在团队中的角色既是一个开发者(负责开发实现业务逻辑),同时我也是一个Devops(我需要自己写ci files,部署到kubernetes的相关yamls等等)。 我在做这些事情的时候通常会遇到在提交代码的时候同步一些状态到很多配置文件中,比如:我需要给Docker镜像的版本写到Makefile中,用于发布到kubernetes的yaml中还有.drone.yml 中,有的时候我总是会疏忽某一个文件,所以就需要再次修改,提交。。真的是很麻烦

我做了一些搜索,但是没有发现很符合我使用场景的自动化工具,所以我就写了这个。你可以往下看看它的主要特性是否符合你的使用场景来决定是否要使用和这个自动化工具

特性

  • 编程语言无关
  • 配置简单
  • 支持多配置语法json,yml,hcl
  • �内置方便的插件git, docker等
  • 简单的自定义插件化

PS: 构建效率目前还不是主要开发方向,在版本稳定后我会花更多的时间来优化构建效率,当然如果你愿意参与贡献,我是举双脚欢迎的

快览

通常你只需要在项目根目录下配置一个像下面的这样的示例配置文件,然后运行dotam build,所有的工作就完成了! PS: 如果你懒得每次从别的项目拷贝一个配置文件过来那么你可以通过dotam init来初始一个模板文件。

Dotamfile.hcl:

temp "Makefile" {
    src = "examples/.dotam/Makefile"
    dest = "./"
    var {
        version = "{{versions.prod}}"
        tag = "0.1.2"
    }
}

plugin "docker" {
    command = "docker"
    args = ["build", "-t", "{{docker.repo}}", "{{versions.prod}}", "."]
    settings {
        level = "{{publish.level}}"
    }
}

var "versions" {
    prod = "v1.0.0"
    stage = "v1.0.3"
}

var "publish" {
    level = "prodution"
}

var "docker" {
    repo = "deoops/dotam"
}

Dotamfile.yml

temp:
  Makefile:
    src: "examples/.dotam/Makefile"
    dest: "./"
    var:
    - version: "{{versions.prod}}"
    - tag: "0.1.2"

plugin:
  docker:
    command: "docker"
    args: 
    - build
    - -t
    - "{{docker.repo}}"
    - "{{versions.prod}}"
    - "."
    settings:
    - level: "{{publish.level}}"

var:
  versions:
  - prod: "v1.0.0"
  - stage: "v1.0.3"
  publish:
  - level: "production"
  docker:
  - repo: "deoops/dotam"

Dotamfile.json

{
    "temp": {
        "Makefile": {}
    }
    ...
}

安装

homebrew:

brew tap deoops-net/tap

brew install dotam

预编译二进制:

发布页面下载对应平台的预编译版本。

通过go安装:

go install github.com/deoops-net/dotam

Docker:

comming soon!

开发及源码安装

git clone https://github.com/deoops-net/dotam
cd dotam
make test
make install

使用

运行

dotam build [Dotamfile.{yml,hcl,json}]

默认情况下直接使用dotam build即可,dotam会在根目录下寻找Dotamfile的三种格式文件(.json, .hcl, .yml|.yaml)之一。你也可以指定一个具体的 文件让dotam 去跑

初始化

dotam init [-t yml,json,hcl]

此命令会为项目创建一个模板配置文件,可以通过-t指定创建的文件类型。

注意及常见问题

语法冲突

如果模板中还有一些用于其他工具的模板标记比如我们的.drone.yml中用于slack插件的{{#success}}语法,这个会和项目自带的 pongo2模板语法有冲突,你可以直接在模板中用safe过滤器来处理:

  - name: notify
    image: plugins/slack
    settings:
      webhook: https://hooks.slack.com/services/TKR84LDNK/BL0A07VEG/xasdaww
      channel: deoops
      link_names: true
      icon_url: https://unsplash.it/256/256/?random
      image_url: http://auto.wegeek.fun/api/badges/techmesh/dkb-api/status.svg
      template: >
        {{"{{#success build.status}}"|safe}}
        {{"**API** build {{build.number}} succeeded. <@dayuoba> ready to be deployed. <@Vincent> [Doc]login update "|safe}}
        {{"{{else}}"|safe}}
        {{" **API** build {{build.number}} failed. Fix {{build.link}} please <@dayuoba>. "|safe}}
        {{"{{/success}} "|safe}}

About

toil for developers

Topics

Resources

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published