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 buildelési rendszerkép-művelete az Azure Image Builder szolgáltatást használja.
Előfeltételek
- Egy Azure-fiók, aktív előfizetéssel. Fiók ingyenes létrehozása.
- Egy GitHub-fiók aktív adattárral. Ha nincs fiókja, ingyenesen regisztrálhat egyet.
- Ez a példa a Java Spring PetClinic mintaalkalmazást használja.
- Egy Azure Compute Gallery képpel.
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 | Tevékenységek |
---|---|
Hitelesítés | 1. Felhasználó által felügyelt identitás hozzáadása. 2. Szolgáltatásnév vagy open id Csatlakozás beállítása. 3. Hozzon létre egy GitHub-titkos kulcsot. |
Build | 1. A környezet beállítása. 2. Az alkalmazás létrehozása. |
Rendszerkép | 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.
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.
Szabja testre ezt a JSON-kódot. Cserélje le a helyőrzőket az előfizetés azonosítójára
{subscriptionID}
és{rgName}
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": [] } ] } }
Ezzel a JSON-kóddal új egyéni szerepkört hozhat létre a JSON használatával.
Az Azure Portalon nyissa meg az Azure Compute Galleryt, és lépjen a Hozzáférés-vezérlés (IAM) elemre.
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
Hozzon létre egy egyszerű szolgáltatást az az ad sp create-for-rbac paranccsal az Azure CLI-ben. Futtassa ezt a parancsot az Azure Cloud Shell használatával az Azure Portalon, vagy a Kipróbálás gombra kattintva.
az ad sp create-for-rbac --name "myML" --role contributor \
--scopes /subscriptions/<subscription-id>/resourceGroups/<group-name> \
--json-auth
A paraméter --json-auth
az Azure CLI 2.51.0-s verzióiban >érhető el. A használat --sdk-auth
előtti verziók elavultsági figyelmeztetéssel.
A fenti példában cserélje le a helyőrzőket az előfizetés azonosítójára, az erőforráscsoport nevére és az alkalmazás nevére. A kimenet egy JSON-objektum, amelynek szerepkör-hozzárendelési hitelesítő adatai az alábbiakhoz hasonló hozzáférést biztosítanak az App Service-alkalmazáshoz. Másolja ezt a JSON-objektumot későbbre.
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
(...)
}
GitHub-titkos kódok létrehozása
A GitHubon nyissa meg az adattárat.
Nyissa meg a Gépház a navigációs menüben.
Válassza ki a Biztonsági > titkos kulcsok és változók > műveletek lehetőséget.
Válassza az Új tárház titkos kódját.
Illessze be az Azure CLI parancs teljes JSON-kimenetét a titkos kód értékmezőjébe. Adja meg a titkos nevet
AZURE_CREDENTIALS
.Válassza az Add secret (Titkos kód hozzáadása) lehetőséget.
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.
Ebben a munkafolyamatban az Azure bejelentkezési művelettel hitelesíthet a szolgáltatásnévben secrets.AZURE_CREDENTIALS
tárolt adatokkal. Ezután futtat egy Azure CLI-műveletet. 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@v1
with:
creds: '${{ secrets.AZURE_CREDENTIALS }}'
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étre fog hozni egy összetevőt a JAR-fájl tárolásához, majd hozzáadja a virtuális gép lemezké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@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
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 a képgyűjtemény és a képnév értékeit {galleryName}
{imageName}
.
Feljegyzés
Ha az Alkalmazás létrehozása parancskép létrehozása művelet engedélyhiba miatt meghiúsul, ellenőrizze, hogy hozzárendelte-e a képlétrehozó szerepkört a felhasználó által felügyelt 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
Bevitel | Kötelező | Leírás |
---|---|---|
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 | A build megszakításának időpontja. Alapértelmezett érték: 240. |
vm-size |
Választható | 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 felhasználó által korábban létrehozott 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 alaprendszerké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 true a 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.
Cserélje le a helyőrzőket
{rgName}
az erőforráscsoport nevére.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. 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@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 }}"
Következő lépések
- Megtudhatja, hogyan helyezheti üzembe az Azure-ban.