Configurar um pipeline e atualizações por push
Neste artigo, você aprenderá a usar a CLI do Desenvolvedor do Azure (azd
) para enviar por push alterações de modelo por meio de um pipeline de CI/CD, como Ações do GitHub ou Azure DevOps. Para este exemplo, você usará o React Web App com Node.js API e o modelo MongoDB no Azure , mas pode aplicar os princípios aprendidos neste artigo a qualquer um dos modelos da CLI do Desenvolvedor do Azure.
Nota
O azd pipeline config
comando ainda está em versão beta. Leia mais sobre o suporte a recursos alfa e beta na página de controle de versão e estratégia de lançamento de recursos.
Pré-requisitos
- Instale a CLI do Azure Developer.
- Implante o modelo Node.js.
- Visual Studio Code instalado.
azd
os modelos podem ou não incluir um arquivo de configuração de pipeline padrão do GitHub Actions e/ou do Azure DevOps chamado azure-dev.yml
, que é necessário para configurar o CI/CD. Esse arquivo de configuração provisiona seus recursos do Azure e implanta seu código na ramificação principal. Pode encontrar azure-dev.yml
:
- Para ações do
.github/workflows
GitHub: no diretório. - Para Azure DevOps: no
.azdo/pipelines
diretório.
Você pode usar o arquivo de configuração como está ou modificá-lo para atender às suas necessidades.
Nota
Verifique se o modelo tem uma definição de pipeline (azure-dev.yaml
) antes de chamar azd pipeline config
. azd
não cria automaticamente este ficheiro.
Consulte Criar uma definição de pipeline para azd abaixo.
Use o azd pipeline config
comando para configurar um pipeline de CI/CD, que lida com as seguintes tarefas:
- Cria e configura uma entidade de serviço para o aplicativo na assinatura do Azure. Seu usuário deve ter uma
Owner
função ouContributor + User Access Administrator
funções dentro da assinatura do Azure para permitir que o azd crie e atribua funções à entidade de serviço. - Orienta você através de um fluxo de trabalho para criar e configurar um repositório GitHub ou Azure DevOps e confirmar o código do seu projeto a ele. Você também pode optar por usar um repositório existente.
- Cria uma conexão segura entre o Azure e seu repositório.
- Executa a ação do GitHub quando você faz check-in do arquivo de fluxo de trabalho.
Para obter um controle mais granular sobre esse processo, ou se o usuário não tiver as funções necessárias, você poderá configurar manualmente um pipeline.
Selecione seu provedor de pipeline preferido para continuar:
Autorizar o GitHub a implantar no Azure
Para configurar o fluxo de trabalho, você precisa autorizar uma entidade de serviço a implantar no Azure em seu nome, a partir de uma ação do GitHub. azd
Cria a entidade de serviço e uma credencial federada para ela.
Execute o seguinte comando para criar a entidade de serviço do Azure e configurar o pipeline:
azd pipeline config
Este comando, opcionalmente, cria um repositório GitHub e envia código para o novo repositório.
Nota
Por padrão,
azd pipeline config
usa OpenID Connect (OIDC), chamadas credenciais federadas . Se preferir não utilizar o OIDC, executeazd pipeline config --auth-type client-credentials
.As credenciais OIDC/federated não são suportadas para o Terraform.
Forneça as informações solicitadas do GitHub.
Quando solicitado sobre como confirmar e enviar por push suas alterações locais para iniciar uma nova execução de Ações do GitHub, especifique
y
.Na janela do terminal, visualize os resultados do
azd pipeline config
comando. Oazd pipeline config
comando produzirá o nome do repositório GitHub para o seu projeto.Usando seu navegador, abra o repositório GitHub para seu projeto.
Selecione Ações para ver o fluxo de trabalho em execução.
Fazer e enviar por push uma alteração de código
No diretório do
/src/web/src/layout
projeto, abraheader.tsx
.Localize a linha
<Text variant="xLarge">ToDo</Text>
.Altere o literal
ToDo
paramyTodo
.Guarde o ficheiro.
Consolide as alterações. A confirmação da alteração inicia o pipeline de Ação do GitHub para implantar a atualização.
Usando seu navegador, abra o repositório GitHub do seu projeto para ver ambos:
- O seu compromisso
- A confirmação das Ações do GitHub que estão sendo configuradas.
Selecione Ações para ver a atualização de teste refletida no fluxo de trabalho.
Visite o URL do frontend da Web para inspecionar a atualização.
azd
como uma ação do GitHub
Adicionar azd
como uma ação do GitHub. Esta ação instalará o azd
. Para usá-lo, você pode adicionar o seguinte a .github\workflows\azure-dev.yml
:
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Install azd
uses: Azure/setup-azd@v0.1.0
Clean up resources (Limpar recursos)
Quando não precisar mais dos recursos do Azure criados neste artigo, execute o seguinte comando:
azd down
Funcionalidades avançadas
Você pode estender o azd pipeline config
comando para cenários ou requisitos de modelo específicos, conforme descrito nas seções a seguir.
Segredos ou variáveis adicionais
Por padrão, azd
define variáveis e segredos para o pipeline. Por exemplo, o azd pipeline config
comando cria as subscription id
variáveis de pipeline , environment name
e as region
sempre que é executado. Em seguida, a definição de pipeline faz referência a essas variáveis:
env:
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
Quando o pipeline é executado, azd
obtém os valores do ambiente, que é mapeado para as variáveis e segredos. Dependendo do modelo, pode haver configurações que você pode controlar usando variáveis de ambiente. Por exemplo, uma variável de ambiente chamada KEY_VAULT_NAME
pode ser definida para definir o nome de um recurso do Cofre da Chave dentro da infraestrutura do modelo. Para esses casos, a lista de variáveis e segredos pode ser definida pelo modelo, usando o azure.yaml
. Por exemplo, considere a seguinte azure.yaml
configuração:
pipeline:
variables:
- KEY_VAULT_NAME
- STORAGE_NAME
secrets:
- CONNECTION_STRING
Com essa configuração, azd
verifica se alguma das variáveis ou segredos tem um valor não vazio no ambiente. azd
Em seguida, cria uma variável ou um segredo para o pipeline usando o nome da chave na configuração como o nome da variável ou segredo e o valor não-string do ambiente para o valor.
A azure-dev.yaml
definição de pipeline pode então fazer referência às variáveis ou segredos:
- name: Provision Infrastructure
run: azd provision --no-prompt
env:
KEY_VAULT_NAME: ${{ variables.KEY_VAULT_NAME }}
STORAGE_NAME: ${{ variables.STORAGE_NAME }}
CONNECTION_STRING: ${{ secrets.CONNECTION_STRING }}
Nota
Você deve executar azd pipeline config
depois de atualizar a lista de segredos ou variáveis em azure.yaml
for azd para redefinir os valores do pipeline.
Parâmetros da infraestrutura
Considere o seguinte exemplo de bíceps:
@secure()
param BlobStorageConnection string
O parâmetro BlobStorageConnection
não tem nenhum valor padrão definido, portanto azd
, solicita que o usuário insira um valor. No entanto, não há nenhum prompt interativo durante o CI/CD. azd
deve solicitar o valor para o parâmetro quando você executar azd pipeline config
, salve o valor no pipeline e, em seguida, busque o valor novamente quando o pipeline for executado.
azd
usa um segredo de pipeline chamado AZD_INITIAL_ENVIRONMENT_CONFIG
para salvar automaticamente e definir o valor de todos os parâmetros necessários no pipeline. Você só precisa fazer referência a esse segredo em seu pipeline:
- name: Provision Infrastructure
run: azd provision --no-prompt
env:
AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}
Quando o pipeline é executado, azd
obtém os valores para os parâmetros do segredo, eliminando a necessidade de um prompt interativo.
Nota
Você deve executar azd pipeline config
novamente se adicionar um novo parâmetro.
Criar uma definição de pipeline
Se o seu azd
modelo ainda não tiver um arquivo de definição de pipeline de CI/CD, você mesmo poderá criar um. Uma definição de pipeline de CI/CD tem tipicamente 4 seções principais:
- gatilho
- permissões
- sistema operacional ou pool
- Etapas a serem executadas
Os exemplos a seguir demonstram como criar um arquivo de definição e configurações relacionadas para Ações do GitHub e Pipelines do Azure.
A execução azd
no GitHub Actions requer as seguintes configurações:
- Conceda
id-token: write
econtents: read
acesse escopos. - Instale a ação azd, a menos que você esteja usando uma imagem docker onde
azd
já está instalado.
Você pode usar o seguinte modelo como ponto de partida para sua própria definição de pipeline:
on:
workflow_dispatch:
push:
# Run when commits are pushed to mainline branch (main or master)
# Set this to the mainline branch you are using
branches:
- main
- master
# Set this permission if you are using a Federated Credential.
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
# azd build-in variables.
# This variables are always set by `azd pipeline config`
# You can set them as global env (apply to all steps) or you can add them to individual steps' environment
env:
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
## Define the additional variables or secrets that are required globally (provision and deploy)
# ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
# ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}
steps:
- name: Checkout
uses: actions/checkout@v4
# using the install-azd action
- name: Install azd
uses: Azure/setup-azd@v1.0.0
# # If you want to use azd-daily build, or install it from a PR, you can remove previous step and
# # use the next one:
# - name: Install azd - daily or from PR
# # Update this scrip based on the OS - pool of your pipeline. This example is for a linux pipeline installing daily build
# run: curl -fsSL https://aka.ms/install-azd.sh | bash -s -- --version daily
# shell: pwsh
# azd set up Federated Credential by default. You can remove this step if you are using Client Credentials
- name: Log in with Azure (Federated Credentials)
if: ${{ env.AZURE_CLIENT_ID != '' }}
run: |
azd auth login `
--client-id "$Env:AZURE_CLIENT_ID" `
--federated-credential-provider "github" `
--tenant-id "$Env:AZURE_TENANT_ID"
shell: pwsh
## If you set up your pipeline with Client Credentials, remove previous step and uncomment this one
# - name: Log in with Azure (Client Credentials)
# if: ${{ env.AZURE_CREDENTIALS != '' }}
# run: |
# $info = $Env:AZURE_CREDENTIALS | ConvertFrom-Json -AsHashtable;
# Write-Host "::add-mask::$($info.clientSecret)"
# azd auth login `
# --client-id "$($info.clientId)" `
# --client-secret "$($info.clientSecret)" `
# --tenant-id "$($info.tenantId)"
# shell: pwsh
# env:
# AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }}
- name: Provision Infrastructure
run: azd provision --no-prompt
env:
# # uncomment this if you are using infrastructure parameters
# AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}
## Define the additional variables or secrets that are required only for provision
# ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
# ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}
- name: Deploy Application
run: azd deploy --no-prompt
env:
## Define the additional variables or secrets that are required only for deploy
# ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
# ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}