web-dev-qa-db-fra.com

Comment partager le (s) fichier (s) entre les étapes YAML à Azure Devops

J'essaie de déployer mon code nœud.js à une application de fonction Azure à l'aide d'Azure Devops. J'ai créé le pipeline Azure Devops suivant à l'aide de YAML.

Le problème que je suis confronté est que sur l'étape de déploiement, mon pipeline échoue, car il n'est pas capable de trouver le package. Lorsque je regarde les journaux, je crois que lors de l'activité de nettoyage entre les emplois/étapes, les dossiers sont nettoyés. J'ai essayé d'utiliser d'autres variables prédéfinies comme Build.ArtifactStagingDirectory mais aucun ne fonctionne.

trigger:
  - master

variables:
  azureServiceConnection: 'mySvcCon'
  azureFuncApp: myFApp

stages:
  - stage: Build_1
    displayName: 'Build Stage'
    jobs:
      - job: build
        displayName: 'Build Node.js app'
        pool:
          vmImage: 'Ubuntu-16.04'

        steps:
          - task: NodeTool@0
            displayName: 'Install Node.js'
            inputs:
              versionSpec: '8.x'

          - script: |
              npm install
            displayName: 'npm install and build'

          - task: CopyFiles@2
            displayName: 'Copy necessary files'
            inputs:
              SourceFolder: '$(System.DefaultWorkingDirectory)'
              Contents: |
                **/*
                !.vscode/**/*
              TargetFolder: '$(System.DefaultWorkingDirectory)/copied'

          - task: PublishBuildArtifacts@1
            displayName: 'Publish artifact'
            enabled: true
            inputs:
              PathtoPublish: '$(Build.ArtifactStagingDirectory)/copied'
              publishLocation: filePath
              targetPath: '$(System.DefaultWorkingDirectory)/publish'

  - stage: Deploy_2
    displayName: 'Deploy Stage'
    jobs:
      - job: Deploy
        displayName: 'Deploy to Function App'
        pool:
          vmImage: 'Ubuntu-16.04'

        steps:
          - task: AzureRMWebAppDeployment@4
            displayName: 'AzureRM Function App deploy'
            inputs:
              ConnectionType: 'AzureRM'
              ConnectedServiceName: $(azureServiceConnection)
              WebAppKind: 'Function App'
              WebAppName: $(azureFuncApp)
              Package: '$(System.DefaultWorkingDirectory)/publish'

Comment partager mon artefact entre les étapes? Le même pipeline fonctionne si je mettais toutes les étapes dans le même travail. Mais je veux les séparer.

10
TechiRik

Comme mentionné dans la réponse et dans certains commentaires, il est maintenant possible de télécharger des artefacts précédemment publiés.

Dans le code ci-dessous, je publie le dossier scripts comme artefact nommé dropScripts, que j'ai sur la base de ma solution. De cette façon, je peux utiliser les scripts contenus dans ce dossier dans des étapes ultérieures du pipeline. Dans une autre étape, je télécharge le dropScripts artefact, puis je gère un script PowerShell (script20.ps1), qui était contenue dans le dossier scripts.

stages:
- stage: 'Build'
  jobs: 
  - job: 'Build'
    pool:
      vmImage: 'ubuntu-16.04'
    steps:

    (...)

    - task: CopyFiles@2
      displayName: 'Copy powershell scripts for later use in the pipeline'
      inputs:
        contents: 'scripts/**'
        targetFolder: '$(Build.StagingDirectory)'
    - publish: '$(Build.ArtifactStagingDirectory)/scripts'
      displayName: 'Publish powershell scripts for later use'
      artifact: dropScripts

- stage: DoSomethingWithTheScriptsStage
  dependsOn: Build
  jobs: 
  - job: DoSomethingWithTheScriptsJob
    pool: 
      vmImage: 'windows-2019'
    steps:
      - download: current
        artifact: dropScripts
      - task: PowerShell@2
        inputs:
          filePath: '$(Pipeline.Workspace)\dropScripts\script20.ps1'
3
ccoutinho