Vytváření vlastních imagí virtuálních počítačů pomocí GitHub Actions a Azure
Začněte pracovat s GitHub Actions vytvořením pracovního postupu pro vytvoření image virtuálního počítače.
Pomocí GitHub Actions můžete urychlit proces CI/CD vytvořením vlastních imagí virtuálních počítačů s artefakty z pracovních postupů. Image můžete vytvářet a distribuovat do galerie sdílených imagí.
Tyto image pak můžete použít k vytvoření virtuálních počítačů a škálovacích sad virtuálních počítačů.
Akce image virtuálního počítače sestavení používá službu Azure Image Builder.
Požadavky
- Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
- Účet GitHubu s aktivním úložištěm. Pokud ho nemáte, zdarma se zaregistrujte.
- Tento příklad používá ukázkovou aplikaci Java Spring PetClinic.
- Galerie výpočetních prostředků Azure s imagí
- Vytvořte galerii výpočetních prostředků Azure.
- Vytvořte image.
Přehled souboru pracovního postupu
Pracovní postup je definován souborem YAML (.yml) v /.github/workflows/
cestě v úložišti. Tato definice obsahuje různé kroky a parametry, které tvoří pracovní postup.
Soubor má tři části:
Oddíl | Úlohy |
---|---|
Authentication | 1. Přidejte identitu spravovanou uživatelem. 2. Nastavte instanční objekt nebo Připojení Open ID. 3. Vytvořte tajný kód GitHubu. |
Sestavit | 1. Nastavte prostředí. 2. Sestavte aplikaci. |
Obrázek | 1. Vytvořte image virtuálního počítače. 2. Vytvořte virtuální počítač. |
Vytvoření identity spravované uživatelem
K distribuci imagí budete potřebovat identitu spravovanou uživatelem pro Azure Image Builder (AIB). Spravovaná identita přiřazená uživatelem Azure se použije během sestavení image ke čtení a zápisu imagí do galerie sdílených imagí.
Vytvořte identitu spravovanou uživatelem pomocí Azure CLI nebo webu Azure Portal. Poznamenejte si název vaší spravované identity.
Přizpůsobte si tento kód JSON. Zástupné symboly nahraďte
{subscriptionID}
{rgName}
ID předplatného a názvem skupiny prostředků.{ "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": [] } ] } }
Tento kód JSON slouží k vytvoření nové vlastní role s JSON.
Na webu Azure Portal otevřete Galerii výpočetních prostředků Azure a přejděte do řízení přístupu (IAM).
Vyberte Přidat přiřazení role a přiřaďte roli vytvoření image k identitě spravované uživatelem.
Generování přihlašovacích údajů pro nasazení
Pomocí příkazu az ad sp create-for-rbac v Azure CLI vytvořte instanční objekt. Spusťte tento příkaz pomocí Azure Cloud Shellu na webu Azure Portal nebo výběrem tlačítka Vyzkoušet .
az ad sp create-for-rbac --name "myML" --role contributor \
--scopes /subscriptions/<subscription-id>/resourceGroups/<group-name> \
--json-auth
--json-auth
Parametr je k dispozici ve verzích >Azure CLI = 2.51.0. Verze před tímto použitím --sdk-auth
s upozorněním na vyřazení.
V předchozím příkladu nahraďte zástupné symboly ID vašeho předplatného, názvem skupiny prostředků a názvem aplikace. Výstupem je objekt JSON s přihlašovacími údaji pro přiřazení role, které poskytují přístup k vaší aplikaci App Service podobně jako v následujícím příkladu. Zkopírujte tento objekt JSON pro pozdější použití.
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
(...)
}
Vytvoření tajných kódů GitHubu
Na GitHubu přejděte do svého úložiště.
V navigační nabídce přejděte na Nastavení.
Vyberte Akce tajných kódů zabezpečení > a proměnných>.
Vyberte Nový tajný klíč úložiště.
Celý výstup JSON z příkazu Azure CLI vložte do pole hodnoty tajného kódu. Dejte tajnému názvu
AZURE_CREDENTIALS
.Vyberte Add secret (Přidat tajný kód).
Použití akce přihlášení k Azure
Pomocí tajného kódu GitHubu s akcí Přihlášení k Azure se ověřte v Azure.
V tomto pracovním postupu se ověříte pomocí akce přihlášení Azure s podrobnostmi instančního objektu uloženými v secrets.AZURE_CREDENTIALS
. Pak spustíte akci Azure CLI. Další informace o odkazování na tajné kódy GitHubu v souboru pracovního postupu najdete v tématu Použití šifrovaných tajných kódů v pracovním postupu v Dokumentaci GitHubu.
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 }}'
Konfigurace Javy
Nastavte prostředí Java pomocí akce sady Java Setup SDK. V tomto příkladu nastavíte prostředí, sestavíte ho pomocí Mavenu a pak vypíšete artefakt.
Artefakty GitHubu představují způsob, jak sdílet soubory v pracovním postupu mezi úlohami. Vytvoříte artefakt pro uložení souboru JAR a pak ho přidáte do image virtuálního počítače.
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
Sestavení image
Pomocí akce Sestavit image virtuálního počítače Azure vytvořte vlastní image virtuálního počítače.
Zástupné symboly nahraďte {subscriptionID}
{rgName}
ID {Identity}
předplatného, názvem skupiny prostředků a názvem spravované identity. Nahraďte hodnoty {galleryName}
galerie obrázků a {imageName}
názvem vaší image.
Poznámka:
Pokud akce Vytvořit baked image aplikace selže s chybou oprávnění, ověřte, že jste k identitě spravované uživatelem přiřadili roli vytvoření image.
- 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'
Argumenty akce virtuálního počítače
Vstup | Požadováno | Popis |
---|---|---|
resource-group-name |
Ano | Skupina prostředků používaná pro ukládání a ukládání artefaktů během procesu sestavení. |
image-builder-template-name |
No | Název použitého prostředku šablony tvůrce obrázků. |
location |
Ano | Umístění, kde bude Azure Image Builder běžet. Podívejte se na podporovaná umístění. |
build-timeout-in-minutes |
No | Čas zrušení sestavení Výchozí hodnota je 240. |
vm-size |
Volitelné | Ve výchozím nastavení Standard_D1_v2 se použije. Viz velikosti virtuálních počítačů. |
managed-identity |
Ano | Identita spravovaná uživatelem, kterou jste vytvořili dříve. Úplný identifikátor použijte, pokud je vaše identita v jiné skupině prostředků. Název použijte, pokud je ve stejné skupině prostředků. |
source-os |
Ano | Typ operačního systému základní image (Linux nebo Windows) |
source-image-type |
Ano | Základní typ image, který se použije k vytvoření vlastní image. |
source-image |
Ano | Identifikátor prostředku pro základní image. Zdrojová image by měla být ve stejné oblasti Azure nastavená ve vstupní hodnotě umístění. |
customizer-source |
No | Adresář, kde můžete zachovat všechny artefakty, které je potřeba přidat do základní image pro přizpůsobení. Ve výchozím nastavení je tato hodnota ${{ GITHUB.WORKSPACE }}/workflow-artifacts. |
customizer-destination |
No | Toto je adresář v přizpůsobené imagi, do které se kopírují artefakty. |
customizer-windows-update |
No | Pouze pro Windows. Logická hodnota. Pokud true tvůrce imagí spustí aktualizaci Windows na konci přizpůsobení. |
dist-location |
No | Pro SharedImageGallery, to je dist-type . |
dist-image-tags |
No | Jedná se o uživatelem definované značky, které se přidají do vlastní image vytvořené (příklad: version:beta ). |
Vytvoření virtuálního počítače
Jako poslední krok vytvořte z image virtuální počítač.
Zástupné symboly nahraďte
{rgName}
názvem vaší skupiny prostředků.Přidejte tajný kód GitHubu pomocí hesla virtuálního počítače (
VM_PWD
). Nezapomeňte si heslo zapsat, protože ho znovu neuvidíte. Uživatelské jméno jemyuser
.
- 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 }}"
Dokončení 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 }}"
Další kroky
- Naučte se nasazovat do Azure.