В решении у меня есть проект .NET Core 2.2 WebAPI (среди других проектов).
Решение имеет соответствующий конвейер сборки, настроенный в TFS. Каждая сборка TFS имеет номер сборки, например «20190615.15». Я хотел бы предоставить этот номер сборки через конечную точку Web-API для выполнения задач сопровождения и отслеживания.
В качестве предварительного решения мне удалось установить атрибут AssemblyInformationalVersion
из конвейера сборки, и с помощью следующего контроллера я могу легко получить желаемый номер сборки:
[Route("api/[controller]")]
[ApiController]
public class VersionController : ControllerBase
{
[HttpPut(Name = "version")]
public Task<ApplicationVersion> Version()
{
return Task.FromResult(new ApplicationVersion
{
Version = ReadVersionFromAssemblyInfo()
});
}
private string ReadVersionFromAssemblyInfo()
{
return Assembly.GetEntryAssembly()
.GetCustomAttribute<AssemblyInformationalVersionAttribute>()
.InformationalVersion;
}
public class ApplicationVersion
{
public string Version { get; set; }
}
}
То, что я сделал, довольно просто:
Сначала я ввел новый ARG
с именем "VERSION_NUMBER" в Dockerfile Web-API и установил InformationalVersion
на последнем этапе публикации:
FROM microsoft/dotnet:2.2-sdk AS build
ARG VERSION_NUMBER
WORKDIR /src
COPY SomeAPI/SomeAPI.csproj SomeAPI/
RUN dotnet restore SomeAPI/SomeAPI.csproj
COPY . .
WORKDIR /src/SomeAPI
RUN dotnet publish SomeAPI.csproj -c Release -o /app -p:InformationalVersion=$VERSION_NUMBER
Затем в файле docker-compose.yml я задаю тот же arg
:
services:
someapi:
image: someApi:${TAG:-latest}
build:
context: .
dockerfile: SomeAPI/Dockerfile
args:
VERSION_NUMBER: ${VERSION_NUMBER}
И, наконец, в задаче Docker-Compose сборки TFS я установил вышеупомянутый аргумент:
Это работает как шарм, и если я получаю доступ к своей конечной точке https://somedomain.com/api/version
, тогда я получаю json с нужным номером сборки.
Проблема в том, что в моем решении я повторно использую / использую атрибут AssemblyInformationalVersion
, но мне бы хотелось, чтобы этот атрибут был установлен с правильным номером версии (например, 1.0.1). Таким образом, в конечном итоге конечная точка https://somdomain.com/api/version
будет возвращать a .json как:
{
"Version": "1.0.1",
"BuildNumber": "20190615.15"
}
Каков наилучший способ предоставления номера сборки (исходя из сборки TFS) через конечную точку Web-API? Можно ли установить пользовательское свойство (тег xml) в файле .csproj, поэтому я могу использовать AssemblyInformationalVersion
по назначению? Спасибо за помощь!