web-dev-qa-db-fra.com

Jenkins: Déclenche un pipeline multi-branches sur un changement en amont

Je teste actuellement l'approche du pipeline de Jenkins 2.0 pour voir si cela fonctionne pour l'environnement de construction que j'utilise.

Tout d'abord sur l'environnement lui-même. Il se compose actuellement de plusieurs référentiels SCM. Chaque référentiel contient plusieurs branches pour les différentes étapes du développement et chaque branche est construite avec plusieurs configurations. Toutes les configurations ne s'appliquent pas à tous les référentiels.

Actuellement, chaque référentiel/branche est configuré en tant que Projet Matrix pour les différentes configurations. Chaque projet expose ses résultats de construction sous forme d'artefact et ces artefacts sont utilisés dans les projets en aval.

Les différents référentiels dépendant les uns des autres, une construction réussie sur un travail en amont déclenche certains travaux en aval. Actuellement, tout fonctionne, mais il faut beaucoup de travail pour installer une nouvelle succursale ou modifier le processus de construction, car de nombreux projets doivent être modifiés manuellement.

Maintenant, je voulais essayer les nouveaux pipelines. Mon idée était de créer des projets de pipeline multi-branches et de placer une Jenkinsfile dans le référentiel contenant les instructions pour la construction.

Le principal problème est de faire en sorte que les versions se déclenchent les unes les autres, car, fondamentalement, une construction dans une branche en amont spécifique doit déclencher une branche en aval. Cependant, le projet en amont ne sait pas quelles informations sur les branches en aval doivent être déclenchées. Chaque projet en aval récupère les artefacts de certaines branches en amont et la solution idéale serait que la génération en aval soit déclenchée au cas où la construction en amont qui est la source de l'artefact termine sa construction.

Le problème est que seuls les projets en aval savent vraiment de quels artefacts ils ont besoin. Il est peu probable que les noms de branche correspondent dans la plupart des cas, ce qui rend très difficile le déclenchement des générations à partir du projet en amont.

Actuellement, ceci est résolu en utilisant ReverseBuildTrigger . Mais cette chose cesse de fonctionner dès qu’elle se rapproche d’un pipeline.

Je ne sais vraiment pas comment faire fonctionner cela. Existe-t-il un moyen d’obtenir quelque chose comme ReverseBuildTrigger travaillant dans des scripts de pipeline?

Déclencher également l'intégralité de la construction en aval pour toutes les branches au cas où une seule branche en amont serait modifiée n'est pas une option. Cela créerait beaucoup trop de constructions égales.

20
Nitram

J'essaie actuellement de faire en sorte que cela fonctionne pour notre déploiement ... Le plus proche que j'ai est d'ajouter ce qui suit à Jenkinsfile en aval;

properties([
    pipelineTriggers([
        triggers: [
            [
                $class: 'jenkins.triggers.ReverseBuildTrigger',
                upstreamProjects: "some_project", threshold: hudson.model.Result.SUCCESS
            ]
        ]
    ]),
])

Cela permet au moins à Jenkins de reconnaître que cela devrait se déclencher lorsque 'Un_projet' est construit, c'est-à-dire qu'il apparaît dans la page "Afficher la configuration".

Cependant, jusqu'à présent, les constructions de 'some_project' ne déclenchent toujours pas le projet aval Comme prévu.

Cela étant dit, peut-être aurez-vous plus de chance… .. Faites-moi savoir si cela fonctionne pour vous.

(Quelqu'un d'autre a posé une question similaire Un pipeline multi-branches Jenkins et spécifiant des projets en amont )

9
cscutcher

Si vous utilisez un pipeline déclaratif multi-branches , vous pouvez utiliser:

triggers {
  upstream(upstreamProjects: "some_project/some_branch", threshold: hudson.model.Result.SUCCESS)
}

Si vous souhaitez que les correspondances de branche se produisent entre dépendances, vous pouvez utiliser:

triggers {
  upstream(upstreamProjects: "some_project/" + env.BRANCH_NAME.replaceAll("/", "%2F"), threshold: hudson.model.Result.SUCCESS)
}
30
Japster24

Pipeline Job configuration prend encore en charge de manière native Build Triggers, y compris le déclencheur de construction inverse, Build après la construction d'autres projets. Vous pouvez même spécifier une branche à partir du projet Pipeline Multi-branch.

Malheureusement, le déclenchement inverse n’est pas disponible Pipeline Multi-branch jobs. Le point le plus proche du déclenchement inverse consiste à utiliser Plugin Builds Construits . Mais cela ne vous permet toujours pas de configurer la configuration par branche. 

De plus, générateur d'extraits de code précise:

Les variables suivantes sont actuellement indisponibles dans un script Pipeline:

NODE_LABELS ESPACE DE TRAVAIL Variables spécifiques à SCM telles que SVN_REVISION

ps. Peut-être que le seul moyen serait de passer de en amont à en aval.

2
luka5z