Posted on 2. July 2022

Початок роботи з DevOps і .NET MAUI

Read this article in your language IT | EN | DE | ES

Початок роботи з DevOps і .NET MAUI

.NET Multi-platform App UI (.NET MAUI) об’єднує фреймворки інтерфейсу Android, iOS, macOS і Windows в єдину структуру, щоб ви могли написати одну програму, яка працює на багатьох платформах. У цій публікації ми розглянемо, як легко реалізувати основні пайплайни DevOps для програм .NET MAUI за допомогою GitHub Actions і Azure DevOps.

Починаємо

Перш ніж налаштовувати пайплайни, нам потрібно переконатися, що у нас є кілька готових файлів.

- Для iOS, вам потрібен сертифікат підпису та профіль надання. Цей посібник допоможе вам зрозуміти як отримати ці файли.

- (Необов’язково для цієї публікації) Для Android, вам потрібен файл сховища ключів і значення пароля сховища ключів та псевдонім сховища ключів. Цей посібник допоможе вам отримати файли.

- Для Windows, вам потрібно створити та експортувати сертифікат для підпису пакета. Ви можете дізнатись необхідні кроки в цьому посібнику.

 

Тепер ми готові розпочати створення пайплайнів для програми .NET MAUI. Ми розглянемо зразки пайплайнів, додані до репозиторію dotnet/maui-samples як частину програми Weather21 у папці devops.

Вихідні файли пайплайну

 

ПРИМІТКА. Ці початкові пайплайни для базового тестування та збирання, чудово використовувати для PR-перевірок. Ці дії не стосуються публікації для зберігання чи підписання для розповсюдження. Це буде виходити за рамки цієї публікації, і буде розглянуто в наступній публікації.

Приклади дій GitHub

- Агент розміщений на MacOS: macos-build.yml

- Агент розміщений на Windows: windowsCI.yml

Приклади Azure DevOps

- Агент розміщений на MacOS: azdo_mac.yml

- Агент розміщений на Windows: azdo_windows.yml

Огляд пайплайну

У нас є 2 файли пайплайну як для GitHub Actions, так  для Azure DevOps, один запускається на віртуальній машині macos-12 , що створює цілі  iOS і MacCatalyst. Інший працює на віртуальній машині windows-2022 та створює цілі Android та Windows.

Кожен пайплайн розбивається на такі підетапи:

1. Встановити версію .NET

2. Встановіть робочі навантаження .NET MAUI

3. Встановіть файли підпису (за потреби)

4. Створення/публікація програми для TargetFramework

5. Виконайте модульні тести (за потреби)

6. Завантажити артефакти

Це спрощений потік DevOps завдяки інструменту командного рядка dotnet, до якого ми зараз маємо доступ. Ми можемо dotnet build і dotnet publish для всіх типів TargetFramework. Немає потреби в складних і заплутаних сценаріях для керування встановленням msbuild та VS preview. Дякуємо всім учасникам за те, що це сталося!

 

Давайте розберемо завдання в кожному пайплайні.

Завдання пайплайну

Коротка порада. Перевірте доступні зображення віртуальних машин, розміщені на GitHub, і встановлене програмне забезпечення, перевіривши цю таблицю.

Швидка порада. Перевірте доступні  образи віртуальних машин та встановлене програмне забезпечення розміщені на Azure DevOps, перевіривши цю таблицю.


Спільними завданнями для обох пайплайнів є Setup .NET SDK Version та Install .NET MAUI.

Ось як це виглядає в GitHub Actions:

Перше завдання використовує GitHub Action Setup .NET Core SDK , а створення змінної пайплайну полегшує зміну версій у майбутньому.

Ось як це виглядає в Azure DevOps:

Перше завдання використовує завдання Azure Devops Use .NET Core, а створення змінної пайплайну полегшує зміну версій у майбутньому.

Наступне завдання Install .NET MAUI workloads виконується через вбудований скрипт. Ви можете налаштувати --source націлюватись на конкретні версії робочих навантажень .NET MAUI, а також ви можете дізнатися більше про зміну джерел у .NET MAUI Wiki.

Пайплайн агента збірки Mac

Завдання створення/публікації пояснюється в документації .NET MAUI:

- Опублікувати додаток MacCatalyst

- Опублікувати додаток для iOS

Наприклад, завдання «Опублікувати MacCatalyst» у GitHub Actions:

і те саме завдання в Azure DevOps:

