3 个不稳定版本
0.2.0 | 2021年2月25日 |
---|---|
0.1.1 | 2020年12月21日 |
0.1.0 | 2020年12月21日 |
#458 在 构建工具
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)
- 为什么?
- 这具有我个人项目和家庭实验室自动化所需的最小功能集。其他任何替代方案对我来说都过于复杂。我还运行在树莓派上,这个项目将始终关注低资源消耗。
- 这个项目将会维护吗?你会添加新功能吗?
- 我亲自使用这个项目,所以我至少会维护当前的功能和一些额外功能(请参阅路线图部分)。如果您想看到一些额外的功能,请打开一个GitHub问题,或者发送一个PR - 都非常欢迎。
- 为什么只支持Git?
- 我只拥有Git仓库。
设计
Thingy基于Actix actors和用Actix-web制作的REST API运行。thingy中的每个组件都是一个actor。
thingy中的actors形成一个树,有一个根节点。组织结构如下
- Thingy actor(根节点)
- 每个任务一个actor
- 每个任务仓库的分支一个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