Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Comece a usar as Ações do GitHub criando um fluxo de trabalho para criar uma imagem de máquina virtual.
Com o GitHub Actions, você pode acelerar seu processo de CI/CD criando imagens de máquina virtual personalizadas com artefatos de seus fluxos de trabalho. Você pode criar imagens e distribuí-las para uma Galeria de Imagens Compartilhadas.
Em seguida, você pode usar essas imagens para criar máquinas virtuais e conjuntos de dimensionamento de máquinas virtuais.
A ação de criar imagem de máquina virtual usa o serviço Azure Image Builder.
Pré-requisitos
- Uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
- Uma conta do GitHub com um repositório ativo. Se não tiver uma, inscreva-se gratuitamente.
- Este exemplo usa o Java Spring PetClinic Sample Application.
- Uma Galeria de Computação do Azure com uma imagem.
Visão geral do arquivo de fluxo de trabalho
Um fluxo de trabalho é definido por um arquivo YAML (.yml) no /.github/workflows/ caminho no repositório. Esta definição contém as várias etapas e parâmetros que compõem o fluxo de trabalho.
O ficheiro tem três secções:
| Seção | Tasks |
|---|---|
| Authentication | 1. Adicione uma identidade gerenciada pelo usuário. 2. Configure um principal de serviço ou Open ID Connect. 3. Crie um segredo do GitHub. |
| Construir | 1. Configure o ambiente. 2. Crie o aplicativo. |
| Image | 1. Crie uma imagem de VM. 2. Crie uma máquina virtual. |
Criar uma identidade gerenciada pelo usuário
Você precisará de uma identidade gerenciada pelo usuário para o Azure Image Builder (AIB) para distribuir imagens. Sua identidade gerenciada atribuída pelo usuário do Azure será usada durante a compilação da imagem para ler e gravar imagens em uma Galeria de Imagens Compartilhadas.
Crie uma identidade gerenciada pelo usuário com a CLI do Azure ou o portal do Azure. Anote o nome da sua identidade gerenciada.
Personalize este código JSON. Substitua os espaços reservados para
{subscriptionID}e{rgName}com o ID da assinatura e o nome do grupo de recursos.{ "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": [] } ] } }Use este código JSON para criar uma nova função personalizada com JSON.
No portal do Azure, abra sua Galeria de Computação do Azure e vá para Controle de acesso (IAM).
Selecione Adicionar atribuição de função e atribua a Função de Criação de Imagem à sua identidade gerenciada pelo usuário.
Gerar credenciais de implantação
Para usar a ação Azure Login com OIDC, é necessário configurar uma credencial de identidade federada num aplicativo Microsoft Entra ou numa identidade gerida atribuída pelo utilizador.
Opção 1: Aplicação Microsoft Entra
- Crie uma aplicação Microsoft Entra com uma entidade de serviço através do portal do Azure, CLI do Azure (Interface de Linha de Comandos) ou PowerShell do Azure.
- Copie os valores para ID do cliente, ID da assinatura e ID do diretório (locatário) para usar posteriormente no fluxo de trabalho das Ações do GitHub.
- Atribua uma função apropriada à sua entidade de serviço através do Portal do Azure, Azure CLI ou Azure PowerShell.
- Configure uma credencial de identidade federada num aplicativo Microsoft Entra para confiar tokens emitidos pelo GitHub Actions no seu repositório GitHub.
Opção 2: Identidade gerenciada atribuída pelo usuário
- Crie uma identidade gerenciada atribuída pelo usuário.
- Copie os valores para ID do cliente, ID da assinatura e ID do diretório (locatário) para usar posteriormente no fluxo de trabalho das Ações do GitHub.
- Atribua uma função apropriada à identidade gerida atribuída ao utilizador.
- Configure uma credencial de identidade federada numa identidade gerida atribuída ao utilizador para confiar em tokens emitidos pelo GitHub Actions no seu repositório GitHub.
Criar segredos do GitHub
Você precisa fornecer o ID do cliente, o ID do diretório (locatário) e o ID da assinatura da sua aplicação para a ação de login. Esses valores podem ser fornecidos diretamente no fluxo de trabalho ou podem ser armazenados em segredos do GitHub e referenciados em seu fluxo de trabalho. Salvar os valores como segredos do GitHub é a opção mais segura.
No GitHub, vá para o seu repositório.
Selecione Segurança > Segredos e variáveis > Ações.
Selecione Novo segredo do repositório.
Observação
Para aumentar a segurança do fluxo de trabalho em repositórios públicos, utilize segredos de ambiente em vez de segredos de repositório. Se o ambiente exigir aprovação, um trabalho não poderá acessar segredos de ambiente até que um dos revisores necessários o aprove.
Crie segredos para
AZURE_CLIENT_ID,AZURE_TENANT_IDeAZURE_SUBSCRIPTION_ID. Copie estes valores do seu aplicativo Microsoft Entra ou da identidade gerenciada atribuída pelo usuário para seus segredos do GitHub:Segredo do GitHub Aplicativo Microsoft Entra ou identidade gerenciada atribuída pelo usuário AZURE_CLIENT_ID ID do Cliente AZURE_SUBSCRIPTION_ID ID da subscrição AZURE_TENANT_ID ID do diretório (inquilino) Observação
Por motivos de segurança, recomendamos o uso de Segredos do GitHub em vez de passar valores diretamente para o fluxo de trabalho.
Usar a ação de logon do Azure
Utilize o seu segredo do GitHub com a ação Login do Azure para autenticar-se no Azure.
Para o Open ID Connect, você usará uma credencial federada associada ao seu aplicativo do Ative Directory.
Para obter mais informações sobre como fazer referência a segredos do GitHub em um arquivo de fluxo de trabalho, consulte Usando segredos criptografados em um fluxo de trabalho no GitHub Docs.
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 }}
Configurar o Java
Configure o ambiente Java com a ação Java Setup SDK. Neste exemplo, você configurará o ambiente, compilará com o Maven e, em seguida, produzirá um artefato.
Os artefatos do GitHub são uma maneira de compartilhar arquivos em um fluxo de trabalho entre trabalhos. Você criará um artefato para armazenar o arquivo JAR e adicioná-lo à imagem da máquina virtual.
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
Construa a sua imagem
Use a ação Criar Imagem de Máquina Virtual do Azure para criar uma imagem de máquina virtual personalizada.
Substitua os espaços reservados para {subscriptionID}, {rgName} e {Identity} pelo ID da assinatura, nome do grupo de recursos e nome da identidade gerida. Substitua os valores de {galleryName} pelo nome da sua galeria de imagens e de {imageName} pelo nome da sua imagem.
Observação
Se a ação Criar Imagem Baked do Aplicativo falhar com um erro de permissão, verifique se você atribuiu a Função de Criação de Imagem à sua identidade gerenciada pelo usuário.
- 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'
Argumentos de ação da máquina virtual
| Entrada | Obrigatório | Description |
|---|---|---|
resource-group-name |
Yes | O grupo de recursos usado para armazenar e salvar artefatos durante o processo de compilação. |
image-builder-template-name |
Não | O nome do recurso de modelo do construtor de imagens usado. |
location |
Yes | O local onde o Azure Image Builder será executado. Consulte os locais suportados. |
build-timeout-in-minutes |
Não | Tempo limite após o qual a compilação é cancelada. Definido para 240. |
vm-size |
Opcional | Por padrão, Standard_D1_v2 será usado. Consulte os tamanhos das máquinas virtuais. |
managed-identity |
Yes | A identidade gerenciada pelo usuário que você criou anteriormente. Use o identificador completo se sua identidade estiver em um grupo de recursos diferente. Use o nome se ele estiver no mesmo grupo de recursos. |
source-os |
Yes | O tipo de SO da imagem base (Linux ou Windows) |
source-image-type |
Yes | O tipo de imagem base que será usado para criar a imagem personalizada. |
source-image |
Yes | O identificador de recurso para a imagem de base. Uma imagem de origem deve estar presente na mesma região do Azure definida no valor de entrada do local. |
customizer-source |
Não | O diretório onde você pode manter todos os artefatos que precisam ser adicionados à imagem base para personalização. Por padrão, o valor é ${{ GITHUB.WORKSPACE }}/workflow-artifacts. |
customizer-destination |
Não | Este é o diretório na imagem personalizada para o qual os artefatos são copiados. |
customizer-windows-update |
Não | Apenas para Windows. Valor booleano. Se true, o criador de imagens executará a atualização do Windows após as personalizações. |
dist-location |
Não | Para SharedImageGallery, este é o dist-type. |
dist-image-tags |
Não | Essas são tags definidas pelo usuário que são adicionadas à imagem personalizada criada (exemplo: version:beta). |
Crie sua máquina virtual
Como último passo, crie uma máquina virtual a partir da sua imagem.
Substitua os espaços reservados de
{rgName}pelo nome do grupo de recursos.Adicione um segredo do GitHub com a senha da máquina virtual (
VM_PWD). Certifique-se de anotar a senha, porque você não será capaz de vê-la novamente. O nome de usuário é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 }}"
YAML completo
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 }}"
Próximos passos
- Saiba como implantar no Azure.