如何在Gitlab中成功完成管道的最后创建合并请求?

时间:2018-06-29 15:03:15

标签: git gitlab gitlab-ci-runner

我对gitlab和gitlab CI还是很陌生,我已经准备好了可以成功完成的管道。 我的master和development分支受到保护,因此需要合并请求,以便组中的另一个开发人员可以在合并之前检查代码和注释。 我想知道是否有可能在此管道的末尾生成此合并请求。 gitlab存储库中是否有此设置,还是必须创建脚本来实现?
旁注:
在发布之前,我遇到了this section of the gitlab docs
我在Ubuntu 18.04上使用gitlab-runner 11.0.0

3 个答案:

答案 0 :(得分:2)

简短回答:当然可以。 GitLab具有出色的API(including creating an MR)。但是我认为走那条路是不好的形式。您应该按照设计使用GitLab。您开始合并请求太晚了。在开始任何工作之前将其启动,并且合并请求将保持打开分支的整个工期

详细答案: 这是理想的GitLab工作流程:

  1. 有人针对存储库创建了一个问题也许是功能请求,也许是实际问题,无论是什么-有人想要更改某些东西,所以这是一个“问题”
  2. 开发者打开问题,然后点击创建合并请求
    • 生成一个合并请求(MR),一个匹配的分支,并将其与问题相关联
  3. 开发人员处理分支,不断推动更改
  4. 开发人员可以通过,并且在准备好客户预览工作和/或其他开发人员进行代码审查时,在该合并请求页面上单击“ 解决WIP ”。
  5. 从这里开始,让审阅者在完成审阅后单击 MERGE (合并),甚至更好,在存储库设置中打开 APPROVALS 设置或您想要评论的人群。
  6. 确保合并按钮旁边的合并按钮(出于完整性考虑)删除源分支,合并的代码将自动 关闭问题-并将所有3个元素链接在一起。

从根本上来说,这是从GitHub工作方式(我来自那里)开始的,而您没有拥有来告诉人们您在做什么。

    在工作完成并且您希望合并为主文件时,在 GitHub 上创建
  • 拉取请求
  • GitLab 上的
  • 合并请求是在工作开始时创建的,并且您想告诉全世界您即将开始工作在功能上。这样一来,人们就可以在不需要时快速关闭计算机,或者避免多个开发人员重复工作。

编辑:听起来您有兴趣利用API。实际上有一个名为'python-gitlab'的python程序包可以正常工作http://python-gitlab.readthedocs.io/en/stable/gl_objects/mrs.html

package com.example.android.dynamicui;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.AppCompatButton;
import android.view.Gravity;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

private int mCount=0;
float den = getResources().getDisplayMetrics().density;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //Linear Layout
    LinearLayout mLayout = new LinearLayout(this);
    mLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT));
    mLayout.setOrientation(LinearLayout.VERTICAL);
    mLayout.setGravity(Gravity.CENTER);

    //Button
    AppCompatButton mButton = new AppCompatButton(this);
    mButton.setText("Click me!");
    LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    buttonParams.setMargins(0,(int)(15*den + 0.5f),0,0);
    mButton.setLayoutParams(buttonParams);
    mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mCount++;
            Toast.makeText(getBaseContext(), "You pressed button for "+mCount+" times!" , Toast.LENGTH_SHORT ).show();
        }
    });

    //Adding button to Linear Layout
    mLayout.addView(mButton,buttonParams);
    setContentView(mLayout);
}
}

这当然是一个示例,您必须根据实际需要对其进行调整。

答案 1 :(得分:1)

另一种方法可以实现:

  • 不使用GitLab API
  • 获取由管道检出的代码表示的补丁
  • 自GitLab 11.5起(2018年11月)使用电子邮件(!)
  

Open a merge request with a patch via email

     

GitLab很长时间以来一直支持通过电子邮件打开合并请求,但是在发送电子邮件之前,分支必须已经存在于服务器上。现在,您可以通过附加一个或多个补丁文件(.patch)来仅通过电子邮件打开合并请求。

     

补丁文件是在系统之间共享和传输更改的标准。在以后的GitLab版本中,我们将基于distributed merge requests的基础,该基础将允许GitLab实例与其他Git托管工具之间的合并请求。

请参见documentationissue

答案 2 :(得分:0)

为了满足我的简单需求,我仅在管道中添加了最后一个阶段,该阶段实际上执行了一个改编自this post的bash脚本。