web-dev-qa-db-fra.com

Comment créer une demande de fusion GitLab via une ligne de commande

Nous travaillons sur l’intégration de GitLab (Enterprise Edition) dans nos outils, mais l’une des choses qui figure toujours dans notre liste de souhaits est de créer une demande de fusion dans GitLab via une ligne de commande (ou un fichier batch ou similaire, par exemple). Nous aimerions intégrer cela dans notre outillage. Rechercher ici et sur le Web m'amène à penser que cela n'est pas possible avec GitLab en natif, mais que nous avons besoin d'outils supplémentaires pour cela. 

Ai-je raison? Et quel type d'outils voudrais-je utiliser pour cela?

20
patrick

Ce n'est pas supporté nativement, mais ce n'est pas difficile à lancer ensemble. L'API gitlab prend en charge l'ouverture de MR: https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/merge_requests.md#create-mr

7
jaxxstorm

Vous pouvez utiliser l'utilitaire suivant. 

Divulgation: Je l'ai développé. 

https://github.com/vishwanatharondekar/gitlab-cli

Il est développé en javascript. Vous pouvez créer une demande de fusion en utilisant ceci. 

Certaines des fonctionnalités dont il dispose sont.

  1. La branche de base est facultative. Si la branche de base n'est pas fournie. La branche actuelle est utilisée comme branche de base.
  2. la branche cible est facultative. Si la branche cible n'est pas fournie, la branche par défaut du référentiel dans gitlab sera utilisée.
  3. La page de demande de tirage créée s'ouvrira automatiquement après une création réussie.
  4. Si le titre n'est pas pris en charge avec la valeur de l'option -m. Il sera pris de l'éditeur en place ouvert. La première ligne est prise comme titre.
  5. Dans l'éditeur ouvert, la troisième ligne prend comme description.
  6. Une liste d'étiquettes séparées par des virgules peut être fournie avec son option.
  7. Prend en charge CI.
  8. Des configurations spécifiques au référentiel peuvent être données.
  9. l'option de squash est disponible. 
  10. l'option de suppression de la branche source est disponible. 
4
Vishwanath

Malheureusement, GitLab ne supporte malheureusement pas cela, mais je l’ai récemment vu sur leur issue tracker . Il semble que l'on puisse s'attendre à un "outil natif" dans les mois à venir.

GitLab a tweeté à propos de numa08/git-gitlab il y a quelque temps, alors je suppose que cela vaudrait la peine d'essayer.

2
user6365161

Dans notre script de construction, nous affichons simplement le navigateur avec l'URL correcte et permettons au développeur d'écrire ses commentaires sous la forme, cliquez sur Enregistrer pour créer la demande de fusion. Vous obtenez cette URL avec les paramètres corrects en créant une demande de fusion manuellement et en copiant l'URL du formulaire. 

#!/bin/bash
set -e
set -o pipefail

BRANCH=${2}

....

git Push -f Origin-gitlab $BRANCH
open "https://gitlab.com/**username**/**project-name**/merge_requests/new?merge_request%5Bsource_branch%5D=$BRANCH&merge_request%5Bsource_project_id%5D=99999&merge_request%5Btarget_branch%5D=master&merge_request%5Btarget_project_id%5D=99999"
1
David Dehghan

J'utilise https://github.com/mdsb100/cli-gitlab

Je crée le MR depuis l'intérieur d'un conteneur gitlab CI docker basé sur Alpine Linux, aussi j'inclue la commande install dans before-script (qui pourrait également être inclus dans votre image). Toutes les commandes du fichier .gitlab-ci.yml ci-dessous sont également pertinentes pour une utilisation normale en ligne de commande (tant que le logiciel cli-gitlab npm est installé).

variables:
    TARGET_BRANCH: 'live'
    GITLAB_URL: 'https://your.gitlab.net'
    GITLAB_TOKEN: $PRIVATE_TOKEN #created in user profile & added in project settings
before-script:
    -apk update && apk add nodejs && npm install cli-gitlab -g
script:
    - gitlab url $GITLAB_URL && gitlab token $GITLAB_TOKEN
    - 'echo "gitlab addMergeRequest $CI_PROJECT_ID $CI_COMMIT_REF_NAME \"$TARGET_BRANCH\" 13 `date +%Y%m%d%H%M%S`"'
    - 'gitlab addMergeRequest $CI_PROJECT_ID $CI_COMMIT_REF_NAME "$TARGET_BRANCH" 13 `date +%Y%m%d%H%M%S` 2> ./mr.json'
    - cat ./mr.json

Cela fera écho vrai si la demande de fusion existe déjà, et fera écho le résultat json du nouveau MR s'il réussit à en créer un (enregistrement également dans un fichier mr.json).

0
gotjosh