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
<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.
well done !! :D
RépondreSupprimer