Gitlab 中是不是存在技术可能性,即在合并期间存储库内容的自定义改编是 Dome?
Posted
技术标签:
【中文标题】Gitlab 中是不是存在技术可能性,即在合并期间存储库内容的自定义改编是 Dome?【英文标题】:Is there the technical possibility in Gitlab that a custom adaption of the repository content is Dome during the merge?Gitlab 中是否存在技术可能性,即在合并期间存储库内容的自定义改编是 Dome? 【发布时间】:2022-01-18 22:33:06 【问题描述】:是否有可能我可以添加例如在 gitlab 的合并步骤中执行的脚本可以更改存储库的某些内容?
GitLab 完全支持的标准工作流程
-
在 GitLab 中创建合并请求
将其添加到要合并的合并列车中
如果未检测到冲突,Gitlab 会创建合并提交(临时)
管道运行以执行一些集成步骤
如果管道执行成功,则推送合并提交
我还需要什么:
我想在第 3 步之后执行一个脚本,这可能会再次更改存储库的某些文件。这些更改应集成到合并提交中。 类似于执行一个更干净的脚本,该脚本在 git 合并之后在合并提交完成之前执行(这在 Gitlab 的远程端作为合并过程的一部分)。
有人对技术解决方案有想法吗? 我会很感激的
【问题讨论】:
您能否用图表扩展您的问题 - 这将有助于理解您的问题 【参考方案1】:这是可能的,但并不简单。您正在构建的基本上是一个机器人,它必须假设某种个性才能修改代码、提交并将其推送到存储库(理想情况下 - 通过 MR)。
我们将这种方法用于以下情况:
VERSION 文件的自动碰撞 根据存储库 A 中的更改自动执行存储库 B 中的合并请求 等解决方案
该解决方案可能比您实际需要的更通用,因此您可能需要简化,但效果很好。
你需要:
-
一个单独的存储库,您将在其中存储自动化,我们称之为机器人存储库
在目标仓库中创建的访问令牌,具有
api, write_repository
范围,我们称之为AUTO_MR_TOKEN
在 bot repo 中创建的秘密,其内容为 AUTO_MR_TOKEN
在机器人代码库中,您将创建一个 gitlab-ci.yml
,其中包含以下步骤:
add_mr:
script:
# SETUP THE ENVIRONMENT HERE
- TARGET_REPO="https://oauth2:$AUTO_MR_TOKEN@$CI_SERVER_HOST/$TARGET_PROJECT.git"
# CLONE THE TARGET REPO
- git clone -b $TARGET_BRANCH --single-branch $TARGET_REPO
- git config user.email "$GIT_USER_EMAIL:-$GITLAB_USER_EMAIL"
- git config user.name "$GIT_USER_NAME:-$GITLAB_USER_NAME"
# MAKE CHANGES
- echo "DO YOUR MAGIC HERE"
- |
git commit -m "commit from bot"
git push origin master $TARGET_BRANCH \
-o merge_request.create \
-o merge_request.target=master
然后,在目标存储库中 - 您将根据您的工作流程,在管道的适当步骤中触发此机器人作业。
【讨论】:
非常感谢您的详细回答。我现在不能完全确定这是否解决了我的问题,或者可能不完全理解它的技术。那么这个描述的操作是否修改了 Gitlab 中已经完成的合并提交? 所以我已经通过 Gitlab 在目标仓库中创建了合并请求。然后在批准后,我点击“添加到合并列车。然后目标 repo 的管道开始(基于尚未推送回 Master 的合并结果)。然后我的管道的第一步可以是触发我的机器人 repo 的操作,这将修改 gitlab 合并提交(gitlab 尚未推送)。然后我的目标回购管道应该继续进行一些集成测试。 如果这些通过,则应推送合并提交并关闭合并请求。如果管道失败,则不应推送 gitlab 合并提交,并且我的功能分支仍应仅具有在单击“添加到合并训练”之前存在的列表提交 这实际上取决于您如何将其集成到您的管道中。理论上 - 你可以简单地获取令牌并克隆 -> 提交 -> 推送到 repo,即使没有 MR。您可以将此类脚本添加到管道的几乎任何现有步骤中。 我认为如果 GitLab 使用“基于合并结果运行管道”功能,则此合并尚未提交,因此另一个克隆此分支的 git bot 在技术上无法访问(因为此合并结果是不致力于分支)以上是关于Gitlab 中是不是存在技术可能性,即在合并期间存储库内容的自定义改编是 Dome?的主要内容,如果未能解决你的问题,请参考以下文章