Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Erste Schritte mit GitHub Actions, indem Sie einen Workflow erstellen, um ein Image einer virtuellen Maschine zu erstellen.
Mit GitHub-Aktionen können Sie Ihren CI/CD-Prozess beschleunigen, indem Sie benutzerdefinierte Bilder virtueller Computer mit Artefakten aus Ihren Workflows erstellen. Sie können bilder erstellen und an eine freigegebene Bildergalerie verteilen.
Anschließend können Sie diese Images verwenden, um virtuelle Computer und Skalierungsgruppen für virtuelle Computer zu erstellen.
Die Imageaktion "Virtuelle Computer erstellen" verwendet den Azure Image Builder-Dienst.
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Kostenlos ein Konto erstellen.
- Ein GitHub-Konto mit einem aktiven Repository. Falls Sie noch nicht über ein Konto verfügen, können Sie sich kostenlos registrieren.
- In diesem Beispiel wird die Java Spring PetClinic-Beispielanwendung verwendet.
- Eine Azure Compute-Galerie mit einem Image.
Übersicht über die Workflowdatei
Ein Workflow wird durch eine YAML-Datei im Pfad /.github/workflows/ in Ihrem Repository definiert. Diese Definition enthält die verschiedenen Schritte und Parameter, die den Workflow bilden.
Die Datei enthält drei Abschnitte:
| `Section` | Aufgaben |
|---|---|
| Authentifizierung | 1. Fügen Sie eine vom Benutzer verwaltete Identität hinzu. 2. Richten Sie ein Service Principal oder Open ID Connect ein. 3. Erstellen Sie einen GitHub-Geheimschlüssel. |
| Bauen | 1. Einrichten der Umgebung. 2. Erstellen Sie die App. |
| Bild | 1. Erstellen Sie ein VM-Image. 2. Erstellen Sie einen virtuellen Computer. |
Erstellen einer vom Benutzer verwalteten Identität
Sie benötigen eine vom Benutzer verwaltete Identität für Azure Image Builder(AIB), um Bilder zu verteilen. Ihre vom Azure-Benutzer zugewiesene verwaltete Identität wird während der Imageerstellung verwendet, um Bilder in eine Shared Image Gallery zu lesen und zu schreiben.
Erstellen Sie eine vom Benutzer verwaltete Identität mit Azure CLI oder dem Azure-Portal. Notieren Sie sich den Namen Ihrer verwalteten Identität.
Passen Sie diesen JSON-Code an. Ersetzen Sie die Platzhalter für
{subscriptionID}mit Ihrer Abonnement-ID und für{rgName}mit dem Ressourcengruppennamen.{ "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": [] } ] } }Verwenden Sie diesen JSON-Code, um eine neue benutzerdefinierte Rolle mit JSON zu erstellen.
Öffnen Sie im Azure-Portal Ihre Azure Compute-Galerie und wechseln Sie zu Zugriffssteuerung (IAM).
Wählen Sie "Rollenzuweisung hinzufügen" aus und weisen Sie Ihrer vom Benutzer verwalteten Identität die Rolle für die Bilderstellung zu.
Generieren von Anmeldeinformationen für die Bereitstellung
Um die Aktion „Azure-Anmeldung“ mit OIDC zu verwenden, müssen Sie Anmeldeinformationen für eine Verbundidentität in einer Microsoft Entra-Anwendung oder eine benutzerseitig zugewiesene verwaltete Identität konfigurieren.
Option 1: Microsoft Entra-Anwendung
- Erstellen Sie eine Microsoft Entra-Anwendung mit einem Dienstprinzipal im Azure-Portal, mit Azure CLI oder Azure PowerShell.
- Kopieren Sie die Werte für Client-ID, Abonnement-ID, und Verzeichnis-ID (Mandanten-ID), um sie später in Ihrem GitHub Actions-Workflow zu verwenden.
- Weisen Sie Ihrem Dienstprinzipal über das Azure-Portal, die Azure CLI oder Azure PowerShell eine geeignete Rolle zu.
- Konfigurieren Sie Verbundidentitäts-Anmeldeinformationen für eine Microsoft Entra-Anwendung, um Token zu vertrauen, die von GitHub Actions an Ihr GitHub-Repository ausgestellt wurden.
Option 2: Benutzerseitig zugewiesene verwaltete Identität
- Erstellen einer benutzerseitig zugewiesenen verwalteten Identität.
- Kopieren Sie die Werte für Client-ID, Abonnement-ID, und Verzeichnis-ID (Mandanten-ID), um sie später in Ihrem GitHub Actions-Workflow zu verwenden.
- Weisen Sie Ihrer benutzerseitig zugewiesenen verwalteten Identität eine geeignete Rolle zu.
- Konfigurieren Sie Verbundidentitäts-Anmeldeinformationen für eine benutzerseitig zugewiesene verwaltete Identität, um Token zu vertrauen, die von GitHub Actions an Ihr GitHub-Repository ausgegeben werden.
Erstellen von GitHub-Geheimnissen
Sie müssen die Client-ID, die Verzeichnis-ID (Mandant) ihrer Anwendung und die Abonnement-ID für die Anmeldeaktion angeben. Diese Werte können entweder direkt im Workflow bereitgestellt werden oder in GitHub-Geheimnissen gespeichert und darauf in Ihrem Workflow verwiesen werden. Das Speichern der Werte als GitHub-Geheimnisse ist die sicherere Option.
Wechseln Sie in GitHub zu Ihrem Repository.
Wählen Sie Security > Secrets and variables > Actions (Sicherheit > Geheimnisse und Variablen > Aktionen) aus.
Wählen Sie "Neuer Repositoryschlüssel" aus.
Hinweis
Um die Sicherheit von Workflows in öffentlichen Repositorys zu verbessern, verwenden Sie Umgebungsgeheimnisse anstelle von Repositorygeheimnissen. Wenn die Umgebung Genehmigung erfordert, kann ein Auftrag nicht auf Umgebungsschlüssel zugreifen, bis einer der erforderlichen Prüfer es genehmigt.
Erstellen Sie Geheimnisse für
AZURE_CLIENT_ID,AZURE_TENANT_IDundAZURE_SUBSCRIPTION_ID. Kopieren Sie diese Werte aus Ihrer Microsoft Entra-Anwendung oder der vom Benutzer zugewiesenen verwalteten Identität für Ihre GitHub-Geheimnisse:GitHub-Geheimnis Microsoft Entra-Anwendung oder vom Benutzer zugewiesene verwaltete Identität AZURE_CLIENT_ID Kunden-ID AZURE_SUBSCRIPTION_ID Abonnement-ID AZURE_TENANT_ID (Azure-Mandanten-ID) Verzeichnis-ID (Mandant) Hinweis
Aus Sicherheitsgründen empfehlen wir die Verwendung von GitHub Secrets, anstatt Werte direkt an den Workflow zu übergeben.
Verwenden Sie die Azure-Anmeldeaktion
Verwenden Sie Ihren GitHub-Geheimschlüssel mit der Azure-Anmeldeaktion , um sich bei Azure zu authentifizieren.
Für Open ID Connect verwenden Sie eine Verbundanmeldeinformation, die Ihrer Active Directory-App zugeordnet ist.
Weitere Informationen zum Verweisen auf GitHub-Geheimnisse in einer Workflowdatei finden Sie unter Verwenden verschlüsselter Geheimschlüssel in einem Workflow in GitHub-Dokumenten.
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 }}
Konfigurieren von Java
Richten Sie die Java-Umgebung mit der Java Setup SDK-Aktion ein. In diesem Beispiel richten Sie die Umgebung ein, erstellen sie mit Maven und geben dann ein Artefakt aus.
GitHub-Artefakte sind eine Möglichkeit, Dateien in einem Workflow zwischen Aufträgen freizugeben. Sie erstellen ein Artefakt zum Speichern der JAR-Datei und fügen sie dann dem Image des virtuellen Computers hinzu.
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
Erstellen Ihres Images
Verwenden Sie die Aktion "Azure Virtual Machine Image erstellen", um ein benutzerdefiniertes Image für virtuelle Maschinen zu erstellen.
Ersetzen Sie die Platzhalter für {subscriptionID} Ihre Abonnement-ID, {rgName} den Ressourcengruppennamen und {Identity} den verwalteten Identitätsnamen. Ersetzen Sie die Werte von {galleryName} und {imageName} durch den Namen Ihrer Bildergalerie und den Namen Ihres Bildes.
Hinweis
Wenn die Aktion "App Baked Image erstellen" mit einem Berechtigungsfehler fehlschlägt, vergewissern Sie sich, dass Sie der vom Benutzer verwalteten Identität die Rolle zur Bilderstellung zugewiesen haben.
- 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'
Aktionsargumente für virtuelle Computer
| Input | Erforderlich | Description |
|---|---|---|
resource-group-name |
Yes | Die Ressourcengruppe, die während des Buildprozesses zum Speichern von Artefakten verwendet wird. |
image-builder-template-name |
Nein | Der Name der verwendeten Image Builder-Vorlagenressource. |
location |
Yes | Der Speicherort, an dem Azure Image Builder ausgeführt wird. Siehe unterstützte Speicherorte. |
build-timeout-in-minutes |
Nein | Zeit, nach der der Build abgebrochen wird. Der Standardwert beträgt 240. |
vm-size |
Wahlfrei |
Standard_D1_v2 Standardmäßig wird verwendet. Siehe Größen virtueller Maschinen. |
managed-identity |
Yes | Die zuvor erstellte vom Benutzer verwaltete Identität. Verwenden Sie den vollständigen Bezeichner, wenn sich Ihre Identität in einer anderen Ressourcengruppe befindet. Verwenden Sie den Namen, wenn er sich in derselben Ressourcengruppe befindet. |
source-os |
Yes | Der Betriebssystemtyp des Basisimages (Linux oder Windows) |
source-image-type |
Yes | Der Basisbildtyp, der zum Erstellen des benutzerdefinierten Bilds verwendet wird. |
source-image |
Yes | Der Ressourcenbezeichner für das Basisbild. Ein Quellbild sollte in derselben Azure-Region vorhanden sein, die im Eingabewert des Speicherorts festgelegt ist. |
customizer-source |
Nein | Das Verzeichnis, in dem Sie alle Artefakte beibehalten können, die dem Basisimage für die Anpassung hinzugefügt werden müssen. Standardmäßig ist der Wert ${{ GITHUB.WORKSPACE }}/workflow-artifacts. |
customizer-destination |
Nein | Dies ist das Verzeichnis im angepassten Bild, in das Artefakte kopiert werden. |
customizer-windows-update |
Nein | Nur für Windows. Boolescher Wert. Wenn true, wird Windows Update am Ende der Anpassungen durch den Image Builder ausgeführt. |
dist-location |
Nein | Für SharedImageGallery ist dies die dist-type. |
dist-image-tags |
Nein | Hierbei handelt es sich um benutzerdefinierte Tags, die dem erstellten benutzerdefinierten Bild hinzugefügt werden (Beispiel: version:beta). |
Erstellen Ihres virtuellen Computers
Erstellen Sie als letzten Schritt einen virtuellen Computer aus Ihrem Image.
Ersetzen Sie die Platzhalter für
{rgName}ihren Ressourcengruppennamen.Fügen Sie einen GitHub-Geheimschlüssel mit dem Kennwort des virtuellen Computers (
VM_PWD) hinzu. Notieren Sie sich das Kennwort unbedingt, da Sie es nicht wieder sehen können. Der Benutzername lautetmyuser.
- 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 }}"
Vollständige YAML-Datei
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 }}"
Nächste Schritte
- Erfahren Sie, wie Sie auf Azure bereitstellen.