Megosztás:


Egyéni virtuálisgép-rendszerképek létrehozása a GitHub Actions és az Azure használatával

Ismerkedjen meg a GitHub Actions szolgáltatással egy munkafolyamat létrehozásával, amely létrehoz egy virtuálisgép-rendszerképet.

A GitHub Actions segítségével felgyorsíthatja a CI/CD-folyamatot, ha egyéni virtuálisgép-lemezképeket hoz létre a munkafolyamatok összetevőivel. Képeket is készíthet, és terjesztheti őket egy megosztott képgyűjteményben.

Ezeket a rendszerképeket ezután virtuális gépek és virtuálisgép-méretezési csoportok létrehozásához használhatja.

A virtuális gép rendszerkép építési művelet az Azure Image Builder szolgáltatást használja.

Előfeltételek

Munkafolyamat-fájl áttekintése

A munkafolyamatokat egy YAML-fájl (.yml) határozza meg az /.github/workflows/ adattár elérési útján. Ez a definíció a munkafolyamatot alkotó különböző lépéseket és paramétereket tartalmazza.

A fájl három szakaszból áll:

Szakasz Tasks
Authentication 1. Felhasználó által felügyelt identitás hozzáadása.
2. Szolgáltatási főfelhasználó vagy Open ID Connect beállítása.
3. Hozzon létre egy GitHub-titkos kulcsot.
Épít 1. A környezet beállítása.
2. Az alkalmazás létrehozása.
Image 1. Virtuálisgép-rendszerkép létrehozása.
2. Hozzon létre egy virtuális gépet.

Felhasználó által felügyelt identitás létrehozása

A rendszerképek terjesztéséhez szüksége lesz egy felhasználó által felügyelt identitásra az Azure Image Builderhez (AIB). Az Azure-beli felhasználó által hozzárendelt felügyelt identitást a rendszer a rendszerkép összeállítása során fogja használni képek olvasására és közös képgyűjteménybe való írására.

  1. Felhasználó által felügyelt identitás létrehozása az Azure CLI-vel vagy az Azure Portallal. Írja le a felügyelt identitás nevét.

  2. Szabja testre ezt a JSON-kódot. Cserélje le a {subscriptionID} helyőrzőt az előfizetés azonosítójára és a {rgName} helyőrzőt az erőforráscsoport nevére.

    {
    "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": []
            }
        ]
        } 
    } 
    
  3. Ezzel a JSON-kóddal új egyéni szerepkört hozhat létre a JSON használatával.

  4. Az Azure Portalon nyissa meg az Azure Compute Galleryt, és lépjen a Hozzáférés-vezérlés (IAM) elemre.

  5. Válassza a Szerepkör-hozzárendelés hozzáadása lehetőséget, és rendelje hozzá a képlétrehozási szerepkört a felhasználó által felügyelt identitáshoz.

Üzembehelyezési hitelesítő adatok létrehozása

Az Azure Bejelentkezési művelet OIDC-vel való használatához konfigurálnia kell egy összevont identitás hitelesítő adatait egy Microsoft Entra-alkalmazáson vagy egy felhasználó által hozzárendelt felügyelt identitáson.

1. lehetőség: Microsoft Entra-alkalmazás

2. lehetőség: Felhasználó által hozzárendelt felügyelt identitás

GitHub-titkos kódok létrehozása

A bejelentkezési művelethez meg kell adnia az alkalmazás ügyfél-, címtár- (bérlői) azonosítóját és előfizetés-azonosítóját. Ezek az értékek közvetlenül a munkafolyamatban is megadhatók, vagy a GitHub titkokban tárolhatók, és a munkafolyamatban hivatkozhatók. Az értékek GitHub-titkos kulcsként való mentése a biztonságosabb megoldás.

  1. A GitHubon nyissa meg az adattárat.

  2. Válassza ki a Biztonsági > titkos kulcsok és változók > műveletek lehetőséget.

    Képernyőkép egy titkos kód hozzáadásáról

  3. Válassza az Új tárház titkos kódját.

    Megjegyzés:

    A nyilvános adattárak munkafolyamat-biztonságának javítása érdekében tárházi titkos kulcsok helyett használjon környezeti titkos kulcsokat . Ha a környezet jóváhagyást igényel, a feladatok nem férhetnek hozzá a környezeti titkos kódokhoz, amíg az egyik szükséges véleményező nem hagyja jóvá.

  4. Titkos kulcsok létrehozása a következőhöz AZURE_CLIENT_ID: , AZURE_TENANT_IDés AZURE_SUBSCRIPTION_ID. Másolja ki ezeket az értékeket a Microsoft Entra-alkalmazásból vagy a felhasználó által hozzárendelt felügyelt identitásból a GitHub-titkos kulcsokhoz:

    GitHub-titkos kód Microsoft Entra-alkalmazás vagy felhasználó által hozzárendelt felügyelt identitás
    AZURE_CLIENT_ID (Az Azure ügyfélazonosító) Ügyfélazonosító
    AZURE_SUBSCRIPTION_ID Előfizetés azonosító
    AZURE_TENANT_ID Címtár (ügyfél) azonosítója

    Megjegyzés:

    Biztonsági okokból azt javasoljuk, hogy a GitHub Titkos kulcsokat használja ahelyett, hogy közvetlenül a munkafolyamatnak ad át értékeket.

