10 个版本
0.1.10 | 2019年7月11日 |
---|---|
0.1.9 | 2019年5月9日 |
0.1.7 | 2019年4月17日 |
0.1.6 | 2019年3月16日 |
#24 in #rest-api
730KB
3K SLoC
🤖 LabHub
一个用Rust编写的GitHub机器人,用于在开源项目中使用GitLab CI。
特性
- 监听来自GitHub的webhooks
- 从外部(分叉)PR将分支推送到GitLab
- 通过PR评论接受命令
- 可能很快会有更多功能 👻
命令
可以通过在PR上用CI用户的登录名评论来执行命令。
@labhub retry
: 重试失败的流水线
问题
GitLab有一个很棒的CI系统,但是它不适合开源项目 😧(撰写本文时)因为它默认不会构建外部PR。外部构建中暴露秘密的风险引起了安全问题,GitLab出于谨慎考虑,默认不构建外部PR。
有关该问题的更多详细信息,请查看这个GitLab讨论。
✨ 解决方案
如果您不担心秘密泄露,那么LabHub可能适合您!LabHub监听来自GitHub的webhooks以通知新pull请求。如果PR来自分叉的仓库,它将把分支推送到GitLab(对应于PR)以测试构建。
🏃♀️ 实际应用
使用LabHub?请打开PR在此处添加您的项目! 😀
以下项目正在使用LabHub
编译
LabHub需要Rust夜间版。要使用rustup
编译
$ rustup toolchain install nightly
$ rustup default nightly
$ cargo build
如果这是您首选的工具链,请务必使用rustup default stable
切换回stable
。
🎛 配置
LabHub使用LabHub.toml
进行配置。有关详细信息,请参阅src/config.rs。您可以通过设置环境变量LABHUB_TOML
来指定LabHub.toml
的路径。
🚀 部署
设置Webhooks
您需要为任何您希望启用LabHub的仓库设置webhooks。目前,仅需要GitHub的webhooks。要开始,请访问 github.com/<org>/<repo>/settings/hooks
并添加一个新的webhook。
配置webhook以发送PR和push事件。
- 将payload URL路径设置为
/github/events
,这是LabHub期望的GitHub事件路径。 - 创建一个密钥(例如:
cat /dev/urandom | LC_CTYPE=C tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1
)并在webhook配置中设置与LabHub相同的值。 - 确保payload类型为
application/json
。 - 这是您的webhook应该看起来像的样子
创建SSH密钥
您需要一个CI用户,该用户在GitHub和GitLab上都有SSH密钥。在两个网站上创建账户(如果您还没有CI用户),并为LabHub创建一个SSH密钥。
$ ssh-keygen -f labhub-key.ecdsa -t ecdsa -b 521
请妥善保管 labhub-key.ecdsa
,并将 labhub-key.ecdsa.pub
上传到GitHub和GitLab的CI用户。
创建个人访问令牌
在GitHub和GitLab上为您CI用户创建个人访问令牌。通过在 LabHub.toml
中设置 api_token
参数,为GitHub和GitLab提供这些令牌。
GitHub的个人访问令牌
- 访问 https://github.com/settings/tokens
- 点击 "生成新令牌"。
- 为令牌命名,并 启用repo作用域,如下所示。
- 将此令牌保存到您的
LabHub.toml
。
GitLab的个人访问令牌
- 访问 https://gitlab.com/profile/personal_access_tokens
- 为令牌命名,并 启用api作用域,如下所示。
- 将此令牌保存到您的
LabHub.toml
。
使用Helm部署到Kubernetes
此存储库中包含一个Helm图表,这是首选的部署方法。要使用它,您必须首先使用kubectl创建SSH密钥密钥。假设您的SSH私钥是 labhub-key.ecdsa
$ kubectl create secret generic labhub-ssh-keys --from-file=github=labhub-key.ecdsa --from-file=gitlab=labhub-key.ecdsa
如果您选择,可以为GitHub和GitLab使用不同的密钥。
一旦您有了密钥,请从 helm/labhub/ 安装Helm图表。
$ cd helm/labhub/
$ cp values.yaml myvalues.yaml
### Edit myvalues.yaml to your liking ###
$ helm upgrade --install labhub . -f myvalues.yaml
未实现
- 未实现GitLab分支与打开的PR的周期性协调:如果由于任何原因错过webhook,GitLab管道可能无法正确反映PR状态
依赖关系
~36–49MB
~1M SLoC