Как вы загружаете * все * ресурсы конвейера в работе? - PullRequest
0 голосов
/ 27 мая 2020

Задание deployment автоматически загружает все ресурсы конвейера. Однако стандартный job этого не делает. Я попытался использовать - download: current, но при этом не загружаются ресурсы конвейера.

Я хочу это сделать, чтобы смоделировать развертывание для GitOps. Симуляция будет включать шаг, который выполняет git diff, который показывает различия для просмотра.

Однако я не вижу опции all или * в https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema%2Cparameter-schema#download

Мой текущий обходной путь - выполнить deployment в среде «Temp» до реальной deployment.

ОБНОВЛЕНИЕ: Вот пример того, что я пробовал

resources:
  pipelines:
    - pipeline: auth
      project: myproj
      source: auth CI
      trigger:
        branches:
          include:
            - master
...
    jobs:
      - job: diagnostics
        displayName: Job Diagnostics
        steps:
          - checkout: self
          # - download: 
          - task: DownloadPipelineArtifact@2
            displayName: 'Download Pipeline Artifact'
            inputs:
              path: $(Build.SourcesDirectory)
          - bash: |
              env | sort
            displayName: Display environment variables
          - bash: |
              pwd
            displayName: Present working directory
          - bash: |
              find $(Pipeline.Workspace) -type f -print
            displayName: Display files

ОБНОВЛЕНИЕ: Другой подход, который я обдумывал, - это создание конвейера, который создает другой конвейер. Таким образом, список ресурсов конвейера не обязательно должен быть Azure Pipeline YAML, это может быть CSV или упрощенный YAML, который я преобразовываю, и в этом случае я могу сгенерировать

resources:
  pipelines:
    - pipeline: pipelineAlias1
      project: myproj
      source: auth CI
      branch: master
      trigger:
        branches:
          include:
            - master

    - pipeline: pipelineAlias2
      project: myproj
      source: auth CI
      branch: master
      trigger:
        branches:
          include:
            - master
...
job:
  steps:
   - download: pipelineAlias1
   - download: pipelineAlias2

, а затем настроить его. как еще один конвейер Azure, выполняемый при обновлении.

1 Ответ

0 голосов
/ 28 мая 2020

Как вы загружаете все ресурсы конвейера в задании?

Действительно, это известная проблема, связанная с использованием ключевого слова download чтобы загрузить артефакты конвейера.

Вы можете отследить эту проблему с помощью следующего билета:

Артефакты не загружаются при многоэтапной сборке yaml с использованием DownloadPipelineArtifactV2

Чтобы решить эту проблему, попробуйте использовать задачу DownloadPipelineArtifact вместо ключевого слова download :

  - task: DownloadPipelineArtifact@2

    displayName: 'Download Pipeline Artifact'
    inputs:
      path: $(Build.SourcesDirectory)

Обновление:

Я заметил ваш yml-файл, похоже, вы не добавляете задание сборки в свой конвейер. Задача DownloadPipelineArtifact используется для:

загрузки артефактов конвейера с более ранних этапов в этом конвейере или из другого конвейера

Итак, нам нужно добавить этап для создания конвейера для генерации артефакта, иначе артефакты конвейера не были загружены.

Проверьте мой тестовый файл YAML:

variables:
  ArtifactName: drop

stages:
- stage: Build
  jobs:
  - job: Build
    displayName: Build
    pool:
     name: MyPrivateAgent
    steps:
      - task: CopyFiles@2
        displayName: 'Copy Files to: $(build.artifactstagingdirectory)'
        inputs:
          SourceFolder: '$(System.DefaultWorkingDirectory)\LibmanTest'
          targetFolder: '$(build.artifactstagingdirectory)'
      - task: PublishBuildArtifacts@1
        displayName: 'Publish Artifact: LibmanTest'
        inputs:
          ArtifactName: $(ArtifactName)


- stage: Dev
  dependsOn: Build
  jobs:
  - job: Dev
    displayName: Dev
    pool:
     name: MyPrivateAgent
    steps:
      - task: CopyFiles@2
        displayName: 'Copy Files to: $(build.artifactstagingdirectory)'
        inputs:
          SourceFolder: '$(System.DefaultWorkingDirectory)\TestSample'
          targetFolder: '$(build.artifactstagingdirectory)'
      - task: PublishBuildArtifacts@1
        displayName: 'Publish Artifact: TestSample'
        inputs:
          ArtifactName: $(ArtifactName)


- stage: Deployment
  dependsOn: Dev  
  pool:
    name: MyPrivateAgent
  jobs:
  - deployment: Deployment
    displayName: DeployA
    environment: 7-1-0
    strategy:
      runOnce:
        deploy:
          steps:

          - task: DownloadPipelineArtifact@2

            displayName: 'Download Pipeline Artifact'
            inputs:
              path: $(Build.SourcesDirectory)

Как видите , Я использую два этапа Build и Dev, чтобы скопировать проект LibmanTest и TestSample как артефакт, затем использую задачу DownloadPipelineArtifact для загрузки этих двух артефактов.

Результат теста:

enter image description here

Update2:

в вашем примере все еще не отображаются ресурсы. Pripelines

Итак, теперь вы хотите загрузить артефакт из других конвейеров, вам не нужно использовать конфигурацию по умолчанию для задачи DownloadPipelineArtifact:

resources:
  pipelines:
    - pipeline: xxx
      project: MyTestProject
      source: xxx
      trigger:
        branches:
          include:
            - master

  jobs:
  - deployment: Deployment
    displayName: DeployA
    environment: 7-1-0
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadPipelineArtifact@2
            displayName: 'Download Pipeline Artifact For Test'
            inputs:
              buildType: specific
              project: MyTestProject
              definition: 13

Результат теста:

enter image description here

Кроме того, вы можете проверить конфи из редактора classi c, затем получите файл YAML:

enter image description here

Надеюсь, это хреново.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...