Fermer

juin 30, 2022

Meilleures pratiques Sitecore Headless DevOps – Partie 2

Meilleures pratiques Sitecore Headless DevOps – Partie 2


Bienvenuemoi retour à ma êtrejeque N DevOps Meilleure pratiquejeces liés à Sjetecore sans tête jeamplemointatjeons. jen Partie 2 on y vajeng pour créer les pipelines de construction pour notre Sjesolutions tecore et Next.js et voyez comment ils peuvent être inclus dans le processus de relations publiques. Si vous n’avez pas vérifié Partie 1 pourtant, je recommande de le faire avant de continuer.

Créer un pipeline de construction Sitecore

Fjed’abord, ouvrez l’Azure DevOps portail, cljeck sur Pjepeljenda et cljeck sur Nouveau Pjepeljene.

Créer un pipeline de build

Ensuite, sélectionnez le servicejece your reposjetory jes hébergé wjee. Nous wjece sera nousjede YAML pour créer notre pjepeljenes donc ils peuvent être snotrece contrôlé et sjedepuis le reposjetory pour ejel’exemple jeest hébergé jen Azure, nous wjesélectionnerai le fjed’abord donnerjece.

Créer un dépôt de pipeline

Vous serez ensuite invité à sélectionner un référentiel dans lequel le YAML sera stocké. Je recommande d’utiliser le même référentiel dans lequel les solutions Sitecore et Next.js sont stockées. Nous créerons un dossier dédié pour les pipelines YAML dans une étape ultérieure.

Après avoir sélectionnéjeng le desjerepos rougesjetory, faites défiler vers le bas pour sélectionner Démarreur pjepeljene confjegouràjesur.

Configurer l'étape du pipeline

Étaient presque prêt à commencer ajouterjeng tâches à notre pjepeljene mais fjed’abord, allons gjeve le fjele un descrjeptjeet surmoi et assurer le fjeet Wjesera stocké jena dedjedossier classé. CLjeck sur le fjeet namoi en haut de l’édjetor et remplacer le w par défautjee devops/pjepeljenda/sjetecore-backend-cettejeld.yml. Ajout de la devops/pipelines chemin vers le nom du fichier créera notre dossier dédié dans le référentiel.

Nom du pipeline Emplacement

