2 个版本
0.9.1 | 2020年11月19日 |
---|---|
0.9.0 | 2020年11月16日 |
#1880 在 开发工具 中
每月 21 次下载
在 gitlab-butler 中使用
38KB
937 行
Gitlab Butler
什么是 gitlab-butler
gitlab-butler
是一个 GitLab 命令行工具,封装了越来越多的 GitLab API。
大多数选项都可以作为命令行参数或通过环境变量提供。
示例使用
使用方法
.env
支持,还加载了特殊的 .private.env
,以便在常见的条目之外允许私有未提交条目
.env
可能包含GITLAB_BUTLER_PROJECT
和GITLAB_BUTLER_API_SERVER
(已提交).private.env
可能包含GITLAB_BUTLER_PRIVATE_TOKEN
(未提交/上级目录)
您也可以按您喜欢的组合使用 dotenv
和 direnv
。
获取私有令牌
可以从 Gitlab 个人资料页面 或使用 ssh
获取私有令牌。
$ ssh [email protected] personal_access_token
remote:
remote: ========================================================================
remote:
remote: Usage: personal_access_token <name> <scope1[,scope2,...]> [ttl_days]
remote:
remote: ========================================================================
remote:
$ ssh [email protected] personal_access_token cli-friendly-token read_repository,read_api 10
Token: 7...ixvzoW...szp
Scopes: read_repository,read_api
Expires: 2020-11-08
使用命令 ssh git@gitlab.com personal_access_token gitlab-butler api
创建具有 api
作用域的令牌,并将其放入 .private.env
文件中,例如
GITLAB_BUTLER_PRIVATE_TOKEN=7...ixvzoW...szp
然后创建一个标准的 .env
文件,以指向正确的服务器和项目,例如
GITLAB_BUTLER_API_SERVER=https://gitlab.com/
GITLAB_BUTLER_PROJECT=naufraghi/gitlab-butler
示例帮助
使用 gitlab-butler install
创建指向 git-lab
的符号链接,允许将其用作 git lab <command>
大多数命令会打印彩色响应,但如果使用-x
/ --execute
选项,则会启动一个子shell,其中包含有关当前命令的一组环境变量。请参见以下列表中的git lab issues list --help
信息。
gitlab-butler-issue-list 0.9.0
List issues
USAGE:
gitlab-butler issue list [OPTIONS]
FLAGS:
-h, --help
Prints help information
-V, --version
Prints version information
OPTIONS:
-x, --execute <execute>
Execute command for each returned issue (in a bash subshell)
The current issue is exported as environment variables:
- `issue_id`: 234
- `issue_title`: Resolve some problem
- `issue_description` (optional): Long description
- `issue_slug`: 234-resolve-some-problem
- `issue_reference`: #234
- `issue_full_reference`: group/project#234
- `issue_web_url`: http://gitlab.com/group/project/issues/234
Example:
- `... issue list -x 'echo ${issue_reference}: ${issue_title}'`
Or to use the fully qualified reference:
- `... issue list -x 'echo ${issue_full_reference}: ${issue_title}'`
-l, --labels <labels>
Filter issues by comma-separated list of label names
Issues must have all labels to be returned.
- `None` lists all issues with no labels. `Any` lists all issues with at least one label.
- `No+Label` (Deprecated) lists all issues with no labels. Predefined names are case-insensitive.
-n, --limit <limit>
[default: 100]
-m, --milestone <milestone>
Filter issues by the milestone title. `None` lists all issues with no milestone.
- `Any` lists all issues that have an assigned milestone.
-p, --project <project>
Project name or id (defaults to CI_PROJECT_PATH) [env: GITLAB_BUTLER_PROJECT=naufraghi/gitlab-butler]
-s, --state <state>
Filter issues by state: all, opened, closed [default: opened]
此功能允许创建复杂的管道,如backport
命令,该命令从当前分支(映射到特定问题)
- 在描述中创建一个带有回引用的新问题
- 创建一个新的本地分支,具有规范化的
<issue>-<title-slug>
名称 - 创建一个新的MR,该MR从当前分支开始,并针对提供的分支
这里使用了just
命令运行器
backport TARGET:
git lab issue get -x "just _backport-issue {{TARGET}}"
_backport-issue TARGET:
git lab issue new "$issue_title ({{TARGET}})" -d "Backport of issue $issue_reference" -x "just _backport-mr {{TARGET}}"
_backport-mr TARGET:
git branch $issue_slug origin/{{TARGET}}
git push origin $issue_slug
git lab mr new "Resolve \"$issue_title\"" -d "Closes $issue_reference" -s $issue_slug -t {{TARGET}}
这里是执行日志
merge-ready
子命令
merge-ready
子命令尝试合并队列中标记的MR,进行变基并等待管道成功完成。
与Marge-bot类似,但旨在在CI内部运行(实际上,gitlab-butler
仍处于alpha阶段,可能会吃掉您的仓库)。
总结:您有一个项目,希望有一个总是绿色的master分支和一个半线性的历史记录,因此如果您的团队足够大,您将陷入争夺首先变基和合并的竞争。一个初始的解决方案可以是让某人成为合并者,TL实际上可以做到这一点,在代码合并前进行第二次审查,但变基/合并工作很繁琐。
这里出现了gitlab-butler
- Alice在功能上工作并创建MR1,并将其分配给Bob
- Bob进行审查,最终将“Merge ready 🐙”标签添加到MR中,并将MR分配给技术领导
- TL进行最终审查,最终添加🐙表情符号
gitlab-butler
触发变基和/或合并操作
merge-ready
CI使用
您可以在while
循环中运行gitlab-butler
,或者直接在CI中运行(您需要导出一些变量,并设置一个计划),如下所示
gitlab-butler:
image: registry.gitlab.com/naufraghi/gitlab-butler:latest
variables:
GIT_STRATEGY: none
script:
- /run/gitlab-butler mr merge-ready
only:
- schedules
- master
当前的实现不使用已批准功能,而只依赖于标签/表情符号约定,因为我在解锁该功能之前开始使用它。
备注
[^1]: 现代代码审查:谷歌的一个案例研究,两次审查似乎是一个好数字
许可
许可以下任一项
- Apache License,版本2.0(LICENSE-APACHE或http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)由您选择。
贡献
除非您明确声明,否则您提交给工作以供包含的任何贡献都应双重许可如上所述,而不附加任何其他条款或条件。
依赖项
~7-20MB
~294K SLoC