【发布时间】:2021-12-19 16:26:41
【问题描述】:
我正在尝试编写一个脚本来合并打开的并符合合并请求标准(通过设置实现)的合并请求。
所以我唯一想做的是,我想编写一个 CI yaml 文件,我将安排它每 30 分钟左右运行一次,以检查打开的合并请求,如果可以合并则合并它们。
困惑一:
我可以通过编写多个 curl 请求来实现这一点,但我不确定如何在执行后一个接一个地使用它们。
所以,要检查打开的合并请求,我需要一个组的项目 ID,以获得我有一个 curl 命令,它将为我提供项目 ID,我将它们保存在一个文件中 projectid.txt .
curl -s --location --request GET --header 'PRIVATE-TOKEN:<PRIVATE_TOKEN>' '$CI_API_V4_URL/groups/'$GROUPID'/projects' | sed 's/,/\n/g' | grep -w "id" | awk -F ':' '{print $2}' | sed -s 's/{"id"//g'
现在,一旦我有了所有的项目 ID, 我想将它们流入另一个 curl 命令,即:
curl -s --location --request GET '$CI_API_V4_URL/projects/3/merge_requests?state=opened' --header 'PRIVATE-TOKEN:<PRIVATE_TOKEN>' | sed 's/,/\n/g' | grep -w "iid" | awk -F ':' '{print $2}'
但是如果您看到上面的 curl 请求,我将手动提供3 以获得所需的输出。
但我希望这个 curl 命令自动获取 projectid.txt 每一行中存在的每个 projectid 并将其执行到第二个 curl 命令。这样我想要一个文件,它将明智地显示打开的合并请求项目。
一旦我得到所有这些信息,我想合并开放的合并请求,这些请求有效并且准备好合并(GitLab 负责检查它们是否准备好合并)
所以,我现在唯一需要的是,在另一个 curl 命令中输入 projectid 和 merge request id,这是一个 PUT 请求。
curl --location --request PUT '$CI_API_V4_URL/projects/3/merge_requests/26/merge' \
--header 'PRIVATE-TOKEN: <PRIVATE_TOKEN>'
来源:https://docs.gitlab.com/ee/api/merge_requests.html#accept-mr
如果您看到上述合并请求,我需要提供项目明智的合并请求。我对如何实现自动化有点困惑。
另外,你能告诉我这是否是利用我的gitlab-ci.yml 文件中的这些许多 curl 请求来自动执行此操作的正确方法吗?还有其他方法可以通过Python 或shell 脚本来实现吗?
另外,有没有什么简单的方法可以在 REST API 文档的帮助下编写 python 脚本?我能够生成 curl 请求以使用 REST API,但不确定如何使用 Python 来实现。
欢迎任何帮助或建议。
到目前为止,我的 gitlab-ci.yml 文件看起来像这样,因为在此之后我无法思考太多:
variables:
GROUPID: 6
stages:
- cleanup
cleanup-code-job:
stage: cleanup
tags:
- build
script:
- echo "$GROUPID"
##Below curl command can be used to identify projects in group
- curl -s --location --request GET --header 'PRIVATE-TOKEN:<PRIVATE_TOKEN>' '$CI_API_V4_URL/groups/'$GROUPID'/projects' | sed 's/,/\n/g' | grep -w "id" | awk -F ':' '{print $2}' | sed -s 's/{"id"//g' > projects.txt
- cat projects.txt
谢谢
【问题讨论】:
-
你看过marge-bot吗?
-
没有@Phillip-ZyanKlee-Stockmann!让我检查一下,你能不能也给我一些关于它的背景信息。?
-
Marge 可以 - 除了实现
not rocket science rule of software development等其他不错的功能之外 - 在 MR 为绿色并经过审核时合并它们。 github.com/smarkets/marge-bot -
阅读完文档后,看起来我需要创建一个占用座位的用户。 :(
-
为了玛吉?是的,这是真的。如果您自己编写脚本,答案将取决于您是否被允许使用自己的用户凭据运行此脚本或需要分离权限。 (老实说,我更喜欢。)
标签: python shell rest gitlab gitlab-ci