Jenkins: déclencher un pipeline à branches multiples en cas de changement en amont

je teste actuellement L'approche pipeline de Jenkins 2.0 pour voir si elle fonctionne pour l'environnement de construction que j'utilise.

tout d'abord sur l'environnement lui-même. Il se compose actuellement de plusieurs dépôts SCM. Chaque dépôt 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 à chaque dépôt.

actuellement chaque dépôt/branche est configuré comme un Projet Matrix pour les différentes configurations. Chaque projet expose ses résultats de construction comme un artéfact et ces artéfacts sont utilisés dans les projets en aval.

les différents dépôts dépendent les uns des autres, de sorte qu'une construction réussie sur un travail en amont déclenche des emplois spécifiques en aval. Actuellement tout cela fonctionne, mais la quantité de travail nécessaire pour configurer une nouvelle branche ou pour modifier le processus de construction est énorme, car de nombreux projets différents doivent être modifiés manuellement.

maintenant je voulais essayer les nouveaux pipelines. Mon idée était de créer des projets de pipeline à plusieurs branches et de placer un Jenkinsfile à l'intérieur du référentiel contenant les instructions pour la construction.

le problème principal est de faire en sorte que les constructions se déclenchent mutuellement, parce qu'en gros une compilation dans une branche amont spécifique, doit déclencher une branche en aval. Toutefois, le projet en amont ne connaît pas l'information dont les branches en aval ont besoin pour être déclenchées. Chacun le projet en aval récupère les artefacts de certaines branches en amont et la solution idéale serait que la construction 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, c'est que seuls les projets situés en aval savent vraiment de quels artefacts ils ont besoin. Il est peu probable que les noms des branches correspondent dans la plupart des cas et cela rend très difficile le déclenchement des constructions à partir du projet en amont.

Actuellement, c'est résolu à l'aide du ReverseBuildTrigger. Mais cette chose cesse de fonctionner dès qu'elle s'approche d'un pipeline.

Je ne sais vraiment pas comment faire pour que ça marche. Est-il possible de recevoir quelque chose comme ReverseBuildTrigger travailler dans des scripts de pipeline?

également déclencher la construction entière en aval pour toutes les branches dans le cas où une branche unique en amont est changée n'est pas une option. Cela créerait beaucoup trop de constructions égales.

18
demandé sur CSchulz 2016-04-24 18:24:41

3 réponses

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 au fichier Jenkinsfile en aval;

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

cela au moins amène Jenkins à reconnaître que cela devrait déclencher quand "some_project" get built I. e il apparaît dans la page" View Configuration".

cependant, jusqu'à présent, les constructions de 'some_project' ne déclenchent toujours pas l'aval projet comme prévu.

cela étant dit peut-être vous aurez plus chance. Laissez-moi savoir si cela fonctionne pour vous.

(Quelqu'un a posé une question similaire pipeline à branches multiples de Jenkins et spécification des projets en amont)

8
répondu cscutcher 2016-09-12 10:09:48

si vous utilisez un déclarative multi-branche pipeline, vous pouvez utiliser:

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

si vous souhaitez que l'appariement des branches se produise entre les dépendances, vous pouvez utiliser:

triggers {
  upstream(upstreamProjects: "some_project/" + env.BRANCH_NAME.replaceAll("/", "%2F"), threshold: hudson.model.Result.SUCCESS)
}
23
répondu Japster24 2017-08-16 14:37:21

Pipeline De Travail la configuration supporte encore nativement Construire Des Déclencheurs, y compris inverser la création d'un déclencheur, Construire après d'autres projets sont construits. Vous pouvez même spécifier une branche à partir de Pipeline Multi-branche projet.

malheureusement, le déclenchement inversé n'est pas disponible Pipeline Multi-branche emplois. Le plus proche que vous pouvez obtenir pour inverser le déclenchement est en utilisant Promu Construit Plugin. Mais il il ne vous permet toujours pas de configurer la configuration par branche.

en plus Générateur Snippet précise:

les variables suivantes ne sont actuellement pas disponibles dans un script de Pipeline:

NODE_LABELS ESPACE Des variables spécifiques à la SCM telles que SVN_REVISION

ps. Peut-être que le seul moyen serait d'inviter de en amont en aval.

2
répondu luka5z 2016-04-25 10:14:33