Как обмениваться файлами между этапами YAML в DevOps Azure - PullRequest
1 голос
/ 15 апреля 2019

Я пытаюсь развернуть свой код node.js в приложении-функции Azure с помощью DevOps Azure. Я создал следующий конвейер Azure DevOps с использованием YAML.

Проблема, с которой я сталкиваюсь, заключается в том, что на этапе развертывания мой конвейер не работает, поскольку он не может найти 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'

Как я могу поделиться своим артефактом между этапами? Один и тот же конвейер работает, если я добавлю все шаги в одну и ту же работу. Но я хочу выделить их.

1 Ответ

2 голосов
/ 16 апреля 2019

В целом - создание артефактов обычно выполняется Построить конвейер , в то время как развертывание артефактов выполняется в Выпуск конвейера . Определенно есть возможность выполнить оба действия в одном конвейере сборки в зависимости от вашего использования. Объединение особенно имеет смысл, когда вы только начинаете использовать Azure Pipelines , поскольку экосистема может быть перегружена количеством доступных возможностей. опубликована работа по объединению возможностей релиза с возможностями сборки для упрощения адаптации .

Разделение конвейеров дает вам преимущество повторной попытки развертывания, если развертывание не удалось в первый раз, - это действительно зависит от того, насколько быстро выполняется сборка. Кроме того, поддержка развертывания одних и тех же битов в разных средах проще, если вы хотите вручную запускать окружение или распространение кольцевого выпуска. Список для разделения build / deploy растет в геометрической прогрессии, когда вы углубляетесь в некоторые функции опытных пользователей этапов выпуска .

Для вашего подхода к работе - вы могли бы использовать элемент dependsOn YAML, чтобы связать последующие задания, чтобы иметь выходную зависимость .

Построить конвейер - цепочка зависимостей

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