Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Kom igång med GitHub Actions genom att skapa ett arbetsflöde för att skapa en avbildning av en virtuell dator.
Med GitHub Actions kan du påskynda CI/CD-processen genom att skapa anpassade avbildningar av virtuella datorer med artefakter från dina arbetsflöden. Du kan både skapa avbildningar och distribuera dem till ett delat bildgalleri.
Du kan sedan använda dessa avbildningar för att skapa virtuella datorer och skalningsuppsättningar för virtuella datorer.
Åtgärden för att bygga virtuell maskinbild använder Azure Image Builder-tjänsten.
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. Skapa ett konto kostnadsfritt.
- Ett GitHub-konto med en aktiv lagringsplats. Om du inte har ett sådant kan du registrera dig utan kostnad.
- I det här exemplet används Java Spring PetClinic Sample Application.
- Ett Azure Compute-galleri med en avbildning.
Översikt över arbetsflödesfil
Ett arbetsflöde definieras av en YAML-fil (.yml) i /.github/workflows/ sökvägen på lagringsplatsen. Den här definitionen innehåller de olika steg och parametrar som utgör arbetsflödet.
Filen har tre avsnitt:
| Section | Tasks |
|---|---|
| autentisering | 1. Lägg till en användarhanterad identitet. 2. Konfigurera tjänstens huvudnamn eller Öppna ID Connect. 3. Skapa en GitHub-hemlighet. |
| Bygge | 1. Konfigurera miljön. 2. Skapa appen. |
| Image | 1. Skapa en VM-avbildning. 2. Skapa en virtuell dator. |
Skapa en användarhanterad identitet
Du behöver en användarhanterad identitet för Azure Image Builder (AIB) för att distribuera avbildningar. Din användartilldelade hanterade identitet i Azure används under avbildningsprocessen för att läsa och skriva bilder till ett delat bildgalleri.
Skapa en användarhanterad identitet med Azure CLI eller Azure-portalen. Skriv ned namnet på din hanterade identitet.
Anpassa den här JSON-koden. Ersätt platshållarna för
{subscriptionID}och{rgName}med ditt prenumerations-ID och resursgruppsnamn.{ "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": [] } ] } }Använd den här JSON-koden för att skapa en ny anpassad roll med JSON.
Öppna Azure Compute-galleriet i Azure-portalen och gå till Åtkomstkontroll (IAM)..
Välj Lägg till rolltilldelning och tilldela rollen Bildskapande till din användarhanterade identitet.
Generera autentiseringsuppgifter för distribution
Om du vill använda Azure Login-åtgärden med OIDC måste du konfigurera en federerad identitetsautentiseringsuppgift i ett Microsoft Entra-program eller en användartilldelad hanterad identitet.
Alternativ 1: Microsoft Entra-program
- Skapa ett Microsoft Entra-program med en tjänsthuvudman via Azure-portalen, Azure CLI eller Azure PowerShell.
- Kopiera värdena för klient-ID, prenumerations-ID och katalog-ID (klientorganisation) som ska användas senare i ditt GitHub Actions-arbetsflöde.
- Tilldela tjänstens principal en lämplig roll via Azure Portal, Azure CLI eller Azure PowerShell.
- Konfigurera en federerad identitetsautentiseringsuppgift i ett Microsoft Entra-program för att lita på token som utfärdats av GitHub Actions till din GitHub-lagringsplats.
Alternativ 2: Användartilldelad hanterad identitet
- Skapa en användartilldelad hanterad identitet.
- Kopiera värdena för klient-ID, prenumerations-ID och katalog-ID (klientorganisation) som ska användas senare i ditt GitHub Actions-arbetsflöde.
- Tilldela en lämplig roll till din användartilldelade hanterade identitet.
- Konfigurera en federerad identitetsautentiseringsuppgift för en användartilldelad hanterad identitet för att lita på token som utfärdats av GitHub Actions till din GitHub-lagringsplats.
Skapa GitHub-hemligheter
Du måste ange programmets klient-ID, katalog (tenant)-ID och prenumerations-ID för inloggningsåtgärden. Dessa värden kan antingen anges direkt i arbetsflödet eller lagras i GitHub-hemligheter och refereras till i arbetsflödet. Att spara värdena som GitHub-hemligheter är det säkrare alternativet.
Gå till din lagringsplats i GitHub.
Välj Säkerhetshemligheter > och variabler > Åtgärder.
Välj Ny lagringsplatshemlighet.
Anmärkning
Om du vill förbättra arbetsflödets säkerhet på offentliga lagringsplatser använder du miljöhemligheter i stället för lagringsplatshemligheter. Om miljön kräver godkännande kan ett jobb inte komma åt miljöhemligheter förrän en av de nödvändiga granskarna godkänner det.
Skapa hemligheter för
AZURE_CLIENT_ID,AZURE_TENANT_IDochAZURE_SUBSCRIPTION_ID. Kopiera dessa värden från ditt Microsoft Entra-program eller användartilldelade hanterade identiteter för dina GitHub-hemligheter:GitHub-hemlighet Microsoft Entra-program eller användartilldelad hanterad identitet AZURE_CLIENT_ID Klient-ID AZURE_SUBSCRIPTION_ID Prenumerations-ID AZURE_TENANT_ID Katalog-ID (hyresgäst) Anmärkning
Av säkerhetsskäl rekommenderar vi att du använder GitHub Secrets i stället för att skicka värden direkt till arbetsflödet.
Använda Azure-inloggningsåtgärden
Använd din GitHub-hemlighet med azure-inloggningsåtgärden för att autentisera till Azure.
För Open ID Connect använder du en federerad autentiseringsuppgift som är associerad med din Active Directory-app.
Mer information om hur du refererar till GitHub-hemligheter i en arbetsflödesfil finns i Använda krypterade hemligheter i ett arbetsflöde i GitHub Docs.
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 }}
Konfigurera Java
Konfigurera Java-miljön med åtgärden Java Setup SDK. I det här exemplet konfigurerar du miljön, skapar med Maven och matar sedan ut en artefakt.
GitHub-artefakter är ett sätt att dela filer i ett arbetsflöde mellan jobb. Du skapar en artefakt för att lagra JAR-filen och sedan lägga till den i den virtuella datorbilden.
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
Skapa avbildningen
Använd åtgärden Skapa Azure Virtual Machine Image för att skapa en anpassad avbildning av virtuella datorer.
Ersätt platshållarna för {subscriptionID}, {rgName}och {Identity} med ditt prenumerations-ID, resursgruppsnamn och hanterade identitetsnamn. Ersätt värdena {galleryName} för och {imageName} med ditt bildgallerinamn och ditt bildnamn.
Anmärkning
Om åtgärden Skapa app-bakad bild misslyckas med ett behörighetsfel, kontrollera att du har tilldelat rollen för bildskapande till din användarhanterade identitet.
- 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'
Åtgärdsargument för virtuell dator
| Indata | Krävs | Description |
|---|---|---|
resource-group-name |
Yes | Den resursgrupp som används för att lagra och spara artefakter under byggprocessen. |
image-builder-template-name |
Nej | Namnet på den mallresurs för avbildningsverktyget som används. |
location |
Yes | Platsen där Azure Image Builder ska köras. Se platser som stöds. |
build-timeout-in-minutes |
Nej | Tid efter vilken bygget avbryts. Standardinställning är 240. |
vm-size |
Valfritt | Som standard Standard_D1_v2 används. Se storlekar för virtuella datorer. |
managed-identity |
Yes | Den användarhanterade identitet som du skapade tidigare. Använd den fullständiga identifieraren om din identitet finns i en annan resursgrupp. Använd namnet om det finns i samma resursgrupp. |
source-os |
Yes | Operativsystemtypen för basavbildningen (Linux eller Windows) |
source-image-type |
Yes | Den basavbildningstyp som ska användas för att skapa den anpassade avbildningen. |
source-image |
Yes | Resursidentifieraren för basavbildningen. En källbild ska finnas i samma Azure-region som anges i indatavärdet för platsen. |
customizer-source |
Nej | Katalogen där du kan behålla alla artefakter som behöver läggas till i basavbildningen för anpassning. Som standard är värdet ${{ GITHUB.WORKSPACE }}/workflow-artifacts. |
customizer-destination |
Nej | Det här är katalogen i den anpassade avbildningen där artefakter kopieras till. |
customizer-windows-update |
Nej | Endast för Windows. Booleskt värde. Om truekör avbildningsverktyget Windows Update i slutet av anpassningarna. |
dist-location |
Nej | För SharedImageGallery är detta dist-type. |
dist-image-tags |
Nej | Det här är användardefinierade taggar som läggs till i den anpassade avbildningen som skapats (exempel: version:beta). |
Skapa en virtuell dator
Som ett sista steg skapar du en virtuell dator från avbildningen.
Ersätt platshållarna för
{rgName}med resursgruppens namn.Lägg till en GitHub-hemlighet med lösenordet för den virtuella datorn (
VM_PWD). Var noga med att skriva ned lösenordet eftersom du inte kommer att kunna se det igen. Användarnamnet ärmyuser.
- 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 }}"
Slutför 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 }}"
Nästa steg
- Lär dig hur du distribuerar till Azure.