Aangepaste installatiekopieën voor virtuele machines bouwen met GitHub Actions en Azure
Ga aan de slag met de GitHub Actions door een werkstroom te maken om een installatiekopieën van een virtuele machine te maken.
Met GitHub Actions kunt u uw CI/CD-proces versnellen door aangepaste installatiekopieën van virtuele machines te maken met artefacten uit uw werkstromen. U kunt zowel installatiekopieën maken als distribueren naar een shared image gallery.
Vervolgens kunt u deze installatiekopieën gebruiken om virtuele machines en virtuele-machineschaalsets te maken.
De actie voor de installatiekopieën van de virtuele machine bouwen maakt gebruik van de Azure Image Builder-service.
Vereisten
- Een Azure-account met een actief abonnement. Gratis een account maken
- Een GitHub-account met een actieve opslagplaats. Als u geen account hebt, kunt u zich registreren voor een gratis account.
- In dit voorbeeld wordt de Java Spring PetClinic-voorbeeldtoepassing gebruikt.
- Een Azure Compute-galerie met een installatiekopieën.
Overzicht van werkstroom bestand
Een werkstroom wordt gedefinieerd door een YAML-bestand (.yml) in het pad /.github/workflows/
in uw opslagplaats. Deze definitie bevat de verschillende stappen en parameters die deel uitmaken van de werkstroom.
Het bestand heeft drie secties:
Sectie | Opdrachten |
---|---|
Verificatie | 1. Een door de gebruiker beheerde identiteit toevoegen. 2. Stel een service-principal of Open ID-Verbinding maken in. 3. Maak een GitHub-geheim. |
Bouwen | 1. Stel de omgeving in. 2. Bouw de app. |
Installatiekopie | 1. Maak een VM-installatiekopieën. 2. Maak een virtuele machine. |
Een door de gebruiker beheerde identiteit maken
U hebt een door de gebruiker beheerde identiteit nodig voor Azure Image Builder (AIB) om installatiekopieën te distribueren. Uw door de gebruiker toegewezen beheerde Identiteit van Azure wordt gebruikt tijdens de build van de installatiekopieën om afbeeldingen te lezen en te schrijven naar een Shared Image Gallery.
Maak een door de gebruiker beheerde identiteit met Azure CLI of Azure Portal. Noteer de naam van uw beheerde identiteit.
Pas deze JSON-code aan. Vervang de tijdelijke aanduidingen voor
{subscriptionID}
en{rgName}
door de naam van uw abonnements-id en resourcegroep.{ "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": [] } ] } }
Gebruik deze JSON-code om een nieuwe aangepaste rol te maken met JSON.
Open uw Azure Compute Gallery in Azure Portal en ga naar Toegangsbeheer (IAM).
Selecteer Roltoewijzing toevoegen en wijs de rol Voor het maken van afbeeldingen toe aan uw door de gebruiker beheerde identiteit.
Genereer implementatiereferenties
Maak een service-principal met de opdracht az ad sp create-for-rbac in de Azure CLI. Voer deze opdracht uit met Azure Cloud Shell in de Azure Portal of door de knop Uitproberen te selecteren.
az ad sp create-for-rbac --name "myML" --role contributor \
--scopes /subscriptions/<subscription-id>/resourceGroups/<group-name> \
--json-auth
De parameter --json-auth
is beschikbaar in Azure CLI-versies >= 2.51.0. Versies vóór dit gebruik --sdk-auth
met een afschaffingswaarschuwing.
Vervang in het bovenstaande voorbeeld de tijdelijke aanduidingen door uw abonnements-id, resourcegroepnaam en app-naam. De uitvoer is een JSON-object met de roltoewijzingsreferenties die toegang bieden tot uw App Service-app, vergelijkbaar met hieronder. Kopieer dit JSON-object voor later gebruik.
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
(...)
}
GitHub-geheimen maken
Ga in GitHub naar uw opslagplaats.
Ga naar Instellingen in het navigatiemenu.
Selecteer Acties voor beveiligingsgeheimen > en variabelen>.
Selecteer Nieuw opslagplaatsgeheim.
Plak de volledige JSON-uitvoer van de Azure CLI-opdracht in het waardeveld van het geheim. Geef het geheim de naam
AZURE_CREDENTIALS
.Selecteer Geheim toevoegen.
De azure-aanmeldingsactie gebruiken
Gebruik uw GitHub-geheim met de Azure-aanmeldingsactie om te verifiëren bij Azure.
In deze werkstroom verifieert u met behulp van de azure-aanmeldingsactie met de details van de service-principal die zijn opgeslagen in secrets.AZURE_CREDENTIALS
. Vervolgens voert u een Azure CLI-actie uit. Zie Versleutelde geheimen gebruiken in een werkstroom in GitHub Docs voor meer informatie over het verwijzen naar GitHub-geheimen in een werkstroom .
on: [push]
name: Create Custom VM Image
jobs:
build-image:
runs-on: ubuntu-latest
steps:
- name: Log in with Azure
uses: azure/login@v1
with:
creds: '${{ secrets.AZURE_CREDENTIALS }}'
Java configureren
Stel de Java-omgeving in met de Java Setup SDK-actie. In dit voorbeeld stelt u de omgeving in, bouwt u met Maven en voert u vervolgens een artefact uit.
GitHub-artefacten zijn een manier om bestanden te delen in een werkstroom tussen taken. U maakt een artefact om het JAR-bestand op te slaan en vervolgens toe te voegen aan de installatiekopieën van de virtuele machine.
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@v1
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
Uw installatiekopie bouwen
Gebruik de actie Installatiekopieën voor virtuele Azure-machines bouwen om een aangepaste installatiekopieën voor virtuele machines te maken.
Vervang de tijdelijke aanduidingen voor {subscriptionID}
en {rgName}
{Identity}
door de abonnements-id, de naam van de resourcegroep en de naam van de beheerde identiteit. Vervang de waarden van en {imageName}
door de naam van {galleryName}
de installatiekopieëngalerie en de naam van uw installatiekopieën.
Notitie
Als de actie App Baked Image maken mislukt met een machtigingsfout, controleert u of u de rol Voor het maken van afbeeldingen hebt toegewezen aan uw door de gebruiker beheerde identiteit.
- 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'
Actieargumenten voor virtuele machines
Invoer | Vereist | Omschrijving |
---|---|---|
resource-group-name |
Ja | De resourcegroep die wordt gebruikt voor opslag en het opslaan van artefacten tijdens het buildproces. |
image-builder-template-name |
Nee | De naam van de sjabloonresource voor de opbouwfunctie voor afbeeldingen. |
location |
Ja | De locatie waar Azure Image Builder wordt uitgevoerd. Bekijk ondersteunde locaties. |
build-timeout-in-minutes |
Nee | Tijd waarna de build wordt geannuleerd. De standaardwaarde is 240. |
vm-size |
Optioneel | Standard_D1_v2 Standaard wordt deze gebruikt. Zie de grootten van virtuele machines. |
managed-identity |
Ja | De door de gebruiker beheerde identiteit die u eerder hebt gemaakt. Gebruik de volledige id als uw identiteit zich in een andere resourcegroep bevindt. Gebruik de naam als deze zich in dezelfde resourcegroep bevindt. |
source-os |
Ja | Het type besturingssysteem van de basisinstallatiekopie (Linux of Windows) |
source-image-type |
Ja | Het basisinstallatiekopietype dat wordt gebruikt voor het maken van de aangepaste installatiekopie. |
source-image |
Ja | De resource-id voor de basisinstallatiekopieën. Een bronafbeelding moet aanwezig zijn in dezelfde Azure-regio die is ingesteld in de invoerwaarde van de locatie. |
customizer-source |
Nee | De map waarin u alle artefacten kunt bewaren die moeten worden toegevoegd aan de basisinstallatiekopieën voor aanpassing. De waarde is standaard ${{ GITHUB.WORKSPACE }}/workflow-artifacts. |
customizer-destination |
Nee | Dit is de map in de aangepaste afbeelding waarnaar artefacten worden gekopieerd. |
customizer-windows-update |
Nee | Alleen voor Windows. Booleaanse waarde. Als true de opbouwfunctie voor installatiekopieën Windows Update uitvoert aan het einde van de aanpassingen. |
dist-location |
Nee | Voor SharedImageGallery is dit de dist-type . |
dist-image-tags |
Nee | Dit zijn door de gebruiker gedefinieerde tags die worden toegevoegd aan de aangepaste installatiekopieën die zijn gemaakt (bijvoorbeeld: version:beta ). |
Uw virtuele machine maken
Als laatste stap maakt u een virtuele machine op basis van uw installatiekopieën.
Vervang de tijdelijke aanduidingen door
{rgName}
de naam van de resourcegroep.Voeg een GitHub-geheim toe met het wachtwoord van de virtuele machine (
VM_PWD
). Noteer het wachtwoord omdat u het niet meer kunt zien. De gebruikersnaam ismyuser
.
- 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 voltooien
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@v1
with:
creds: ${{secrets.AZURE_CREDENTIALS}}
- 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 }}"
Volgende stappen
- Meer informatie over het implementeren in Azure.