#build #git #自动化 #git仓库 #yaml

构建 thingy

轻量级构建服务器和事务执行者

3 个不稳定版本

0.2.0 2021年2月25日
0.1.1 2020年12月21日
0.1.0 2020年12月21日

#458构建工具

MIT 许可证

45KB
1K SLoC

thingy

轻量级构建服务器和事务执行者

安装

cargoinstall --forcethingy

用法

运行: thingy 路径//工作区/文件夹,然后转到 http://127.0.0.1:8080/

配置

thingy 有很少的配置选项,它们作为可选环境变量提供

环境变量 默认值
LISTEN_ADDRESS 127.0.0.1 绑定到 Web 服务器的地址
LISTEN_PORT 8080 Web 服务器监听的端口

thingy 在 '工作区' 文件夹中工作。thingy 工作区是一个包含 thingy.yaml 文件的普通文件夹。该文件的结构基于 此结构。此文件列出构建作业和配置。如果此文件不存在,将创建一个没有作业的空配置。然后可以从 Web UI 添加作业。

工作区文件的示例

jobs:
  - name: "test" # names must be unique within workspace
    repo_url: "[email protected]:n-k/thingy.git"
    build_script: "build.sh" # should be an executable file present in the repository, see build.sh in this repository for example
    poll_interval_seconds: 300 # optional
    auth: # optional
      PrivateKey:
        path: "/path/to/your/ssh/private/key"
        passphrase: "optional - if key has passphrase"
  - name: "test2"
    repo_url: "../../some/path/to/repo.git"
    build_script: "build.sh"
    auth: # optional
      UserPass:
        username: "username"
        password: "password"

在此示例中,假设仓库包含一个可执行文件 build.sh。当正在构建新的提交时,thingy 将拉取代码,并在检出目录中运行 build.sh,同时带有几个特殊环境变量。有关附加环境变量的列表,请参阅下一节。

提供给构建脚本的附加环境变量列表

  • BRANCH:正在构建的分支名称
  • COMMIT_HASH:正在构建的当前提交哈希值

功能

  • 多分支 Git 轮询/构建
  • REST API
  • 简单但功能性的 Web 界面
  • 日志查看器,支持运行构建的尾部跟踪

路线图

  • 支持 GitHub 账户 - 允许使用 GitHub API 令牌进行身份验证和列出仓库。
  • 支持 Docker 构建。虽然目前对 Docker 构建的支持还不够,但将 Docker 命令放在构建脚本中已经足够好了。
  • 秘密。有更好的秘密管理支持会更好。目前,thingy.yaml文件可以包含git凭证。这个文件不应该被共享或公开,所以至少在我的设置中,将凭证放在里面是安全的。对于其他秘密,任何传递给thingy可执行文件的环境变量都会传递给构建过程,这可以用来,例如,提供包含其他秘密的文件的路径。

常见问题解答(FAQ)

  1. 为什么?
  • 这具有我个人项目和家庭实验室自动化所需的最小功能集。其他任何替代方案对我来说都过于复杂。我还运行在树莓派上,这个项目将始终关注低资源消耗。
  1. 这个项目将会维护吗?你会添加新功能吗?
  • 我亲自使用这个项目,所以我至少会维护当前的功能和一些额外功能(请参阅路线图部分)。如果您想看到一些额外的功能,请打开一个GitHub问题,或者发送一个PR - 都非常欢迎。
  1. 为什么只支持Git?
  • 我只拥有Git仓库。

设计

Thingy基于Actix actors和用Actix-web制作的REST API运行。thingy中的每个组件都是一个actor。

thingy中的actors形成一个树,有一个根节点。组织结构如下

  • Thingy actor(根节点)
    • 每个任务一个actor
      • 每个任务仓库的分支一个actor
        • 每个构建的临时actor

工作空间目录结构

workspace_directory/
  thingy.yaml (job definitions)
  job_1/ (directory name is same as job name)
    branch_1/
      data.json (saved state for this branch, contains past/ongoing builds, last seen commit hash)
      build_num.txt (number of latest build to have been started, keeps increasing by 1)
      1/
        repo/ (directory where this build cloned the repository)
          ... files from repo ...
        log.txt (build logs, both stdout and stderr are captured, and prefixed by [out] or [err])

依赖项

~34–47MB
~1M SLoC