I'm very new to gitlab and gitlab CI and I have put a pipeline in place that is successfully completing.
My master and development branches are protected so a merge request is required so that another dev in the group can review the code and comment before merging.
I was wondering if it is possible to generate this merge request at the end of this pipeline. Is there a setting for this in the gitlab repository or do I have to create a script to achieve this?
Side note :
Just before posting this I came across this section of the gitlab docs
I'm using gitlab-runner 11.0.0 on ubuntu 18.04
Short Answer: Sure - anything's possible. GitLab has a great API (including creating an MR). But I think going that route is bad form. You should utilize GitLab as it's designed. You're starting your Merge Request too late. Start it before you begin any work and your Merge Request will remain open the entire duration of your branch.
Long Answer: This is the ideal GitLab workflow:
This is fundamentally backward from the way GitHub works (which I came from) where you don't have to tell people what you're working on.
EDIT: It sounds like you're interested in leveraging the API. There's a python package called 'python-gitlab' actually that works decently http://python-gitlab.readthedocs.io/en/stable/gl_objects/mrs.html
import gitlab
import os
origin = "https://gitlab.example.com"
# Private token is set as an env var
gl = gitlab.Gitlab(origin, private_token, api_version='4')
gl.auth()
def create_merge_request(origin, private_token):
mr = project.mergerequests.create({'source_branch': 'cool_feature',
'target_branch': 'master',
'title': 'merge cool feature',
'labels': ['label1', 'label2']})
mr.assignee_id = gl.users.get(2).id # Assign it to coworker
def lookup_last_pipeline(origin, private_token):
current_pipeline_id = os.environ['CI_PIPELINE_ID']
pipelines = gl.projects.get(os.environ['CI_PROJECT_ID']).pipelines.list()
for pipeline in pipelines:
if pipeline.status == 'success' and pipeline.id == current_pipeline_id:
create_merge_request()
This is of course an example, you'll have to adapt it to your precise needs.