Доброе утро:
В Azure DevOps я настраиваю конвейер, который на основе репозитория с докер-проектом (с файлом Docker-Compose) автоматизирует завершение и публикацию сервиса. Дело в том, что для следующей задачи мне выдает ошибку маршрута:
- task: AzureCLI@2
displayName: Docker Build
inputs:
azureSubscription: '$(azureSubscriptionEndpoint)'
scriptType: 'bash'
scriptLocation: 'inlineScript'
inlineScript: |
docker build -t service:$(tag).
docker save service:$(tag) -o service_$(tag).tar
/usr/bin/bash /home/vsts/work/_temp/azureclitaskscript1713529050063.sh
#0 building with "default" instance using docker driver
#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 2B done
#1 DONE 0.0s
#2 [internal] load .dockerignore
#2 передача контекста: 2B выполнено #2 ГОТОВО 0,0 с. ОШИБКА: не удалось решить: не удалось прочитать файл docker: открыть /var/lib/docker/tmp/buildkit-mount2163565617/Dockerfile: нет такого файла или каталога Ответ об ошибке от демона: ссылка не существует
I don't think he's looking for it in the right folder, but I don't know where to look for it or how. Any ideas?
This first part of the Pipeline looks like this (error en la tarea AzureCLI@2):
trigger:
- master
pool:
vmImage: 'ubuntu-latest'
variables:
tag: 1.0.0-$(Build.BuildId)
buildConfiguration: 'Release'
acrINT: 'XXXXX'
aKSINT: 'XXXXX'
azureSubscriptionEndpoint: 'XXXXXX'
azureContainerRegistry: 'XXXXX'
dockerComposeFile: 'docker-compose.yml'
resourceGroupName: ''
clusterName: ''
stages:
- stage: Build
displayName: Build
jobs:
- job: Build_code
displayName: Build
pool:
vmImage: 'ubuntu-latest'
steps:
- task: UseDotNet@2
displayName: 'Install .NET Core SDK'
inputs:
version: 8.x
performMultiLevelLookup: true
includePreviewVersions: true # Required for preview versions
- task: DotNetCoreCLI@2
inputs:
command: 'build'
projects: '**/*.csproj'
- task: DockerCompose@0
inputs:
workingDirectory: '$(System.DefaultWorkingDirectory)'
containerregistrytype: 'Azure Container Registry'
azureSubscription: '$(azureSubscriptionEndpoint)'
azureContainerRegistry: '$(azureContainerRegistry)'
dockerComposeFile: '$(dockerComposeFile)'
additionalDockerComposeFiles: 'docker-compose.override.yml'
dockerComposeFileArgs: 'DOCKER_BUILD_SOURCE='
action: 'Run a Docker Compose command'
dockerComposeCommand: 'build --parallel'
- task: AzureCLI@2
displayName: Docker Build
inputs:
azureSubscription: '$(azureSubscriptionEndpoint)'
scriptType: 'bash'
scriptLocation: 'inlineScript'
inlineScript: |
docker build -t service:$(tag) .
docker save service:$(tag) -o service_$(tag).tar
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Pipeline.Workspace)'
artifact: 'service-artifact'
publishLocation: 'pipeline'`
Ejecutar el Pipeline y que se cree el servicio
Ошибка указывает на то, что Dockerfile
не найден в рабочем каталоге по умолчанию. Пожалуйста, следуйте нижеуказанным пунктам для проверки:
Docker чувствителен к регистру. Убедитесь, что Dockerfile
назван точно так же, как Dockerfile
(без расширения), а не dockerFile
.
Проверьте, на каком repo
и branch
выполняется сборка конвейера, убедитесь, что Dockerfile
существует в правильном репозитории и ветке.
Если проблема не устранена, рекомендуется найти Dockerfile(find . -name "Dockerfile"
) перед сборкой:
Если Dockerfile находится не в корневом каталоге, вы можете добавить workingDirectory
для задачи:
- task: AzureCLI@2
displayName: Docker Build
inputs:
azureSubscription: '$(azureSubscriptionEndpoint)'
scriptType: 'bash'
scriptLocation: 'inlineScript'
inlineScript: |
find . -name "Dockerfile" # try to find the Dockerfile before build.
docker build -t service:$(tag) .
docker save service:$(tag) -o service_$(tag).tar
workingDirectory: Docker # the Dockerfile folder
Задача DockerCompose@0
содержит различные действия, поддерживает службы сборки и отправки служб. После сборки добавьте новый DockerCompose@0
для отправки в ACR. Однако это новая тема, не имеющая отношения к текущей проблеме в билете. Могу ли я узнать, решено ли выше Dockerfile not found
? Рекомендуется создать новый запрос для нового запроса и поделиться ссылкой здесь, будем рады помочь.
Я все еще работаю над этим. Поскольку я пытаюсь сделать то, что вы мне сказали, я открою новую тему, если не смогу ее решить, и если смогу решить, я отвечу на эту. Заранее спасибо.
Пожалуйста! Не стесняйтесь, дайте мне знать, если у вас есть какие-либо вопросы, рад помочь!
Теперь он находит Dockerfile, но не может выполнить команды. Эти команды работают локально, и если вы запустите Docker-Compose (DockerCompose@0), но если я запущу docker build -t service:$(tag) . в задаче AzureCLI@2 выдается следующая ошибка.
Dockerfile:11 -------------------- 9 | ARG BUILD_CONFIGURATION=Выпуск 10 | РАБОЧИЙ ПАРАМЕТР /источник 11 | >>> КОПИРОВАТЬ ["GNF_Inventario/GNF_Inventario.csproj", "GNF_Inventario/"] 12 | ВЫПОЛНИТЬ восстановление dotnet "./GNF_Inventario/./GNF_Inventario.csproj" 13 | КОПИРОВАТЬ. . -------------------- ОШИБКА: не удалось решить: не удалось вычислить ключ кэша: не удалось вычислить контрольную сумму ссылки 584d62f5-11d9-4074-87e4-acacf60905a6::809ah34b92o8ga026wkrxi y3c: "/GNF_Inventario/GNF_Inventario.csproj": не найден. Ошибка ответа демона: ссылка не существует.
Спасибо за ответ. Возможно, проблема связана со сборкой Pipeline. Целью этого является сборка, создание образа Docker из репозитория Azure, где есть проект NetCore с помощью Docker-Compose, и загрузка службы в контейнер Azure. Я не уверен, что использую хорошие задачи. Какие три задачи можно использовать?