Щоб полегшити роботу з dotnet publish, перший рядок переходить до папки, де існує  WeatherTwentyOne.sln. У простішій структурі сховища вам не знадобиться цей перший рядок.

Давайте розглянемо команду dotnet publish:


Останнім завданням є публікація артефактів у GitHub Pipeline, яка використовує дію GitHub Upload a Build Artifact.

В Azure DevOps це двоетапний процес: спочатку завдання «Копіювати файли» копіює файли в $(Build.ArtifactStagingDirectory), а потім завдання «Опублікувати артефакти збірки» публікує артефакт.

Існує один додатковий крок для iOS – встановлення сертифіката підпису та профілю надання.

Ця документація GitHub пояснює, як інсталювати ці файли як частину пайплайну для GitHub Actions. Дотримуючись інструкцій, це завдання:
На Azure DevOps, гайди Azure DevOps Sign your Apple App проведуть вас через процес додавання сертифіката та файлу профілю надання до бібліотеки захищених файлів. Після завантаження туди, завдання Install Apple Certificate та Install Apple Provisioning Profile установлять його як частину вашого завдання пайплайну. Ось як виглядатиме пайплайн:

Пайплайн Windows Build Agent

Завдання створення/публікації пояснюється в документації .NET MAUI:

- Опублікувати програму Windows

- Опублікувати додаток для Android

Наприклад, завдання Android Publish у GitHub Actions:
і те саме завдання в Azure DevOps:
Перший крок наводить до папки з WeatherTwentyOne.sln і виконує завдання dotnet publish. Давайте розглянемо команду dotnet publish:

Для Github Actions крок «Опублікувати артефакт» залишається незмінним, дія GitHub «Завантажити артефакт збірки» працює на обох Mac та Windows агентах.

Для Azure Devops завдання «Копіювати файли» та «Опублікувати артефакти збірки» працюють як на агентах Mac, так і на Windows.

Для Windows, є два додаткових завдання. Перший — це збереження та декодування файлу сертифіката підпису.

У GitHub Actions, цей процес наступний:

1. Створений файл сертифіката підпису має бути закодований у форматі Base64. Це можна зробити за допомогою certutil on Windows, дотримуйтесь документації. На Mac, ви можете запустити base64 -i <cert_file>.pfx | pbcopy

2. Рядок у кодуванні Base64 потрібно зберігати в GitHub Actions Secrets відповідно до документації GitHub Actions Encrypted Secrets Documentation.

 

3. Розшифруйте секрет у завданні пайплайну:

У Azure DevOps, дотримуйтесь посібника CI/CD Pipeline Overview і завантажте файл до Secure Files Library. Потім завантажте та встановіть файл за допомогою завдання Завантажити захищений файл:

Друге завдання полягає у використанні цього файлу сертифіката для підпису MSIX, згенерованого з dotnet publish. Дотримуючись цього посібника Azure DevOps, ми отримуємо таке завдання в GitHub Actions:

і те саме завдання в Azure DevOps, безпосередньо використовуючи фрагмент коду, наданий у посібнику:

У GitHub Actions для Android Signing, зразки пайплайнів містять завдання, розкоментуйте та перейдіть за посиланнями за потреби. Подібно до  Windows, спочатку закодуйте в Base64 і декодуйте файл Keystore. Наступне завдання — підписати згенерований файл apk за допомогою jarsigner. 

У Azure DevOps для Android Signing цей гайд крок за кроком показує, як підписати свою програму Android. Тут показано, як безпечно завантажити файли підпису, а потім як налаштувати завдання Azure DevOps для Android Signing.

Висновки

Сподіваюся, це допоможе вам розпочати налаштування DevOps для програм .NET MAUI за допомогою GitHub Actions та Azure DevOps. Зразки файлів yaml:

1. Приклади дій GitHub

- Агент розміщений на MacOS: macos-build.yml

- Агент розміщений на Windows: windowsCI.yml

2. Приклади Azure DevOps

- Агент розміщений на MacOS: azdo_mac.yml

- Агент розміщений на Windows: azdo_windows.yml

Перегляньте інші зразки на dotnet/maui-samples. Будь ласка, спробуйте .NET MAUI, дізнайтеся більше на dot.net/maui!

Source



Exception: Stack empty.

Add comment


(Will show your Gravatar icon)

  Country flag

biuquote
  • Comment
  • Preview
Loading