Docker создает ядро ​​.net, которое ссылается на проекты в другой папке - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь написать Dockerfile для сборки моего консольного приложения .NET Core 2.2 project-microservice-logger.csproj.Я получаю некоторые ошибки сборки, и я полагаю, что это потому, что Dockerfile, который я пытаюсь собрать, находится в каталоге, который содержит project-microservice-logger.csproj

Но этот проект имеет некоторые ссылки на проекты, которые находятся вдругой каталог.

/company/project-common/project-common-database/project-common-database.csproj
/company/project-microservices/project-microservice-logger/project-microservice-logger.csproj

Когда я выполняю команду, находясь в каталоге /company/project-microservices/project-microservice-logger, я получаю сообщения об ошибках типа

Тип или имя пространства имен 'Common'не существует в пространстве имен

Так как я могу собрать его очень хорошо, я знаю, что у него есть что-то из-за контекста сборки Dockers, и что он не может найти файл.

Мой файл Docker не является чем-то особенным, по сути, просто взят из некоторых шаблонов Docker для .NET Core, которые легко доступны онлайн.

FROM microsoft/dotnet:2.2-sdk AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM microsoft/dotnet:2.2-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "logging.dll"]

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

Весь код находится в одном репозитории, но на данный момент разделен на разные решения (ядро, микросервисы иИнтернет)

Версии
.NET Core 2.2
Docker для Mac / Версия 2.0.0.2

1 Ответ

0 голосов
/ 30 января 2019

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

Этот скрипт имеет следующую структуру папок:

Решение-папка / сборки / this-build-script.sh
Решение-папки / MyProject / MyProjectName.csproj

BUILD_MODE="Release"
DOCKER_IMAGE_TAG="latest"

readonly BUILD_MODE
readonly DOCKER_IMAGE_TAG

publish_and_build_image()
{
  PROJECT_DIR=$1
  PROJECT_FILE_NAME=$2
  DOCKER_IMAGE_NAME=$3

  echo "Publishing project $PROJECT_FILE_NAME ..."
  echo
  dotnet publish "..\\$PROJECT_DIR\\$PROJECT_FILE_NAME" --configuration $BUILD_MODE --verbosity quiet

  echo "Building docker image $DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG ..."
  docker build --tag=$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG "../$PROJECT_DIR" --quiet

  #echo
  #echo -e "\033[32m $DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG built \033[0m"
}

publish_and_build_image "MyProject" "MyProjectName.csproj" "my-docker-img-name"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...