Configurar um pipeline e enviar atualizações por push
Neste artigo, você aprenderá a usar a CLI do Desenvolvedor do Azure (azd
) para enviar alterações de modelo por push por meio de um pipeline de CI/CD, como GitHub Actions ou Azure DevOps. Para este exemplo, você usará o modelo React Web App com API Node.js e MongoDB no Azure, mas poderá aplicar os princípios aprendidos neste artigo a qualquer um dos modelos da CLI do Desenvolvedor do Azure.
Observação
O comando azd pipeline config
ainda está na 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
Os modelos azd
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. Você pode encontrar azure-dev.yml
:
- Para GitHub Actions: no diretório
.github/workflows
. - Para Azure DevOps: no diretório
.azdo/pipelines
.
Você pode usar o arquivo de configuração como está ou modificá-lo de acordo com suas necessidades.
Observação
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 arquivo.
Consulte Criar uma definição de pipeline para azd abaixo.
Use o comando azd pipeline config
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 a função
Owner
ou funçõesContributor + User Access Administrator
na assinatura do Azure para permitir que o azd crie e atribua funções à entidade de serviço. - Orienta você por meio de um fluxo de trabalho para criar e configurar um repositório GitHub ou Azure DevOps e confirmar o código do projeto nele. 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, de uma ação do GitHub. azd
cria a entidade de serviço e uma credencial federada para ela.
Execute o comando a seguir para criar a entidade de serviço do Azure e configurar o pipeline:
azd pipeline config
Como opção, esse comando cria um repositório GitHub e envia o código para o novo repositório.
Observação
Por padrão, o
azd pipeline config
usa o OpenID Connect (OIDC), chamado de credenciais federadas. Se você preferir não usar o OIDC, executeazd pipeline config --auth-type client-credentials
.As credenciais OIDC/federadas não têm suporte no Terraform.
Forneça as informações solicitadas do GitHub.
Quando solicitado a confirmar e enviar suas alterações locais para iniciar uma nova execução do GitHub Actions, especifique
y
.Na janela do terminal, visualize os resultados do comando
azd pipeline config
. O comandoazd pipeline config
produzirá o nome do repositório GitHub para seu projeto.Usando seu navegador, abra o repositório GitHub do seu projeto.
Selecione Ações para ver o fluxo de trabalho em execução.
Fazer e enviar uma alteração de código
No diretório
/src/web/src/layout
do projeto, abraheader.tsx
.Localize a linha
<Text variant="xLarge">ToDo</Text>
.Altere o literal
ToDo
paramyTodo
.Salve o arquivo.
Confirme a alteração. Confirmar a alteração inicia o pipeline de ação do GitHub para implantar a atualização.
No navegador, abra o repositório GitHub do seu projeto para ver:
- Sua confirmação
- A confirmação do GitHub Actions que está sendo configurado.
Selecione Ações para ver a atualização de teste refletida no fluxo de trabalho.
Visite o URL do front-end da Web para inspecionar a atualização.
azd
como uma ação do GitHub
Adicione azd
como uma ação do GitHub. Esta ação instalará o azd
. Para usar, adicione 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
Limpar os recursos
Quando não forem mais necessários os recursos do Azure criados neste artigo, execute o comando a seguir:
azd down
Recursos avançados
Você pode estender o comando azd pipeline config
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 comando azd pipeline config
cria subscription id
, environment name
e region
como variáveis de pipeline sempre que é executado. Em seguida, a definição do 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 Key Vault na infraestrutura do modelo. Nesses casos, a lista de variáveis e segredos pode ser definida pelo modelo, usando o azure.yaml
. Por exemplo, considere a seguinte configuração do azure.yaml
:
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
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 do segredo e o valor não string do ambiente para o valor.
A definição do pipeline azure-dev.yaml
pode 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 }}
Observação
Você deve executar azd pipeline config
depois de atualizar a lista de segredos ou variáveis em azure.yaml
para o azd redefinir os valores do pipeline.
Parâmetros de infraestrutura
Considere o seguinte exemplo do bicep:
@secure()
param BlobStorageConnection string
O parâmetro BlobStorageConnection
não tem um 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 do parâmetro ao executar azd pipeline config
, salvar o valor no pipeline e buscar o valor novamente quando o pipeline for executado.
azd
usa um segredo de pipeline chamado AZD_INITIAL_ENVIRONMENT_CONFIG
para salvar e definir automaticamente 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 dos parâmetros do segredo, eliminando a necessidade de um prompt interativo.
Observação
Você deve executar azd pipeline config
novamente se adicionar um novo parâmetro.
Criar uma definição de pipeline
Se o modelo azd
ainda não tiver um arquivo de definição de pipeline de CI/CD, você poderá criar um por conta própria. Uma definição de pipeline de CI/CD normalmente tem 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 GitHub Actions e Pipelines do Azure.
A execução azd
no GitHub Actions requer as seguintes configurações:
- Conceda a
id-token: write
econtents: read
acesso a escopos. - Instale a ação azd, a menos que você esteja usando uma imagem do docker em que
azd
já esteja 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 }}