Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 sestavení image virtuálního počítače používá službu Azure Image Builder.
Požadavky
- Účet Azure s aktivním předplatným. Vytvořte si bezplatný účet.
- Účet GitHubu s aktivním úložištěm. Pokud ho nemáte, zdarma se zaregistrujte.
- Tento příklad využívá ukázkovou aplikaci Java Spring PetClinic.
- Galerie výpočetních prostředků Azure s imagí
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 | Tasks |
|---|---|
| Autentizace | 1. Přidejte identitu spravovanou uživatelem. 2. Nastavte systémový účet služby nebo Open ID Connect. 3. Vytvořte tajný kód GitHubu. |
| Sestavit | 1. Nastavte prostředí. 2. Sestavte aplikaci. |
| Image | 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). Identita spravovaná Azure, přiřazená uživatelem, bude použita během sestavování obrazu ke čtení a zápisu obrazů do Galerie sdílených obrazů.
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. Nahraďte zástupné symboly
{subscriptionID}svého ID předplatného a{rgName}názvem své 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 pro tvorbu obrazu k uživatelsky spravované identitě.
Generování přihlašovacích údajů pro nasazení
Pokud chcete použít akci přihlášení k Azure s OIDC, musíte nakonfigurovat přihlašovací údaje federované identity v aplikaci Microsoft Entra nebo spravované identitě přiřazené uživatelem.
Možnost 1: Aplikace Microsoft Entra
- Vytvořte aplikaci Microsoft Entra s oprávněním služby pomocí Azure portálu , příkazového nástroje Azure CLI , nebo modulu Azure PowerShell .
- Zkopírujte hodnoty ID klienta, ID předplatnéhoa ID adresáře (tenanta), abyste je mohli použít později v pracovním postupu GitHub Actions.
- Přiřaďte k instančnímu objektu příslušnou roli pomocí webu Azure Portal, Azure CLI nebo Azure PowerShellu.
- Nakonfigurujte federované identitní pověření v aplikaci Microsoft Entra tak, aby důvěřovalo tokenům vydaným GitHub Actions pro vaše úložiště na GitHubu.
možnost 2: Spravovaná identita přiřazená uživatelem
- Vytvořte uživatelsky přiřazenou spravovanou identitu.
- Zkopírujte hodnoty ID klienta, ID předplatnéhoa ID adresáře (tenanta), abyste je mohli použít později v pracovním postupu GitHub Actions.
- Přiřadit odpovídající roli spravované identitě přiřazené uživatelem.
- Nakonfigurujte pověření federované identity pro spravovanou identitu přiřazenou uživatelem, aby důvěřovala tokenům vydaným GitHub Actions ve vašem úložišti GitHub.
Vytvoření tajných kódů GitHubu
Musíte zadat ID klienta vaší aplikace, ID adresáře (tenanta)a ID předplatného pro akci přihlášení. Tyto hodnoty je možné zadat buď přímo v pracovním postupu, nebo je můžete uložit v tajných kódech GitHubu a odkazovat na je ve vašem pracovním postupu. Uložením hodnot jako tajných kódů GitHubu je bezpečnější možnost.
Na GitHubu přejděte do svého úložiště.
Vyberte > tajných kódů zabezpečení > a proměnných.
Vyberte Nový tajný klíč úložiště.
Poznámka:
Pokud chcete zvýšit zabezpečení pracovních postupů ve veřejných úložištích, použijte tajných kódů prostředí místo tajných kódů úložiště. Pokud prostředí vyžaduje schválení, úloha nemůže získat přístup k tajným kódům prostředí, dokud ho některý z požadovaných kontrolorů neschválí.
Vytváření tajných kódů pro
AZURE_CLIENT_ID,AZURE_TENANT_IDaAZURE_SUBSCRIPTION_ID. Zkopírujte tyto hodnoty z vaší aplikace Microsoft Entra nebo spravované identity přiřazené uživatelem pro tajné kódy GitHubu:Tajný kód GitHubu Aplikace Microsoft Entra nebo spravovaná identita přiřazená uživatelem AZURE_CLIENT_ID ID klienta AZURE_PŘEDPLATNÉ_ID Identifikátor předplatného AZURE_TENANT_ID ID adresáře (klienta) Poznámka:
Z bezpečnostních důvodů doporučujeme místo předávání hodnot přímo pracovnímu postupu používat tajné kódy GitHubu.
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.
Pro Open ID Connect použijete federované přihlašovací údaje přidružené k vaší aplikaci Active Directory.
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@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
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@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
Vytvoření image
Pomocí akce Sestavit image virtuálního počítače Azure vytvořte vlastní image virtuálního počítače.
Nahraďte zástupné symboly {subscriptionID}, {rgName} a {Identity} vaším ID předplatného, názvem skupiny prostředků a názvem spravované identity. Nahraďte hodnoty {galleryName} názvem vaší galerie obrázků a {imageName} názvem vašeho obrázku.
Poznámka:
Pokud akce Vytvořit připravenou image aplikace selže s chybou oprávnění, ověřte, že jste ke své identitě spravované uživatelem přiřadili roli pro vytváření imagí.
- 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 | Povinné | Description |
|---|---|---|
resource-group-name |
Ano | Skupina prostředků používaná pro ukládání a uchovávání artefaktů během procesu sestavení. |
image-builder-template-name |
Ne | 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 |
Ne | Čas po kterém je sestavení zrušeno. Výchozí hodnota je 240. |
vm-size |
Volitelný |
Standard_D1_v2 se použije ve výchozím nastavení. 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ě zdrojů. Použijte název, pokud je ve stejné skupině zdrojů. |
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ý obraz by měl být ve stejném regionu Azure, který je nastaven ve vstupní hodnotě umístění. |
customizer-source |
Ne | 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 |
Ne | Toto je adresář v přizpůsobeném obrazu, do kterého se kopírují artefakty. |
customizer-windows-update |
Ne | Pouze pro Windows. Logická hodnota Pokud true, program pro vytváření imagí spustí aktualizaci Windows na konci přizpůsobení. |
dist-location |
Ne | V případě SharedImageGallery se jedná o dist-type. |
dist-image-tags |
Ne | 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@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 }}"
Další kroky
- Naučte se nasazovat do Azure.