Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Начните работу с GitHub Actions , создав рабочий процесс для создания образа виртуальной машины.
С помощью GitHub Actions можно ускорить процесс CI/CD, создав пользовательские образы виртуальных машин с артефактами из рабочих процессов. Вы можете создавать образы и распространять их в общую коллекцию образов.
Затем эти образы можно использовать для создания виртуальных машин и масштабируемых наборов виртуальных машин.
Действие по созданию образа виртуальной машины использует службу Azure Image Builder.
Предпосылки
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Учетная запись GitHub с активным репозиторием. Если у вас ее нет, зарегистрируйтесь бесплатно.
- В этом примере используется пример приложения Java Spring PetClinic.
- Галерея вычислительных ресурсов Azure с образом.
Общие сведения о файле рабочего процесса
Рабочий процесс определяется файлом YAML (.yml) по пути /.github/workflows/ в вашем репозитории. Это определение содержит разные шаги и параметры рабочего процесса.
Файл содержит три раздела:
| Секция | Tasks |
|---|---|
| Аутентификация | 1. Добавьте управляемый пользователем идентификатор. 2. Настройте субъект-службы OpenID Connect. 3. Создайте секрет GitHub. |
| Сборка | 1. Настройка среды. 2. Создание приложения. |
| Изображение | 1. Создание образа виртуальной машины. 2. Создание виртуальной машины. |
Создание управляемой пользователем идентификации
Для распространения образов вам потребуется управляемое пользователем удостоверение для Azure Image Builder(AIB). Пользовательское управляемое удостоверение Azure будет использоваться во время сборки образа для чтения и записи изображений в Shared Image Gallery.
Создайте управляемое пользователем удостоверение с помощью Azure CLI или портала Azure. Запишите имя управляемого удостоверения.
Настройте этот код JSON. Замените заполнители
{subscriptionID}и{rgName}на идентификатор вашей подписки и имя вашей группы ресурсов.{ "properties": { "roleName": "Image Creation Role", "IsCustom": true, "description": "Azure Image Builder access to create resources for the image build", "assignableScopes": [ "/subscriptions/{subscriptionID}/resourceGroups/{rgName}" ], "permissions": [ { "actions": [ "Microsoft.Compute/galleries/read", "Microsoft.Compute/galleries/images/read", "Microsoft.Compute/galleries/images/versions/read", "Microsoft.Compute/galleries/images/versions/write", "Microsoft.Compute/images/write", "Microsoft.Compute/images/read", "Microsoft.Compute/images/delete" ], "notActions": [], "dataActions": [], "notDataActions": [] } ] } }Используйте этот код JSON для создания новой настраиваемой роли с помощью JSON.
На портале Azure откройте Галерею вычислительных ресурсов Azure и перейдите в раздел Управление доступом (IAM).
Выберите "Добавить назначение ролей " и назначьте роль создания образа управляемому пользователем удостоверению.
Создание учетных данных для развертывания.
Чтобы использовать действие входа Azure с OIDC, необходимо настроить федеративные учетные данные удостоверения в приложении Microsoft Entra или управляемом удостоверении, назначаемом пользователем.
Вариант 1. Приложение Microsoft Entra
- Создайте приложение Microsoft Entra с субъектом-службой с помощью портала Azure, Azure CLI или Azure PowerShell.
- Скопируйте значения для идентификатора клиента, идентификатора подписки и идентификатора каталога (клиента), чтобы использовать его позже в рабочем процессе GitHub Actions.
- Назначьте соответствующую роль субъекту-службе, портал Azure, Azure CLI или Azure PowerShell.
- Настройте учетные данные федеративного удостоверения в приложении Microsoft Entra, чтобы доверять токенам, выдаваемым GitHub Actions в вашем репозитории GitHub.
Вариант 2. Управляемое удостоверение, назначаемое пользователем
- Создайте управляемое удостоверение, назначаемое пользователем.
- Скопируйте значения для идентификатора клиента, идентификатора подписки и идентификатора каталога (клиента), чтобы использовать его позже в рабочем процессе GitHub Actions.
- Назначьте соответствующую роль управляемому удостоверению, назначенному пользователем.
- Настройте учетные данные федеративного удостоверения в управляемом удостоверении , назначаемом пользователем, для доверия маркеров, выданных GitHub Actions в репозитории GitHub.
Создавайте секреты GitHub
Необходимо указать идентификатор клиента приложения, идентификатор каталога (клиента) и идентификатор подписки для действия входа. Эти значения могут быть указаны непосредственно в рабочем процессе или храниться в секретах GitHub с указанием ссылок на них в рабочем процессе. Сохранение значений в виде секретов GitHub является более безопасным вариантом.
В GitHub перейдите в репозиторий.
Выберите > переменных>".
Нажмите Создать секрет репозитория.
Замечание
Чтобы повысить безопасность рабочих процессов в общедоступных репозиториях, используйте секреты среды вместо секретов репозитория. Если среда требует утверждения, задание не сможет получить доступ к секретам среды, пока один из обязательных рецензентов не утвердит его.
Создайте секреты для
AZURE_CLIENT_ID,AZURE_TENANT_IDиAZURE_SUBSCRIPTION_ID. Скопируйте эти значения из приложения Microsoft Entra или назначенного пользователем управляемого удостоверения для секретов GitHub.Секрет GitHub Приложение Microsoft Entra или назначенное пользователем управляемое удостоверение AZURE_CLIENT_ID Идентификатор клиента AZURE_SUBSCRIPTION_ID ID подписки AZURE_TENANT_ID (идентификатор арендатора Azure) Идентификатор каталога (арендатора) Замечание
По соображениям безопасности рекомендуется использовать секреты GitHub, а не передавать значения непосредственно в рабочий процесс.
Используйте действие входа в Azure
Используйте секрет GitHub с действием входа Azure для проверки подлинности в Azure.
Для Open ID Connect вы будете использовать федеративные учетные данные, связанные с приложением Active Directory.
Дополнительные сведения о ссылке на секреты GitHub в файле рабочего процесса см. в статье "Использование зашифрованных секретов в рабочем процессе в документации GitHub".
on: [push]
name: Create Custom VM Image
jobs:
build-image:
runs-on: ubuntu-latest
steps:
- name: Log in with Azure
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
Настройка Java
Настройте среду Java с помощью действия пакета SDK для установки Java. В этом примере вы настроите среду, создадите с помощью Maven и выведете артефакт.
Артефакты GitHub — это способ совместного использования файлов в рабочем процессе между заданиями. Вы создадите артефакт для хранения JAR-файла, а затем добавьте его в образ виртуальной машины.
on: [push]
name: Create Custom VM Image
jobs:
build-image:
runs-on: ubuntu-latest
strategy:
matrix:
java: [ '17' ]
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Login via Az module
uses: azure/login@v2
with:
creds: ${{secrets.AZURE_CREDENTIALS}}
- name: Set up JDK ${{matrix.java}}
uses: actions/setup-java@v2
with:
java-version: ${{matrix.java}}
distribution: 'adopt'
cache: maven
- name: Build with Maven Wrapper
run: ./mvnw -B package
- name: Build Java
run: mvn --batch-mode --update-snapshots verify
- run: mkdir staging && cp target/*.jar staging
- uses: actions/upload-artifact@v2
with:
name: Package
path: staging
Сборка образа
Используйте действие "Сборка образа виртуальной машины Azure " для создания пользовательского образа виртуальной машины.
Замените заполнители {subscriptionID}, {rgName} и {Identity} на ваш идентификатор подписки, имя группы ресурсов и имя управляемого удостоверения. Замените значения {galleryName} и {imageName} вашим именем галереи изображений и именем изображения.
Замечание
Если действие Create App Baked Image завершается ошибкой прав доступа, убедитесь, что роль Image Creation назначена на управляемое пользователем удостоверение.
- name: Create App Baked Image
id: imageBuilder
uses: azure/build-vm-image@v0
with:
location: 'eastus2'
resource-group-name: '{rgName}'
managed-identity: '{Identity}' # Managed identity
source-os-type: 'windows'
source-image-type: 'platformImage'
source-image: MicrosoftWindowsServer:WindowsServer:2019-Datacenter:latest #unique identifier of source image
dist-type: 'SharedImageGallery'
dist-resource-id: '/subscriptions/{subscriptionID}/resourceGroups/{rgName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{imageName}/versions/0.1.${{ GITHUB.RUN_ID }}' #Replace with the resource id of your shared image gallery's image definition
dist-location: 'eastus2'
Аргументы действий виртуальной машины
| Ввод | Обязательно | Description |
|---|---|---|
resource-group-name |
Да | Группа ресурсов, используемая для хранения и сохранения артефактов во время процесса сборки. |
image-builder-template-name |
нет | Имя используемого ресурса шаблона построителя образов. |
location |
Да | Расположение, в котором будет выполняться построитель образов Azure. См. поддерживаемые расположения. |
build-timeout-in-minutes |
нет | Время, после которого сборка отменяется. Значение по умолчанию — 240. |
vm-size |
Необязательно | По умолчанию Standard_D1_v2 будет использоваться. См. размеры виртуальных машин. |
managed-identity |
Да | Управляемая пользователем идентификация, которую вы создали ранее. Используйте полный идентификатор, если он находится в другой группе ресурсов. Используйте имя, если оно находится в той же группе ресурсов. |
source-os |
Да | Тип ОС базового образа (Linux или Windows) |
source-image-type |
Да | Базовый тип образа, который будет использоваться для создания пользовательского образа. |
source-image |
Да | Идентификатор ресурса для базового образа. Исходный образ должен присутствовать в одном регионе Azure, заданном в входном значении расположения. |
customizer-source |
нет | Каталог, в котором можно сохранить все артефакты, которые необходимо добавить в базовый образ для настройки. По умолчанию значение равно ${{ GITHUB.WORKSPACE }}/workflow-artifacts. |
customizer-destination |
нет | Это каталог в настраиваемом изображении, в который копируются файлы. |
customizer-windows-update |
нет | Только для Windows. Логическое значение. Если true, построитель образов выполнит обновление Windows после завершения кастомизации. |
dist-location |
нет | Для SharedImageGallery это dist-type. |
dist-image-tags |
нет | Это пользовательские теги, добавляемые в созданный пользовательский образ (например: version:beta). |
Создание виртуальной машины
На последнем шаге создайте виртуальную машину из образа.
Замените заполнители
{rgName}именем группы ресурсов.Добавьте секрет GitHub с паролем виртуальной машины (
VM_PWD). Не забудьте записать пароль, так как вы не сможете увидеть его снова. Имя пользователя равноmyuser.
- name: CREATE VM
uses: azure/CLI@v1
with:
azcliversion: 2.0.72
inlineScript: |
az vm create --resource-group ghactions-vMimage --name "app-vm-${{ GITHUB.RUN_NUMBER }}" --admin-username myuser --admin-password "${{ secrets.VM_PWD }}" --location eastus2 \
--image "${{ steps.imageBuilder.outputs.custom-image-uri }}"
Полный YAML
on: [push]
name: Create Custom VM Image
jobs:
build-image:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Login via Az module
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Setup Java 1.8.x
uses: actions/setup-java@v1
with:
java-version: '1.8.x'
- name: Build Java
run: mvn --batch-mode --update-snapshots verify
- run: mkdir staging && cp target/*.jar staging
- uses: actions/upload-artifact@v2
with:
name: Package
path: staging
- name: Create App Baked Image
id: imageBuilder
uses: azure/build-vm-image@v0
with:
location: 'eastus2'
resource-group-name: '{rgName}'
managed-identity: '{Identity}' # Managed identity
source-os-type: 'windows'
source-image-type: 'platformImage'
source-image: MicrosoftWindowsServer:WindowsServer:2019-Datacenter:latest #unique identifier of source image
dist-type: 'SharedImageGallery'
dist-resource-id: '/subscriptions/{subscriptionID}/resourceGroups/{rgName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{imageName}/versions/0.1.${{ GITHUB.RUN_ID }}' #Replace with the resource id of your shared image gallery's image definition
dist-location: 'eastus2'
- name: CREATE VM
uses: azure/CLI@v1
with:
azcliversion: 2.0.72
inlineScript: |
az vm create --resource-group ghactions-vMimage --name "app-vm-${{ GITHUB.RUN_NUMBER }}" --admin-username myuser --admin-password "${{ secrets.VM_PWD }}" --location eastus2 \
--image "${{ steps.imageBuilder.outputs.custom-image-uri }}"
Дальнейшие шаги
- Узнайте, как развернуть в Azure.