Я пытаюсь собрать свое основное приложение .net с помощью Docker. И я хочу переопределить версию своего приложения во время сборки .Чтобы отобразить его где-нибудь позже во время выполнения.
У меня файл Docker выглядит следующим образом:
FROM microsoft/dotnet:2.2-sdk AS build-env
WORKDIR /src
RUN apt-get update && \
apt-get install -y libgit2-dev && \
ln -s /usr/lib/x86_64-linux-gnu/libgit2.so /lib/x86_64-linux-gnu/libgit2-15e1193.so
COPY ..
WORKDIR /src/API
RUN dotnet restore
RUN dotnet tool install -g GitVersion.Tool --version=5.0.0-beta1-72
RUN export PATH="$PATH:/root/.dotnet/tools" && \
version="$(dotnet gitversion /output json /showvariable NuGetVersion)" && \
dotnet build --no-restore /property:Version=$version && \
dotnet publish --output "/app" --no-build
FROM microsoft/dotnet:2.2-aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app .
ENTRYPOINT ["dotnet", "API.dll"]
Когда я пробовал те же команды, что и в инструкциях RUN на моем компьютере с Windows - все в порядке.Я также попытался выполнить те же команды в WSL (Ubuntu 18), и это тоже нормально - У меня есть версия сборки из моей команды сборки. Но я не могу понять, почему она не работает внутри Docker.
Я также пытался удалить всю мою магию GitVersion и использовать только это:
FROM microsoft/dotnet:2.2-sdk AS build-env
WORKDIR /src
RUN apt-get update && \
apt-get install -y libgit2-dev && \
ln -s /usr/lib/x86_64-linux-gnu/libgit2.so /lib/x86_64-linux-gnu/libgit2-15e1193.so
COPY ..
WORKDIR /src/API
RUN dotnet restore
RUN dotnet build --no-restore /property:Version=1.1.1.0-beta1
RUN dotnet publish --output "/app" --no-build
FROM microsoft/dotnet:2.2-aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app .
ENTRYPOINT ["dotnet", "API.dll"]
В любом случае, мои результаты такие же.
Я использую этот код для проверки:
public static void Main(string[] args)
{
Console.WriteLine(typeof(Program).Assembly.GetName());
}
Каждый раз, когда моя сборка успешна, но у меня есть версия, определенная в файле .csproj без переопределения.