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.
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'