J'ai un référentiel Git avec le code que je voudrais construire mais je ne suis pas "autorisé" à ajouter un Jenkinsfile
dans sa racine (c'est un paquet Debian, donc je ne peux pas ajouter de fichiers dans la source amont). Existe-t-il un moyen de stocker la Jenkinsfile
dans un référentiel et de le générer à partir d'un autre référentiel? Étant donné que mon référentiel de code doit créer plusieurs branches (une pour chaque version de Debian), il devrait s'agir d'un pipeline multibranch. Les validations dans les référentiels code ou Jenkinsfile
devraient déclencher une construction.
Complexité des bonus: J'ai plusieurs référentiels de code/packaging comme celui-ci et j'aimerais réutiliser la même Jenkinsfile
pour chacun d'entre eux. Ainsi, il devrait en quelque sorte extraire dynamiquement l’URL Git à utiliser. Les branches à construire portent les mêmes noms dans tous les référentiels.
La réponse courte est: vous ne pouvez pas faire cela avec un multibranch pipeline
. Les pipelines multibranches sont uniquement conçus (du moins pour le moment) pour exécuter un pipeline spécifique dans le style Pipeline script from SCM
, avec une variable Jenkinsfile
fixe à la racine du projet.
Vous pouvez cependant utiliser le plugin Multi-Branch Project conçu pour les projets multibranches freestyle. Tout d’abord, vous devez définir votre multibranch freestyle configuration
comme vous le feriez avec un multibranch pipeline configuration
. Sélectionnez ce nouvel élément comme indiqué ci-dessous:
Ce type de configuration se comportera exactement comme le type multibranch pipeline
, c’est-à-dire qu’il vous créera un dossier avec le nom de votre configuration et un sous-projet pour chaque branche automatiquement détectée.
La mise en œuvre devrait alors être un jeu d'enfant:
SCM
dans la configuration multibranchbuild-job
) et lui donner les informations de votre référentiel, c'est-à-dire l'URL Git et la branche actuelle. (vous pouvez utiliser les variables prédéfinies $GIT_URL
et $GIT_BRANCH
à cette fin)build-job
, définissez simplement un pipeline en ligne ou un script de pipeline extrait de SCM. Dans ce script, effectuez une extraction de SCM et poursuivez les étapes à créer. Exemple de contenu du pipeline build-job
:.
node() {
stage 'Checkout'
checkout scm: [$class: 'GitSCM', branches: [[name: '*/${GIT_BRANCH}']], userRemoteConfigs: [[url: '${GIT_URL}']]]
stage 'Build'
// Build steps...
}
Bien sûr, si vos différents projets multibranches doivent être traités un peu différemment, vous pouvez également utiliser des projets intermédiaires (disons build-project-A
, build-project-B
, ...) qui à leur tour appellent le pipeline générique build-job
.
L'inconvénient majeur de cette solution est qu'un seul travail sera responsable de toutes vos versions, ce qui rendra le débogage plus difficile. Vos projets multibranches passeraient toujours au bleu/rouge en cas de succès/erreur, mais vous devrez revenir à build-job
pour trouver le véritable problème de votre construction.
Dans mon cas, j’ai un escenario avec un projet gitlab basé sur gradle qui a des dépendances sur un autre pré-projet gitlab basé sur gradle également (même tableau de bord, mais différents commits, différents développeurs).
J'ai ajouté les lignes suivantes dans mon Jenkinsfile (celui qui dépend)
stage('Build') {
steps {
git branch: 'dev', credentialsId: 'jenkins-generated-ssh-key', url: '[email protected]:root/coreProject.git'
sh './gradlew clean'
}
}
Remarque: soyez attentif à l'ordre des phrases ... Si vous avez des doutes sur la création de jenkins-généré-ssh-key, merci de me demander
J'ai la version 2.121 et vous pouvez le faire de deux manières:
Voie 1
Dans la configuration du pipeline multibranches> Configuration de la construction> Mode> Sélectionnez "Script personnalisé" et saisissez "Fichier de marqueur" sous le nom du fichier que vous utiliserez pour identifier les branches pour lesquelles vous souhaitez créer.
Ensuite, sous Pipeline> Définition, sélectionnez "Script Pipeline à partir de SCM" et entrez les informations "SCM" pour savoir comment trouver le "fichier Jenkins" contenant le script que vous souhaitez exécuter. Cela peut se trouver dans le même référentiel que celui dans lequel vous trouvez des branches pour créer les tâches (si vous insérez les mêmes informations dans le référentiel GitHub), mais je ne trouve pas le moyen d'indiquer que vous utilisez simplement la même branche pour le fichier.
Way 2
Comme ci-dessus, dans la configuration du pipeline multibranches> Configuration de la construction> Mode> Sélectionnez "Script personnalisé" et saisissez "Fichier de marqueur" sous le nom du fichier que vous utiliserez pour identifier les branches pour lesquelles vous souhaitez créer.
Ensuite, sous Pipeline> Définition, sélectionnez "Script Pipeline" et mettez un peu de Groovy dans la zone de texte pour charger ce que vous voulez ou exécuter un script déjà chargé dans l’espace de travail.