Az Azure bejelentkezési műveletének használata

Az Azure Bejelentkezési művelettel a GitHub-titkos kód használatával hitelesítheti magát az Azure-ban.

Az Open ID Connect esetében az Active Directory-alkalmazáshoz társított összevont hitelesítő adatokat kell használnia.

A GitHub-titkos kódok munkafolyamat-fájlban való hivatkozásáról a GitHub Docs titkosított titkos kulcsainak használata című témakörben olvashat bővebben.

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 }}

A Java konfigurálása

Állítsa be a Java-környezetet a Java Setup SDK művelettel. Ebben a példában beállítja a környezetet, a Mavennel épít, majd egy összetevőt ad ki.

A GitHub-összetevők használatával fájlokat oszthat meg egy munkafolyamatban a feladatok között. ** Létrehoz egy tárolóelemet a JAR-fájl számára, majd hozzáadja a virtuális gép képéhez.

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

A rendszerkép létrehozása

Egyéni virtuálisgép-rendszerkép létrehozásához használja az Azure Virtual Machine Image létrehozása műveletet .

Cserélje le a helyőrzőket {subscriptionID}{rgName}{Identity} az előfizetés azonosítójára, az erőforráscsoport nevére és a felügyelt identitás nevére. Cserélje le {galleryName} és {imageName} értékeit a saját képgyűjteményének nevére és a kép nevére.

Megjegyzés:

Ha az Alkalmazás Baked Image létrehozása művelet engedélyhiba miatt meghiúsul, ellenőrizze, hogy hozzárendelte-e a Képlétrehozási jogosultságot a felhasználó által kezelt identitáshoz.

    - 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'

Virtuális gép műveleti argumentumai

Bemenet Kötelező Description
resource-group-name Igen A buildelési folyamat során a tároláshoz és az összetevők mentéséhez használt erőforráscsoport.
image-builder-template-name Nem A használt képszerkesztő sablonerőforrás neve.
location Igen Az a hely, ahol az Azure Image Builder futni fog. Lásd a támogatott helyeket.
build-timeout-in-minutes Nem Az az időtartam, ami után a build lemondásra kerül. Alapértelmezett érték: 240.
vm-size Opcionális Alapértelmezés szerint a Standard_D1_v2 rendszer ezt használja. Lásd a virtuális gépek méretét.
managed-identity Igen A korábban létrehozott, felhasználó által kezelt identitás. Használja a teljes azonosítót, ha az identitás egy másik erőforráscsoportban található. Használja a nevet, ha ugyanabban az erőforráscsoportban található.
source-os Igen Az alaprendszerkép operációs rendszerének típusa (Linux vagy Windows)
source-image-type Igen Az egyéni rendszerkép létrehozásához használt alapképtípus.
source-image Igen Az alapkép erőforrás-azonosítója. A forrásrendszerképnek ugyanabban az Azure-régióban kell lennie, amely a hely bemeneti értékében van megadva.
customizer-source Nem Az a könyvtár, ahol megtarthatja az összes összetevőt, amelyet hozzá kell adni az alaprendszerképhez a testreszabáshoz. Alapértelmezés szerint az érték ${{ GITHUB.WORKSPACE }}/workflow-artifacts.
customizer-destination Nem Ez az a könyvtár a testre szabott képen, ahová az összetevőket másolni kell.
customizer-windows-update Nem Csak Windows esetén. Logikai érték. Ha truea rendszerképkészítő a testreszabások végén futtatja a Windows-frissítést.
dist-location Nem A SharedImageGallery esetében ez a dist-type.
dist-image-tags Nem Ezek a felhasználó által definiált címkék, amelyek hozzáadódnak a létrehozott egyéni rendszerképhez (például: version:beta).

A virtuális gép létrehozása

Utolsó lépésként hozzon létre egy virtuális gépet a rendszerképből.

  1. Cserélje le a helyőrzőket {rgName}az erőforráscsoport nevére.

  2. Adjon hozzá egy GitHub-titkos kulcsot a virtuális gép jelszavával (VM_PWD). Mindenképpen írja le a jelszót, mert nem fogja tudni újra látni. A felhasználónév 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 }}"              

TELJES 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 }}"              

Következő lépések