我正在尝试使用Azure DevOps将node.js代码部署到Azure Function App。 我已经使用YAML创建了以下Azure DevOps管道。
我面临的问题是在部署步骤中,我的管道失败,因为它无法找到package
。当我查看日志时,我相信在作业/阶段之间的清理活动期间,将清理文件夹。我尝试使用其他预定义变量,例如Build.ArtifactStagingDirectory
,但没有一个有效。
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'
如何在各个阶段之间共享我的工件?如果我将所有步骤都放在同一工作中,则同一管道可以工作。但是我想把它们分开。
答案 0 :(得分:3)
如答案和一些评论中所述,现在可以下载以前发布的工件。
在下面的代码中,我将Optional.ofNullable(getSentDate())
.filter(sentDate -> sentDate.getFrom() != null)
.filter(sentDate -> sentDate.getTo() != null)
.ifPresent(date -> nested.put(...));
文件夹作为名为scripts
的工件发布,该文件夹位于解决方案的根目录下。这样,我可以在管道的后期使用该文件夹中包含的脚本。在另一个阶段,我下载了dropScripts
工件,然后运行了一个Powershell脚本(dropScripts
),该脚本包含在script20.ps1
文件夹中。
scripts
答案 1 :(得分:2)
通常-创建工件通常是通过 Build Pipeline 完成的,而部署工件是在 Release Pipeline 中完成的>。绝对有机会根据您的用法在单个构建管道中执行这两项操作。当您刚开始使用 Azure Pipelines 时,结合起来特别有意义,因为生态系统可能会因可用功能的数量而淹没。有here。
如果部署首次失败,则分隔管道确实可以为您带来重试部署的好处-这实际上取决于您的构建时间有多快。如果要手动触发环境或环形释放传播,则也更容易支持跨环境部署相同的位。分隔构建/部署publicized work on merging the release capabilities into the build capabilities to simplify onboarding的列表。
对于您的工作方式,您可以grows exponentially once you dig into some of the power-user features of release stages。
jobs:
- job: InitialA
steps:
- script: echo hello from initial A
- job: InitialB
steps:
- script: echo hello from initial B
- job: Subsequent
dependsOn:
- InitialA
- InitialB
steps:
- script: echo hello from subsequent