J'essaie d'améliorer le processus CI/CD d'un vieux projet funky dont le code n'est pas ouvert à la refactorisation pour le moment. Je n'arrive pas à faire fonctionner cela en suivant la documentation Azure ou même si c'est possible.

J'ai pu améliorer l'état actuel avec un fichier de pipeline azur qui exécute des tests unitaires avant de fusionner dans la branche releases/dev. Mais je veux aller plus loin.

Les tâches de chaque PR dans les versions/dev :

  1. script : npm exécuter le test : unité
  2. script : npm exécuter build : dev
  3. copier/publier le contenu du dossier .div/ dans une configuration de magasin de blob azur pour le site statique

Toute RP ou fusion dans des versions/mise en scène :

  1. script: npm run build:staging
  2. copier/publier le contenu du dossier .div/ dans une configuration de magasin de blob azur pour le site statique

Tout PR ou fusion dans le maître :

  1. script : npm exécuter le test : unité
  2. script: npm run build:production
  3. copier/publier le contenu du dossier .div/ dans une configuration de magasin de blob azur pour le site statique

J'ai 3 questions

Est-ce possible dans un seul fichier yaml ?

Comment puis-je exécuter différentes tâches pour différentes branches, j'ai défini des tâches/étapes mais je n'arrive pas à les conditionner ?

Y a-t-il une magie vers laquelle quelqu'un peut me diriger qui me permet de copier le contenu d'un répertoire dans un magasin de blob ? Ou doit-il être compressé -> copié -> non compressé ?

Merci d'avance d'un nouveau papa privé de sommeil

0
user3067684 16 juin 2020 à 13:58

1 réponse

Meilleure réponse

Est-ce possible dans un seul fichier yaml ? Comment puis-je exécuter différentes tâches pour différentes branches, j'ai défini des tâches/étapes mais je n'arrive pas à les conditionner ?

Bien sûr. Vous pouvez ajouter ces étapes dans un seul fichier yaml. Ensuite, vous devez définir le champ condiftion pour chaque étape ou chaque tâche.

Voici un exemple pour les étapes :

trigger:
- '*'

pool:
  vmImage: 'ubuntu-latest'

stages:
- stage: Test1
  condition: OR(eq(variables['Build.SourceBranch'], 'refs/heads/master') ,eq(variables['System.PullRequest.TargetBranch'], 'refs/heads/master'))
  jobs:
  - job: BuildJob
    steps:
    - script: echo Build Stage1!

- stage: Test2
  condition: OR(eq(variables['Build.SourceBranch'], 'refs/heads/dev') ,eq(variables['System.PullRequest.TargetBranch'], 'refs/heads/dev'))
  jobs:
  - job: BuildJob
    steps:
    - script: echo Build Stage2!


- stage: Test3
  condition: OR(eq(variables['Build.SourceBranch'], 'refs/heads/staging') ,eq(variables['System.PullRequest.TargetBranch'], 'refs/heads/staging'))
  jobs:
  - job: BuildJob
    steps:
    - script: echo Build Stage3!

Vous pouvez définir les branches requises comme déclencheur. Ensuite, vous pouvez utiliser Build.SourceBranch et System.PullRequest.TargetBranch pour déterminer s'il faut exécuter l'étape actuelle.

Build.SourceBranch -> pour la branche de fusion.

System.PullRequest.TargetBranch -> pour la demande de tirage.

Voici la documentation sur les conditions et variables.

Y a-t-il une magie vers laquelle quelqu'un peut me diriger qui me permet de copier le contenu d'un répertoire dans un magasin de blob ? Ou doit-il être compressé -> copié -> non compressé ?

Étant donné que vous devez publier le fichier sur Azure Blob, vous pouvez directement essayer d'utiliser le Tâche de copie de fichier Azure.

Voici un exemple:

- task: AzureFileCopy@4
  displayName: 'AzureBlob File Copy'
  inputs:
    SourcePath: xxx
    azureSubscription: xxx
    Destination: AzureBlob
    storage: xxx
    ContainerName: '$web'

J'espère que cela t'aides.

1
Kevin Lu-MSFT 17 juin 2020 à 03:17