Я пытаюсь отправить образ в 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 не работает?
Хорошо, на этом этапе я должен сообщить, что у меня было полное непонимание артефактов в конвейерах сборки.
Задачи 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)
@KevinLu-MSFT Конечно - у меня было всего 2 дня, прежде чем я смог принять свой собственный ответ. Спасибо, что напомнили :)
Большой ! Вы можете принять этот ответ. Это будет полезно другим пользователям. Спасибо