2017-09-12 2 views
0

Dans l'étape Déployer dacpac dans VSTS, vous pouvez définir la base de données pour qu'elle s'exécute uniquement en fonction des conditions personnalisées. Les exemples de conditions sont basés sur les informations de génération VSTS et je ne trouve aucune documentation sur l'utilisation des conditions à partir d'un abonnement Azure ou de métadonnées dacpac connectées. Dans le conditional page, ils ont une variable de version qui semble être utile, mais je ne trouve pas d'autres informations à ce sujet.Déployer dacpac via VSTS uniquement s'il a été modifié depuis le dernier déploiement

Fondamentalement, lorsque l'étape dacpac est déclenchée, je veux vérifier les métadonnées par rapport aux données existantes, exécuter conditionnellement l'étape de construction et mettre à jour les métadonnées. Est-ce possible grâce à une étape de construction VSTS?

Répondre

2

Oui, c'est possible. Vous pouvez ajouter une variable définie par l'utilisateur (telle que la variable result avec la valeur par défaut 0) dans la définition de génération VSTS. Et avec la valeur 1 pour exécuter l'étape dacpac, avec la valeur 0 pour ignorer l'étape.

étapes détaillées comme ci-dessous:

  • Ajouter une tâche PowerShell avec deux opérations avant l'étape de dacpac:

    1. Vérifiez s'il a de nouveaux changements pour les données existantes.

      Si les métadonnées sont stockées uniquement dans Azure, vous pouvez vous référer à this way pour vous connecter à Azure in powershell. Si les métadonnées sont également stockées dans le référentiel (comme un repo git) avec lequel vous construisez, vous pouvez également vérifier la mise à jour dans le référentiel.

    2. Définissez la valeur de la variable result en fonction de la mise à jour ou non des métadonnées.

      Si les données sont mises à jour, puis modifiez la variable result avec la valeur 1:

      Write-Host ("##vso[task.setvariable variable=result]1") 
      

      Sinon, ne changez pas la valeur (conserver la valeur avec 0)

    Depuis les données sont gérés en git VCS, vous pouvez vérifier si les données sont mises à jour ou non en repo git. Si les données sont modifiées, modifiez la variable result en tant que 1. détail script Powershell comme ci-dessous:

    $files=$(git diff HEAD HEAD~1 --name-only) 
    echo "changed files as below: $files" 
    if ($files -contains 'filename') 
        Write-Host ("##vso[task.setvariable variable=result]1") 
    
  • Set conditions pour l'étape de dacpac:

    Dans la tâche, sélectionnez conditions personnalisées pour exécuter cette tâche. Si vous voulez exécuter cette tâche lorsque réussir et la variable variables result est 1, vous pouvez l'exprimer:

    and(succeeded(), eq(variables['result'], '1')) 
    

Maintenant, si la result avec la valeur 0, l'étape de dacpac sera sautée, est le result avec la valeur 1, le dacpack sera exécuté.

+0

Quel est un bon moyen de vérifier les nouveaux changements? Je pensais pouvoir stocker un hachage du déploiement dacpac le plus récent pour chaque base de données dans une table de stockage et le comparer à un hachage de la base de données actuelle, puis le mettre à jour, mais si VSTS ou Azure avait un contrôle de version intégré serait mieux – user3364161

+0

Est-ce que les données sont également gérées dans le contrôle de source (git ou TFVC)? Si les données gérées dans VCS, il y a un moyen plus facile. Sinon, vous pouvez utiliser le chemin comme vous l'avez mentionné. –

+0

Les données sont gérées dans git, et l'infra est construit via VSTS – user3364161