web-dev-qa-db-fra.com

Pipeline Azure devops - déclencher uniquement sur un autre pipeline, PAS de validation

Condition

Ainsi, il existe une fonctionnalité nouvelle dans Azure DevOps qui permet aux pipelines de déclencher d'autres pipelines et est documentée ici: https://docs.Microsoft.com/en-us/Azure/devops/pipelines/build/triggers? view = Azure-devops & tabs = yaml # pipeline-triggers-1 Cela sonne bien, mis à part le fait que je ne peux pas obtenir le comportement dont j'ai besoin. Je veux 2 pipelines dans le même référentiel:

  • Pipeline A: est uniquement déclenché par plusieurs autres pipelines en dehors de son propre dépôt, mais dans le même projet. À la suite de son déclenchement, il modifie son propre repo et déclenche donc le pipeline B.
  • Pipleline B: n'est déclenché que par les modifications apportées à son propre repo et lorsqu'il est déclenché, il fait tout ce qu'il doit faire

Syntaxe du pipeline A

resources:
    pipelines:
    - pipeline: database
      source: database
      trigger:
        branches:
        - develop
        - release/*
        # The stages filter should work, according to: https://docs.Microsoft.com/en-us/Azure/devops/pipelines/build/triggers?view=Azure-devops&tabs=yaml
        # However, this error occurs when specifying: /Azure-pipelines.yml (Line: 8, Col: 15): Stage filters in pipeline resource database is not supported.
        #stages:
        #- Build
    - pipeline: auth
      source: auth
      trigger:
        branches:
        - develop
        - release/*
    - pipeline: api
      source: api
      trigger:
        branches:
        - develop
        - release/*
    - pipeline: web
      source: web
      trigger:
        branches:
        - develop
        - release/*
  ... multiple triggers - 9 in total
stages:
  ...

Comportement actuel

Le pipeline A n'est déclenché par aucun des autres pipelines, mais uniquement sur les modifications apportées à son propre dépôt. Puisqu'il modifie de toute façon son propre dépôt, il se déclenche dans une boucle sans fin.

Questions/Commentaires

  • La syntaxe du pipeline A est-elle correcte?
  • De la documentation: "Cependant, si les deux pipelines utilisent des référentiels différents, le pipeline déclenché utilisera la dernière version du code de sa branche par défaut." Je suppose que cela signifie que le pipeline yaml de la branche par défaut sera activé. Et avons-nous vraiment ce petit contrôle? Il serait bien préférable de spécifier la branche cible dans les déclarations du pipeline.
  • Est-il possible d'obtenir d'une manière ou d'une autre la branche source qui a déclenché le pipeline?
  • Pourquoi les filtres de scène ne fonctionnent-ils pas comme indiqué?
  • Dans le pipeline A, pour arrêter la boucle, j'ai essayé d'utiliser $ (Build.TriggeredBy.DefinitionId) pour vérifier si c'était la même chose que $ (System.DefinitionId) et ignorer les étapes de construction si oui, mais $ (Build.TriggeredBy.DefinitionId) ) n'avait pas de valeur
  • Je me penche pour que les autres pipelines déclenchent le pipeline A si je ne peux pas le faire fonctionner.

Découverte

  • Ajouter trigger: none en haut du pipeline A l'empêchait de s'exécuter lorsque des validations étaient effectuées sur son dépôt, il ne s'exécute tout simplement pas du tout actuellement!
  • Dans un scénario de pipeline simplifié dans un compte séparé, j'ai réussi à faire fonctionner les builds déclenchés, avec 2 pipelines dans le même dépôt et j'ai trouvé:
    • Le fichier de pipeline yaml exécuté est sur la même branche que le commit sur le pipeline de déclenchement
    • Le code extrait provient également de la même branche que le commit sur le pipeline de déclenchement
    • L'exécution manuelle du pipeline à partir de l'interface graphique ne déclenche pas les pipelines dépendants
    • Le pipeline dépendant est déclenché et mis en file d'attente dès le premier démarrage
    • Je n'ai pas pu faire fonctionner l'exclusion de branche: le pipeline s'est déclenché indépendamment de la clause d'exclusion
  • Exécution d'un scénario de pipeline simplifié dans un compte séparé, avec le pipeline A dans le repo C et le pipeline dépendant B dans le repo D (même projet) , je ne peux pas obtenir le pipeline A pour déclencher le pipeline B jusqu'à présent (mon scénario d'origine)
  • Oh grande joie :-) il existe une extension de ligne de commande az Azure devops qui prend en charge le pipeline et vous permet de déclencher un pipeline:
5
vipes

Si vous ne publiez pas d'artefact à partir du pipeline de déclenchement, il ne déclenchera pas le pipeline déclenché. J'ai créé un produit minimum viable là où cela fonctionne, et j'ai expliqué le processus dans ce réponse .

0
ccoutinho