Как получить уникальный номер сборки в DevOps и Cake Azure? - PullRequest
0 голосов
/ 16 мая 2019

Я использую сценарий Cake Build для сборки нашего программного обеспечения .NET, и мне нужен уникальный номер сборки, который запекается в DLL, прежде всего потому, что нам нужно знать точные двоичные файлы, которые мы использовали в случае, если нам нужно отладить файлы дампа с помощью двоичных файлов .

Во-первых, вот моя текущая задача по версии Cake:

Task("Version")
    .Does(() => 
    {
        Information("Versioning software for configuration {0} of {1}...", configuration, solution);
        var gitVersionSettings = new GitVersionSettings {
            UpdateAssemblyInfo = true
        };
        var Version = GitVersion(gitVersionSettings);
    });

Очень просто, но обновляет файлы сборки с правильными FileVersion и ProductVersion и, таким образом, обновляет библиотеки DLL.

Во-вторых, я обнаружил, что номера сборки в DevOps Azure повсюду. Вот несколько примеров:

2.1.0-PullRequest0019.7
2.0.1-beta.1+4
2.1.0-alpha.4
2.1.0-PullRequest0017.4
2.0.1-beta.1+2
2.0.0
0.1.0+70

Это последние 7 номеров сборок, и они взяты из сборок из разных веток, включая слияние исправлений в master, а затем в dev. Я заметил, что для этого конвейера сборки номер сборки пуст, поэтому я думаю, что он просто выгружает что-либо в конвейер сборки, используя мой последний набор тегов (пока только с тегами 2.0.0 и 2.0.1).

Есть три вопроса:

  1. Как получить уникальный номер сборки в моих конвейерах DevOps Azure (у меня их 3, и каждая сборка, независимо от конвейера, должна быть уникальной)?
  2. Как мне получить уникальный номер сборки в моем семантическом управлении версиями и уважать мои теги в Master?
  3. Как получить номер сборки в моем скрипте Cake для сборки как на сервере сборки Azure DevOps, так и при локальной сборке на моем компьютере (для отладки)?

EDIT

Я понял, что вы можете получить уникальный номер сборки, созданный DevOps Azure, используя $ (BuildId), чтобы ответить на вопрос 1. Я также думаю, что я могу передать номер сборки из Devure Azure в мой скрипт Cake через аргумент, который хорошо. Это больше проблема с локальными сборками и как получить уникальные номера сборок для них. Кроме того, какой формат должен сохранить мои версии. Я пытаюсь использовать формат 1.0.0 для тегов, поэтому я должен иметь четвертое число в качестве постоянно увеличивающегося номера сборки? И как это сохранить в файле AssemblyInfo.cs?

Редактировать из моего первого редактирования ... после запуска успешной сборки номер сборки изменился с идентификатора сборки на что-то другое "2.1.0-alpha.7", и я не знаю почему, потому что я указал использовать идентификатор сборки в моем конвейере.

1 Ответ

1 голос
/ 16 мая 2019

Я бы посоветовал вам сделать следующее:

GitVersion(new GitVersionSettings {
    OutputType = GitVersionOutput.BuildServer,
});

var gitVersionSettings = new GitVersionSettings {
    UpdateAssemblyInfo = true
};

var Version = GitVersion(gitVersionSettings);

т.е. запустите GitVersion дважды. Первый использует выходной тип BuildServer, что должно привести к тому, что GitVersion обновит номер сборки Azure DevOps, чтобы он соответствовал заявленному номеру версии для хранилища.

Второе выполнение позволяет вам перенести номер версии в локальную переменную, как вы это делаете в настоящее время.

Причина, по которой это необходимо, заключается в том, что GitVersion не может одновременно обновить версию сервера сборки и вывести файл JSON, который используется для генерации утвержденных номеров версий, которые возвращаются во втором вызове.

ПРИМЕЧАНИЕ: Скорее всего, вы захотите делать это только тогда, когда вы действительно используете DevOps Azure, поэтому вы бы поместили первое выполнение в его собственное, если блок.

Я использую подход, аналогичный тому, что предлагается в этом вопросе в моем проекте Cake.Recipe здесь:

https://github.com/cake-contrib/Cake.Recipe/blob/develop/Cake.Recipe/Content/gitversion.cake#L56

...