Jenkins CI: comment déclencher des builds sur SVN commit
Quels plugins et fonctionnalités de plugin dois-je définir pour que mon travail Jenkins déclenche une construction à tout moment le code est validé dans un projet SVN?
J'ai installé à la fois le plugin SVN standard et le plugin SVN tagging, mais je ne vois aucune nouvelle fonctionnalité permettant la configuration du déclencheur.
4 réponses
Il y a deux façons de procéder:
Je recommande la première option initialement, en raison de sa facilité de mise en œuvre. Une fois que vous avez mûri dans vos processus de construction, passez à la seconde.
Interrogez le référentiel pour voir si des modifications ont eu lieu. Cela peut "ignorer" un commit si deux commits arrivent dans le même intervalle d'interrogation. Description de la façon de le faire ici , notez la quatrième capture d'écran où vous configurez au travail un "déclencheur de construction" basé sur l'interrogation du référentiel (avec une configuration de type crontab).
Configurez votre référentiel pour avoir un hook post-commit qui avertit Jenkins qu'une construction doit démarrer. Description de la façon de le faire ici, dans la section "post-commit crochets"
La fonctionnalité de balise SVN ne fait pas partie de l'interrogation, elle fait partie de la promotion de la "tête" actuelle du code source en une balise, pour capturer une construction. Cela vous permet de vous référer à Jenkins buid # 32 comme SVN tag / tags / build-32 (ou quelque chose de similaire).
J'ai fait un outil en utilisant Python avec un peu de bash pour déclencher une construction Jenkins. Fondamentalement, vous devez collecter ces deux valeurs de post-commit, lorsqu'un commit frappe le serveur SVN:
REPOS="$1"
REV="$2"
Ensuite, vous utilisez "svnlook dirs-changed $1-r $ 2" pour obtenir le chemin qui vient d'être validé. Ensuite, à partir de cela, vous pouvez vérifier quel référentiel vous voulez construire. Imaginez que vous avez des centaines de milliers de projets. Vous ne pouvez pas vérifier tout le dépôt, non?
Vous pouvez consulter mon script à partir de GitHub .
Vous n'avez besoin que D'un seul plugin qui est le plugin Subversion.
, Alors tout simplement, aller dans Jenkins → job_name → Construire un Déclencheur section → (I) déclencher la construction à distance (c'est-à-dire à partir de scripts) Jeton d'authentification: Token_name
Allez dans le répertoire hooks du serveur SVN, puis après avoir déclenché les commandes ci-dessous:
cp post-commit.tmpl post-commit
chmod 777 post-commit
chown -R www-data:www-data post-commit
-
vi post-commit
Remarque:, Toutes les lignes doivent être commentées ajouter le en dessous de la ligne enfin
Syntaxe (pour les utilisateurs de Linux):
/usr/bin/curl http://username:API_token@localhost:8081/job/job_name/build?token=Token_name
Syntaxe (pour L'utilisateur Windows):
C:/curl_for_win/curl http://username:API_token@localhost:8081/job/job_name/build?token=Token_name
Vous pouvez utiliser un crochet post-commit.
Placez le script hook post-commit dans le dossier hooks
, Créez un wget_folder
dans votre lecteur C:\ et placez le fichier wget.exe
dans ce dossier.
Ajoutez le code suivant dans le fichier appelé post-commit.bat
SET REPOS=%1
SET REV=%2
FOR /f "tokens=*" %%a IN (
'svnlook uuid %REPOS%'
) DO (
SET UUID=%%a
)
FOR /f "tokens=*" %%b IN (
'svnlook changed --revision %REV% %REPOS%'
) DO (
SET POST=%%b
)
echo %REPOS% ----- 1>&2
echo %REV% -- 1>&2
echo %UUID% --1>&2
echo %POST% --1>&2
C:\wget_folder\wget ^
--header="Content-Type:text/plain" ^
--post-data="%POST%" ^
--output-document="-" ^
--timeout=2 ^
http://localhost:9090/job/Test/build/%UUID%/notifyCommit?rev=%REV%
Où Test = Nom du travail
echo
est utilisé pour déterminer la valeur et vous pouvez également ajouter exit 2
à la fin pour connaître le problème et si le post-commit hook script est en cours d'exécution ou non.