Maintenant nous pouvons bujeld le journaljec de notre pjepeljene. Une copie du fichier YAML utilisé pour thjes exemple peut être trouvé ci-dessous. Alorsmoi ejengs de prendre note de :

  1. Sur la ligne 1, des variables peuvent être utilisées pour personnaliser la numérotation des exécutions de pipeline. Plus de détails peuvent être trouvés ici.
  2. Sur la ligne 2, nous avons un déclencheur pour le dmz et releases/* branche pour s’assurer que la construction s’exécute pour les PR terminés pour dmz et à tout moment un nouveau releases/* branche est créée.
  3. Nous utilisons Unicorn pour la sérialisation des éléments, il existe donc plusieurs tâches de copie pour ajouter ces fichiers/dépendances à notre artefact.
  4. La TargetFolder La propriété des tâches de copie est importante pour s’assurer que l’artefact a la bonne structure. Plus précisément, la ligne 53 car cette structure sera cruciale dans la livraison des articles sérialisés au CM que nous verrons dans la partie 3.
  5. Sur la ligne 54, nous publions l’artefact $(Build.ArtifactStagingDirectory) qui a été construit via le VSBuild tâche sur la ligne 25 et toutes les tâches de copie. Cet artefact sera utilisé dans les pipelines de publication couverts dans la partie 3.
  6. La dernière tâche du pipeline est l’avance rapide de master à dmz que nous avons couvert dans Partie 1.
name: $(SourceBranchName).$(Rev:r)
trigger:
  batch: true
  branches:
    include:
    - dmz
    - releases/*
pool:
  vmImage: 'windows-latest'
jobs:
- job: Job_1
  displayName: Agent job 1
  pool:
    vmImage: windows-latest
  steps:
  - checkout: self
    clean: true
    persistCredentials: true
  - task: NuGetCommand@2
    displayName: NuGet restore
    inputs:
      solution: windows/src/HeadlessExample.sln
      selectOrConfig: config
      nugetConfigPath: windows/src/nuget.config
  - task: VSBuild@1
    displayName: Build solution windows/src/HeadlessExample.sln
    inputs:
      solution: 'windows/src/HeadlessExample.sln'
      msbuildArgs: '/p:DeployOnBuild=true /p:PublishProfile=IISProfile.pubxml /p:DeployDefaultTarget=WebPublish /p:DesktopBuildPackageLocation=$(Build.ArtifactStagingDirectory)'
      platform: 'Any CPU'
      configuration: 'Release'
      clean: true
  - task: CopyFiles@2
    displayName: Copy Unicorn Assembly
    inputs:
      SourceFolder: '$(Build.SourcesDirectory)/windows/src/Project/HeadlessExample/bin'
      Contents: |
        MicroCHAP.dll
      TargetFolder: '$(Build.ArtifactStagingDirectory)'
  - task: CopyFiles@2
    displayName: Copy Unicorn Module
    inputs:
      SourceFolder: '$(Build.SourcesDirectory)/devops'
      Contents: |
        Unicorn.psm1
      TargetFolder: '$(Build.ArtifactStagingDirectory)'
  - task: CopyFiles@2
    displayName: Copy Unicorn Files
    inputs:
      SourceFolder: '$(Build.SourcesDirectory)/windows/src/Serialization'
      Contents: |
        **
      TargetFolder: '$(Build.ArtifactStagingDirectory)/Serialization/App_Data/Unicorn'
  - task: PublishPipelineArtifact@1
    displayName: Publish Pipeline Artifact
    inputs:
      targetPath: '$(Build.ArtifactStagingDirectory)'
      artifact: 'BackendOutput'
      publishLocation: 'pipeline'
  - script: |
      ECHO clean
      git add . && git reset --hard
      ECHO git checkout master --quiet
      git checkout master --quiet
      ECHO git merge origin/dmz --ff-only --quiet
      git merge origin/dmz --ff-only --quiet
      ECHO git push origin master --quiet
      git push origin master --quiet
    displayName: Fast-forward master to dmz
    failOnStderr: true
    condition: and(eq(variables['Build.SourceBranch'], 'refs/heads/dmz'), ne(variables['Build.Reason'], 'PullRequest'), not(canceled()))

Après ajouterjede/confjegourjeng toutes les tâches à la pjepeljene, cljecochez la flèche à côté de Enregistrer et exécuter jen le haut rjecoin droit et sélectionnez sauvegarder.

Enregistrer le pipeline

jen le djealog que wjell ouvrir, sélectionnez Créer une nouvelle branche pour thjes comjet et assurez-vous Lancer une pull request jeest sélectionné. Mettre à jour la communicationjet moimessage et ajouter une descriptionjeptjesur jef desjerouge puis enregistrez.

Enregistrer le pipeline Pr

Enfin, rendez-vous sur Demandes d’extraction et compléter le RP créé par l’action de sauvegarde ci-dessus.

Demande d'extraction

Pipeline Next.js

Comme je ont moiNTjeprécédentjement, notre Application Next.jsjechatjesur jevajeng à héberger wjee Vercel. Lorsque nous déployons notre applicationjechatjesur Vercel, jedeuxjeça va être compljeéd sur lajer bujeld agents avant d’êtrejejournéejechaînejeattaché au réseau de nœuds périphériques. Pour attraper tout puissantjeal bujeld jeproblèmes avant pousserjepersonnes Vercelnous wjeJe vais créer commejemple pjepeljene pas vérifier la maquettejelatjesur l’application Next.jsjechatjedans le cadre de RP traiter.

Suivez les mêmes étapes que dans la section ci-dessus pour créer un nouveau pipeline. Assurez-vous de stocker le YAML dans le devops/conduites dossier du référentiel et donnez-lui un nom descriptif. Une copie du YAML utilisé pour cet exemple est ci-dessous. Quelques éléments à prendre en compte :

  1. Sur la ligne 5, nous utilisons ubuntu-dernier pour que notre agent de construction s’aligne sur les agents de construction utilisés par Vercel.
  2. Sur la ligne 20, nous avons le répertoire de travail défini sur l’extrémité avant qui est le nom du dossier dans notre référentiel où l’application Next.js est stockée.
  3. Étant donné que ce pipeline est uniquement utilisé pour la validation du nouveau code contribué à l’application Next.js, aucun artefact n’est généré.
jobs:
- job: Job_1
  displayName: Agent job 1
  pool:
    vmImage: ubuntu-latest
  steps:
  - checkout: self
    clean: true
  - task: NodeTool@0
    displayName: Install Node.js
    inputs:
      versionSpec: 14.x
  - task: PowerShell@2
    displayName: PowerShell Script
    inputs:
      targetType: inline
      script: |
        npm install
        npm run next:build
      workingDirectory: frontend

Suivez les mêmes étapes décrites ci-dessus pour enregistrer le pipeline, créer un PR et terminer le PR.

Utiliser Pipeline pour la validation des relations publiques

Maintenant que nous avons créé les deux pipelines, nous devons revoir les stratégies de branche pour dmz et exiger que ces pipelines réussissent avant Nouveau le code peut être fusionné dans. Si vous avez besoin d’un rappel sur la façon d’accéder aux politiques de branche, voir Partie 1.

Une fois que vous accédez au paramètre des stratégies de branche pour dmzfaites défiler vers le bas et cliquez sur le +’ icône dans le Validation de construction section.

Validation de construction

Ajoutez une règle pour les deux pipelines que nous avons créés avec les paramètres suivants :

  • Filtre de chemin:
    • Pipeline de construction Sitecore : /windows/src/*
    • Pipeline Next.js : /l’extrémité avant/*

Le paramètre de filtre de chemin est important pour s’assurer que le ou les pipelines corrects s’exécutent lorsque des modifications sont détectées dans l’une ou les deux applications.

  • Gâchette: Automatique
  • Exigence de la politique: Requis
  • Expiration de la version: Immédiatement lorsque dmz Est mis à jour

Politique de construction

Enfin, assurez-vous que les deux stratégies de validation de build ajoutées sont activées.

Politique de construction activée

Sommaire

À ce stade, nous disposons d’un référentiel unique pour nos applications et nos ressources DevOps avec les branches, les politiques et la sécurité appropriées pour s’aligner sur Git DMZ Flow. Nous avons un pipeline de construction qui validera tout code ajouté à l’application Next.js avant qu’il ne soit envoyé à Vercel. Nous avons un deuxième pipeline de construction qui validera tout code ajouté à l’application Sitecore, générera un artefact du code conforme et des éléments Licorne sérialisés, et effectuera automatiquement l’avance rapide du maître selon les règles de flux Git DMZ.

Dans la partie 3, notre dernière partie de cette série, nous verrons comment déployer les deux applications dans trois environnements (intégration, assurance qualité et production) à l’aide des versions Azure DevOps et de la CLI Vercel tout en suivant un modèle bleu/vert pour l’assurance qualité. et Fabrication. On se voit là-bas!






Source link