Опубликовать результаты задачи артефакта сборки "путь не существует" ошибка

Я пытаюсь отправить образ в AKS, используя шаблон Azure DevOps по умолчанию:

stages:
- stage: Build
  displayName: Build stage
  jobs:  
  - job: Build
    displayName: Build
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)

    - upload: manifests
      artifact: manifests

Что приводит к следующей ошибке:

##[error]Path does not exist: /home/vsts/work/1/s/manifests

Я пытался использовать задачу публикации по умолчанию

- task: PublishPipelineArtifact@1
  inputs:
    artifactName: 'manifests'
    path: 'manifests'

но это ничего не изменило. Может кто-нибудь объяснить, что здесь происходит и почему шаблон по умолчанию из Msft не работает?

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
4
0
5 724
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, на этом этапе я должен сообщить, что у меня было полное непонимание артефактов в конвейерах сборки.

Задачи upload (устарело) и publish являются сокращением задачи публикации артефакта конвейера (https://learn.microsoft.com/en-us/azure/devops/pipelines/artifacts/pipeline-artifacts?view=azure -devops&tabs=yaml)

Во-вторых, путь за ключевым словом publish — это относительная папка, которая будет опубликована. Если вы используете шаблон службы Kubernetes из Azure DevOps, он создаст папку manifest в корне репозитория и предварительно заполнит ее yml-файлом развертывания и службы.

Я не хочу их там (и, должно быть, подсознательно удалил папку), поэтому я переместил их и изменил путь:

- publish: $(System.DefaultWorkingDirectory)/Code/Database/Docker
  artifact: sql-drop

(Папка Docker — это место, где я храню Dockerfiles, docker-compose, переопределения и все прочее для запуска контейнеров)

Теперь в моей задаче развертывания мне нужно знать, что я не могу использовать буквальный путь из репозитория. Мне нужно сначала загрузить артефакт, а затем использовать имя артефакта — «sql-drop» в качестве имени папки:

steps:
#current means the current pipline. shorthand sytnax
- download: current
  # name from the aritfact specifed above
  artifact: sql-drop
- task: KubernetesManifest@0
  displayName: Create imagePullSecret
  inputs:
    action: createSecret
    secretName: $(imagePullSecret)
    dockerRegistryEndpoint: $(dockerRegistryServiceConnection)
    
- task: KubernetesManifest@0
  displayName: Deploy to Kubernetes cluster
  inputs:
    action: deploy
    # Use sql-drop as folder name and specify manifests
    manifests: |
      $(Pipeline.Workspace)/sql-drop/his-sql.dev.deployment.yml
      $(Pipeline.Workspace)/sql-drop/his-sql.dev.service.yml
    imagePullSecrets: |
      $(imagePullSecret)
    containers: |
      $(containerRegistry)/$(imageRepository):$(tag)

Большой ! Вы можете принять этот ответ. Это будет полезно другим пользователям. Спасибо

Kevin Lu-MSFT 16.12.2020 09:08

@KevinLu-MSFT Конечно - у меня было всего 2 дня, прежде чем я смог принять свой собственный ответ. Спасибо, что напомнили :)

Marco 16.12.2020 10:13

Другие вопросы по теме