Intégrer Gogs à Jenkins

Gogs (Go Git Service) est une solution Git auto-hébergée codée en Go. Jenkins est un outil d’intégration continue programmé en Java. Ces deux projets à code source ouvert sont tous deux hébergés sur GitHub. Lorsque que combiné ensemble, ils permettent presque un cycle de développement logiciel complet.

Le type de projet à utiliser dans Jenkins est le Multibranch Pipeline car il est le mieux adapté à Git. C’est pourquoi que dans la section Branch Sources lorsque l’on clique sur Add source on doit choisir Git. Vous devez entrer le Project Repository, pour vous simplifier la tâche vous pouvez utiliser le bouton Copy de Gogs. Dans la section Behaviors, appuyez sur le bouton Add et choisissez l’option Configure Repository Browser. Dans la liste de Repository browser, il faut choisir gogs et entrer le URL de la page du projet. Cela fera en sorte qu’à plusieurs places dans Jenkins des liens vers Gogs seront ajoutés.

Liens vers Gogs
Le SHA1 sera un lien vers la soumission dans Gogs

Ceci conclut la première étape. La seconde consiste à pouvoir démarrer des tâches sur Jenkins suite à une soumission. Avant de quitter la page de configuration du projet, dans la section Scan Multibranch Pipeline Triggers on peut cocher l’option Periodically if not otherwise run. Cela va permettre une vérification du dépôt à tous les jours. C’est une protection au cas où Jenkins ou Gogs serait incapable d’effectuer la prochaine étape.

Dans Gogs il faut maintenant choisir votre dépôt et aller dans les Settings. Par la suite, on va dans la section Webhooks, on clique sur Add Webhook et on choisit Gogs.
Entrez ces paramètres:

  • Payload URL: http://jenkinsserver.com/git/notifyCommit?url=http://gogsserver.com/Org/Project.git
    • Org/Project.git = nom du dépôt utilisé dans Jenkins (sensible à la case)
  • Content Type: application/x-www-form-urlencoded
  • When should this webhook be triggered: Let me choose what I need.
  • Cocher les options suivantes:
    • Create
    • Delete
    • Push
  • Active doit être cocher

Pour terminer, appuyer sur le bouton Add Webhook.

Avec cette configuration les branches pourront être ajoutées et supprimées automatiquement dans Jenkins. Si vous avez un fichier Jenkinsfile inclus dans votre projet, les tâches ajoutées à celui-ci pourront être effectuées à chaque soumission. Malheureusement les requêtes de tirage (pull requests) ne fonctionnent pas.

Si vous avez besoin d’aide sur le plugin Git de Jenkins vous pouvez consulter cette page web.

Utiliser Gogs comme un service Windows

Dans mon dernier article, j’avais expliqué comment démarrer MiNET comme un service Windows. On avait la chance que la fonctionnalité était intégrée à l’application. Par contre, ce n’est pas toujours le cas.

Cette fois-ci c’est l’application Gogs que j’aimerais utiliser comme service Windows. Gogs (Go Git Service) est une solution Git auto-hébergée codée en Go. Ce projet à code source ouvert hébergé sur GitHub a beaucoup de qualité, la plus grande étant sans doute sa facilité d’installation. Maintenant, il est temps de parler de l’un de ses défauts: il ne peut pas être installé nativement comme service Windows.

La documentation de Gogs nous dirige vers l’application NSSM pour palier à ce problème. NSSM (Non-Sucking Service Manager) se vante de ne pas être médiocre comme les autres outils de ce genre. L’application possède même une interface graphique pour installer, éditer ou supprimer un service créer à partir de NSSM. Par contre, dans cet article, c’est plutôt des lignes de commande que nous utiliserons.

En premier, il faut que le fichier app.ini de Gogs soit modifié pour que le paramètre RUN_USER porte le nom du PC. Pour connaitre le nom, vous pouvez utiliser la commande suivante:

echo %COMPUTERNAME%

Le fichier ini doit être modifié comme ceci:

RUN_USER = NOMDUPC$

Le signe de dollar à la fin du nom est important.

En second lieu, il faut s’assurer que NSSM a été installé dans votre %PATH%. Par exemple, le fichier nssm.exe peut être copié dans le dossier C:\WINDOWS\system32.

Ensuite, on ouvre une fenêtre de terminal et on tape toutes ces commandes:

set gogspath=c:\gogs
set escapepath=^%PATH^%
nssm install gogs "%gogspath%\gogs.exe"
nssm set gogs AppDirectory "%gogspath%"
nssm set gogs AppParameters "web"
nssm set gogs DisplayName "Gogs - Go Git Service"
nssm set gogs Description "A painless self-hosted Git service."
nssm set gogs Start SERVICE_DELAYED_AUTO_START
nssm set gogs AppStdout "%gogspath%\gogs.log"
nssm set gogs AppStderr "%gogspath%\gogs.log"
nssm set gogs AppRotateFiles 1
nssm set gogs AppRotateBytes 1000000
nssm set gogs AppEnvironmentExtra "PATH=%escapepath%;%gogspath%;C:\Program Files\Git\bin"
nssm start gogs

Il est important de changer la ligne 1 pour y inscrire le chemin vers l’application Gogs. La ligne 13 doit aussi être changée si Git n’est pas dans le %PATH%. La dernière ligne va démarrer le service, donc ouvrez un navigateur web et testez que tout fonctionne.

Si vous désirez supprimer le service, c’est cette commande qu’il faut utiliser:

nssm remove gogs

Pour éditer un service déjà installé avec l’interface on utilise cette commande:

nssm edit gogs

NSSM Details
Édition du service Gogs à l’aide de NSSM

En terminant, je veux vous parler de Gitea. Il s’agit d’un fork de Gogs qui semble avoir le vent dans les voiles. Pour l’instant, je préfère encore demeurer avec Gogs, mais je garde un œil attentif sur ce projet.