Gitlab-ci.yml 创建合并请求

Posted

技术标签:

【中文标题】Gitlab-ci.yml 创建合并请求【英文标题】:Gitlab-ci.yml to create merge reqeust 【发布时间】:2020-02-07 20:36:46 【问题描述】:

我在 DEV 分支中运行了以下 gitlab-ci.yml 文件,目标也是 DEV。由于我无法将 TARGET 指向 MASTER,因此不会创建自动 MR。我想知道是否可以在 gitlab-ci 脚本本身中创建合并请求。

dev:
  stage: deploy
  script:
    - url_host=`git remote get-url origin | sed -e "s/https:\/\/gitlab-ci-token:.*@//g"`
    - git remote set-url origin "https://gitlab-ci-token:$CI_TAG_UPLOAD_TOKEN@$url_host"
    - databricks workspace export_dir -o /mynotebooks.
    - git add .
    - git commit -m 'Add notebooks to Repo' -a || true
    - git push origin HEAD:dev
  tags:
    - test

我已经搜索并引用了我的网站,但看不到任何有关以编程方式创建合并请求的注释。

这个想法是各种开发人员正在开发数据砖集群,并且 gitlab 计划定期运行。更改将被推送到 DEV 分支,并将使用合并请求推送到 MASTER 分支。

我想知道这个 MR 创建是否可以自动化。请对 GITLAB 不熟悉。

谢谢。

【问题讨论】:

【参考方案1】:

您可以在 Gitlab 中使用 git push 选项创建 MR。

要创建 MR 以使用 git 将 dev 合并到 master,请运行以下命令

git push origin HEAD:dev -o merge_request.create -o merge_request.target=master 

阅读更多关于 Gitlab 的push options for merge requests。

【讨论】:

感谢 Murli,现在可以从脚本创建 MR。我刚刚添加了另一个参数,merge_when_pipeline_succeeds,所以只有当管道成功时我才会得到 MR【参考方案2】:

实际上有一种更好的可编程方式来创建 MR。

Gitlab 有其官方Gitlab API,您可以访问以创建/更新/删除几乎任何东西。当然,自己做这些 HTTP 请求会很乏味。尝试使用python library for gitlab 做你想做的事。你真的可以让任何东西都可编程!

具体处理MR,可以看this chapter。

【讨论】:

以上是关于Gitlab-ci.yml 创建合并请求的主要内容,如果未能解决你的问题,请参考以下文章

在项目上运行Gitlab-CI以获取两个不同的Docker镜像

如何创建一个工件,以便它可以在 .gitlab-ci.yml 中下载

使用 gitlab-ci.yml 的 Docker 内部的 Docker

从 Jenkins Ci 服务迁移到 gitlab-ci.yml

在 GitLab 中创建标签时查找源分支(使用 gitlab-ci.yml)

为合并请求触发的管道运行应用 GitLab CI/CD 管道更改