mercredi 1 avril 2015

Accéder aux branches de merge des Pull-Request avec Atlassian Stash (git)

Les pull-requests sur Atlassian BitBucket server (Stash) permettant le code review génère des branches habituellement non utilisée.

Pour faire un checkout de ces branches il faut faire les modifications suivante :

Attention cette caractéristique est lié à votre server git et non pas directement à git.


Rechercher dans le fichier .git/config de votre repertoire git local la section suivante :


[remote "origin"]
  url = git@bitbucket.compagny:an/url/to/repository.git
  fetch = +refs/heads/*:refs/remotes/origin/*


Il est possible que vous soyez amener a modifier cette URL pour quelle corresponde aux paramètres de votre projet (dans le cas de BitBucket).

[remote "origin"]
  url = git@bitbucket.compagny:an/url/to/repository.git
  fetch = +refs/heads/*:refs/remotes/origin/*
  fetch = +refs/pull-requests/*:refs/remotes/origin/pull-requests/*

Si vous utilisez un serveur GitLab (et il faut bien sur adapter au reste de l'article)

[remote "origin"]
  url = git@gitlab.compagny:an/url/to/repository.git
  fetch = +refs/heads/*:refs/remotes/origin/*
  fetch = +refs/merge-requests/*:refs/remotes/origin/merge-requests/*


Pour verifier le bon fonctionne, il suffit de mettre à jour votre repos local à l'aide de :

$ git fetch origin --verbose --prune
From bitbucket.compagny:an/url/to/repository
 * [new ref] refs/pull-requests/42/from  -> origin/pull-requests/42/from
 * [new ref] refs/pull-requests/42/merge -> origin/pull-requests/42/merge
 * [new ref] refs/pull-requests/43/from  -> origin/pull-requests/43/from
 * [new ref] refs/pull-requests/43/merge -> origin/pull-requests/43/merge

...


Pour récupérer un Pull-Request particulier, il suffit de faire :

$ git checkout pull-requests/1000/from
Branch pull-requests/42/from set up to track remote branch pull-requests/42/from from origin.
Switched to a new branch 'pull-requests/42/from'



Pour faire la même chose sous jenkins, ce qui permet de vérifier que le merge (qui sera fait lorsque la PR sera validé) build correctement.

Par exemple pour le Pull-Request 248 :

La branche se nomme ainsi : origin/pull-requests/248/merge Dans le Job de jenkins, je suppose que l'on part d'un Job existant qui build une branche classique du projet. il faut alors configurer/modifier les 3 points suivant :

  • GIT/Repositories/Advanced.../Refspec/
    Mettre la valeur: +refs/pull-requests/*:refs/remotes/origin/pull-requests/*
  • GIT/Branches to build: Branch Specifier (blank for 'any')
    Mettre la valeur: refs/heads/pull-requests/248/merge
  • GIT/Additional Behaviours/Branch name
    Mettre la valeur: pull-requests/248/merge
La section SCM du fichier de configuration du Job sera du type :


<scm class="hudson.plugins.git.GitSCM" plugin="git@2.3.4">
     <configVersion>2</configVersion>
     <userRemoteConfigs>
         <hudson.plugins.git.UserRemoteConfig>
             <refspec>+refs/pull-requests/*:refs/remotes/origin/pull-requests/*</refspec>
             <url>ssh://git@bitbucket.compagny:/group/project.git</url>
         </hudson.plugins.git.UserRemoteConfig>
     </userRemoteConfigs>
     <branches>
         <hudson.plugins.git.BranchSpec>
             <name>refs/heads/pull-requests/248/merge</name>
         </hudson.plugins.git.BranchSpec>
     </branches>
     <doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations>
     <browser class="hudson.plugins.git.browser.Stash">
         <url>https://bitbucket.compagny/projects/group/repos/project</url>
     </browser>
     <submoduleCfg class="list" />
     <extensions>
         <hudson.plugins.git.extensions.impl.LocalBranch>
             <localBranch>pull-requests/248/merge</localBranch>
         </hudson.plugins.git.extensions.impl.LocalBranch>
     </extensions>
 </scm>

Cet exemple suppose que vous utiliser un système permettant de créer dynamiquement des jobs Jenkins, il doit être adapter à votre système de build.

1 commentaire: