Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Sanal makine görüntüsü oluşturmak için bir iş akışı oluşturarak GitHub Actions'ı kullanmaya başlayın.
GitHub Actions ile iş akışlarınızdaki yapıtlarla özel sanal makine görüntüleri oluşturarak CI/CD işleminizi hızlandırabilirsiniz. Hem görüntü oluşturabilir hem de bunları Paylaşılan Görüntü Galerisi'ne dağıtabilirsiniz.
Ardından bu görüntüleri kullanarak sanal makineler ve sanal makine ölçek kümeleri oluşturabilirsiniz.
Sanal makine görüntüsü oluşturma eylemi , Azure Image Builder hizmetini kullanır.
Önkoşullar
- Aktif bir aboneliğe sahip bir Azure hesabı. Ücretsiz bir hesap oluşturun.
- Etkin bir depoya sahip bir GitHub hesabı. Hesabınız yoksa ücretsiz olarak kaydolun.
- Bu örnekte Java Spring PetClinic Örnek Uygulaması kullanılmaktadır.
- Görüntü içeren bir Azure İşlem Galerisi.
İş akışı dosyasına genel bakış
İş akışı, deponuzdaki yoldaki /.github/workflows/ bir YAML (.yml) dosyası tarafından tanımlanır. Bu tanım, iş akışını oluşturan çeşitli adımları ve parametreleri içerir.
Dosyanın üç bölümü vardır:
| Bölüm | Görevler |
|---|---|
| Kimlik Doğrulaması | 1. Kullanıcı tarafından yönetilen bir kimlik ekleyin. 2. Hizmet sorumlusu veya Open ID Connect ayarlayın. 3. GitHub gizli anahtarı oluşturun. |
| İnşa Et | 1. Ortamı ayarlayın. 2. Uygulamayı oluşturun. |
| Resim | 1. VM Görüntüsü oluşturun. 2. Bir sanal makine oluşturun. |
Kullanıcı tarafından yönetilen kimlik oluşturma
Görüntüleri dağıtmak için Azure Görüntü Oluşturucusu(AIB) için kullanıcı tarafından yönetilen bir kimliğe ihtiyacınız olacaktır. Azure kullanıcı tarafından atanan yönetilen kimliğiniz, görüntü derlemesi sırasında Paylaşılan Görüntü Galerisi'nde görüntüleri okumak ve yazmak için kullanılır.
Azure CLI veya Azureportalı ile kullanıcı tarafından yönetilen bir kimlik oluşturun. Yönetilen kimliğinizin adını yazın.
Bu JSON kodunu özelleştirin.
{subscriptionID}ve{rgName}tutucularını abonelik kimliğiniz ve kaynak grubu adınızla değiştirin.{ "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": [] } ] } }JSON ile yeni bir özel rol oluşturmak için bu JSON kodunu kullanın.
Azure portalında Azure İşlem Galerinizi açın ve Erişim denetimi (IAM) bölümüne gidin.
Rol ataması ekle'yi seçin ve Görüntü Oluşturma Rolünü kullanıcı tarafından yönetilen kimliğinize atayın.
Dağıtım kimlik bilgileri oluşturma
OIDC ile Azure Oturum Açma eylemini kullanmak için, Microsoft Entra uygulamasında veya kullanıcı tarafından atanan yönetilen kimlikte federasyon kimlik bilgilerini yapılandırmanız gerekir.
Seçenek 1: Microsoft Entra uygulaması
- Azure Portal, Azure CLI veya Azure PowerShell kullanarak bir hizmet sorumlusu ile Microsoft Entra uygulaması oluşturun.
- GitHub Actions iş akışınızda daha sonra kullanmak üzere İstemci Kimliği, Abonelik Kimliği ve Dizin (kiracı) kimliği değerlerini kopyalayın.
- Azure portalı, Azure CLI veya Azure PowerShell ile hizmet sorumlunuza uygun bir rol atayın.
- GitHub Actions tarafından GitHub deponuz için verilen belirteçlere güvenmek adına Microsoft Entra uygulamasında federasyon kimlik bilgilerini yapılandırın.
Seçenek 2: Kullanıcı tarafından atanan yönetilen kimlik
- Kullanıcı tarafından atanan bir yönetilen kimlik oluşturun.
- GitHub Actions iş akışınızda daha sonra kullanmak üzere İstemci Kimliği, Abonelik Kimliği ve Dizin (kiracı) kimliği değerlerini kopyalayın.
- Kullanıcı tarafından atanan yönetilen kimliğinize uygun bir rol atayın.
- GitHub Actions tarafından GitHub deponuza verilen belirteçlere güvenmek için kullanıcı tarafından atanan yönetilen kimlik üzerinde federasyon kimlik bilgilerini yapılandırın.
GitHub sırları oluştur
Oturum açma eylemine uygulamanızın İstemci Kimliğini, Dizin (kiracı) Kimliğini ve Abonelik Kimliğini sağlamanız gerekir. Bu değerler doğrudan iş akışında sağlanabilir veya GitHub gizli dizilerinde depolanabilir ve iş akışınızda başvurulabilir. Değerleri GitHub gizli dizileri olarak kaydetmek daha güvenli bir seçenektir.
>.
Yeni depo gizli anahtarını seçin.
Uyarı
Genel depolarda iş akışı güvenliğini geliştirmek için depo gizli dizileri yerine ortam gizli dizilerini kullanın. Eğer ortam onay gerektiriyorsa, biri gerekli gözden geçirenlerden onaylayana kadar görev ortamın gizli verilerine erişemez.
AZURE_CLIENT_ID,AZURE_TENANT_IDveAZURE_SUBSCRIPTION_IDiçin gizli bilgiler oluşturun. Bu değerleri GitHub gizli dizileriniz için Microsoft Entra uygulamanızdan veya kullanıcı tarafından atanan yönetilen kimlikten kopyalayın:GitHub gizli anahtarı Microsoft Entra uygulaması veya kullanıcı tarafından atanan yönetilen kimlik AZURE_CLIENT_ID Müşteri Kimliği AZURE_ABONELİK_KİMLİĞİ Abonelik Kimliği AZURE_TENANT_ID Dizin (kullanıcı) kimliği Uyarı
Güvenlik nedeniyle, değerleri doğrudan iş akışına geçirmek yerine GitHub Gizli Dizilerini kullanmanızı öneririz.
Azure oturum açma eylemini kullanma
Azure'a kimlik doğrulama yapmak için GitHub gizli bilgilerinizi Azure Oturum Açma eylemi ile kullanın.
Open ID Connect için Active Directory uygulamanızla ilişkilendirilmiş federasyon kimlik bilgilerini kullanacaksınız.
Bir iş akışı dosyasında GitHub gizli dizilerine başvurma hakkında daha fazla bilgi için bkz. GitHub Docs'ta bir iş akışında şifrelenmiş gizli dizileri kullanma .
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 }}
Java'yı yapılandırma
Java Kurulum SDK'sı eylemiyle Java ortamını ayarlayın. Bu örnekte ortamı ayarlayıp Maven ile derleyip bir yapıt çıkaracaksınız.
GitHub yapıtları , iş akışındaki dosyaları işler arasında paylaşmanın bir yoludur. JAR dosyasını tutmak için bir yapıt oluşturacak ve ardından sanal makine görüntüsüne ekleyeceksiniz.
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
Görüntünüzü oluşturma
Özel bir sanal makine görüntüsü oluşturmak için Azure Sanal Makine Görüntüsü Oluştur eylemini kullanın.
Yer tutucuları {subscriptionID}, {rgName} ve {Identity} ile abonelik kimliğiniz, kaynak grubu adınız ve yönetilen kimlik adınızla değiştirin.
{galleryName} ve {imageName} değerlerini, görüntü galerisi adınız ve görüntü adınız ile değiştirin.
Uyarı
Uygulama Pişirilmiş Görüntü Oluştur eylemi bir izin hatasıyla başarısız olursa, kullanıcı tarafından yönetilen kimliğinize Görüntü Oluşturma Rolü atadığınızdan emin olun.
- 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'
Sanal Makine Eylem Parametreleri
| Veri Girişi | Gerekli | Description |
|---|---|---|
resource-group-name |
Yes | Derleme işlemi sırasında yapıtları depolamak ve kaydetmek için kullanılan kaynak grubu. |
image-builder-template-name |
Hayı | Kullanılan görüntü oluşturucu şablon kaynağının adı. |
location |
Yes | Azure Image Builder'ın çalıştırılacağı konum. Desteklenen konumlara bakın. |
build-timeout-in-minutes |
Hayı | Derlemenin iptal edileceği zaman dilimi. Varsayılan değer 240'tır. |
vm-size |
Opsiyonel | Varsayılan olarak Standard_D1_v2 kullanılır. Bkz. sanal makine boyutları. |
managed-identity |
Yes | Daha önce oluşturduğunuz kullanıcı tarafından yönetilen kimlik. Kimliğiniz farklı bir kaynak grubundaysa tam tanımlayıcıyı kullanın. Aynı kaynak grubundaysa adı kullanın. |
source-os |
Yes | Temel görüntünün işletim sistemi türü (Linux veya Windows) |
source-image-type |
Yes | Özel görüntü oluşturmak için kullanılacak temel görüntü türü. |
source-image |
Yes | Temel görüntünün kaynak tanımlayıcısı. Kaynak görüntü, konumun giriş değerinde ayarlanan aynı Azure bölgesinde bulunmalıdır. |
customizer-source |
Hayı | Özelleştirme için temel görüntüye eklenmesi gereken tüm yapıtları tutabileceğiniz dizin. Varsayılan olarak, değer şu şekildedir: ${{ GITHUB.WORKSPACE }}/workflow-artifacts. |
customizer-destination |
Hayı | Bu, özelleştirilmiş görüntüde yapıtların kopyalandığı dizindir. |
customizer-windows-update |
Hayı | Yalnızca Windows için. Boole değeri. ise true, görüntü oluşturucu özelleştirmelerin sonunda Windows update'i çalıştırır. |
dist-location |
Hayı | SharedImageGallery için bu değeridir dist-type. |
dist-image-tags |
Hayı | Bunlar, oluşturulan özel görüntüye eklenen kullanıcı tanımlı etiketlerdir (örnek: version:beta). |
Sanal makinenizi oluşturma
Son adım olarak, görüntünüzden bir sanal makine oluşturun.
Yer tutucularını
{rgName}kaynak grubu adınızla değiştirin.Sanal makine parolası
VM_PWDile bir GitHub gizli anahtarı ekleyin. Parolayı bir daha göremeyeceğiniz için not edin. Kullanıcı adı şeklindedirmyuser.
- 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 }}"
YAML'i tamamlama
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 }}"
Sonraki Adımlar
- Azure'a dağıtmayı öğrenin.