Ejercicio: Configuración del entorno
Importante
Para realizar este ejercicio, se necesita una suscripción de Azure propia y puede que se apliquen cargos. Si aún no tiene una suscripción de Azure, cree una cuenta gratuita antes de comenzar.
Antes de empezar a trabajar en el flujo de trabajo del sitio web de la empresa de juguetes, debe configurar el entorno. En esta unidad, se asegurará de que los entornos de Azure y GitHub están configurados para completar el resto de este módulo.
Para cumplir estos objetivos, tendrá que:
- Configurar un repositorio de GitHub para este módulo.
- Clonar el repositorio del proyecto en el equipo.
- Cree dos identidades de carga de trabajo en Microsoft Entra ID.
- Crear dos grupos de recursos en Azure.
- Cree secretos y entornos en GitHub.
Obtención del repositorio de GitHub
Aquí se asegura de que el repositorio de GitHub está configurado para completar el resto de este módulo. Para ello, cree un repositorio basado en uno de plantillas. El repositorio de plantillas incluye los archivos que necesita para empezar a trabajar con este módulo.
Los módulos de esta ruta de aprendizaje forman parte de una progresión. Con fines de aprendizaje, cada módulo tiene asociado un repositorio de plantillas de GitHub.
Sugerencia
Aunque haya completado el módulo anterior de la ruta de aprendizaje, siga estas instrucciones para crear un nuevo repositorio y asegúrese de darle un nuevo nombre.
Inicio desde el repositorio de plantillas
Ejecute una plantilla que configura el repositorio de GitHub.
En el sitio de GitHub, siga estos pasos para crear un repositorio a partir de la plantilla:
Seleccione Usar esta plantilla>Crear un nuevo repositorio.
Seleccione el nombre de usuario de GitHub en la lista desplegable Propietario.
Escriba un nombre de repositorio para el proyecto nuevo, como toy-website-end-to-end.
Seleccione la opción Público.
Al crear sus propios repositorios, es posible que quiera hacerlos privados. En este módulo, trabajará con algunas características de GitHub que solo funcionan con repositorios públicos y con cuentas de GitHub Enterprise.
Seleccione Create repository (Crear repositorio).
Importante
El último ejercicio de este módulo contiene pasos de limpieza importantes. Asegúrese de realizar los pasos de limpieza, aunque no haya completado este módulo.
Clonación del repositorio
Ya tiene una copia del repositorio de plantillas en su propia cuenta. Ahora clonarás este repositorio localmente para que puedas empezar a trabajar en él.
Seleccione Code (Código) y después el icono de copiar.
Abra Visual Studio Code.
En Visual Studio Code, abra una nueva ventana del terminal. Para ello, seleccione Terminal>Nuevo terminal. La ventana se suele abrir en la parte inferior de la pantalla.
Navegue en el terminal hasta el directorio donde desea clonar el repositorio de GitHub en el equipo local. Por ejemplo, para clonar el repositorio en la carpeta toy-website-environments, ejecute el comando siguiente:
cd toy-website-end-to-end
Escriba
git clone
, luego pegue la URL que copió antes. El comando debería ser algo parecido a esto:git clone https://github.com/mygithubuser/toy-website-end-to-end.git
Vuelva a abrir Visual Studio Code en la carpeta del repositorio ejecutando el comando siguiente en el terminal de Visual Studio Code:
code -r toy-website-end-to-end
Inicio de sesión en Azure
Para trabajar con grupos de recursos en Azure, inicie sesión en la cuenta de Azure desde el terminal de Visual Studio Code. Asegúrese de que ha instalado las herramientas de la CLI de Azure.
En el menú Terminal, seleccione Nuevo terminal. Normalmente, la ventana de terminal se abre en la mitad inferior de la pantalla.
El shell predeterminado suele ser pwsh, como se muestra en el lado derecho de la ventana del terminal.
Seleccione la lista desplegable Iniciar perfil y, después, Azure Cloud Shell (Bash).
Se abre un nuevo shell.
Inicio de sesión en Azure mediante la CLI de Azure
En el terminal de Visual Studio Code, ejecute el siguiente comando para iniciar sesión en Azure:
az login
En el explorador que se abre, inicie sesión en su cuenta de Azure.
Para trabajar con grupos de recursos en Azure, inicie sesión en la cuenta de Azure desde el terminal de Visual Studio Code. Asegúrese de que ha instalado Azure PowerShell.
En el menú Terminal, seleccione Nuevo terminal. Normalmente, la ventana de terminal se abre en la mitad inferior de la pantalla.
El shell predeterminado suele ser pwsh, como se muestra en el lado derecho de la ventana del terminal.
Seleccione la lista desplegable Perfil de inicio y, después, seleccione Azure Cloud Shell (PowerShell).
Se abre un nuevo shell.
Inicio de sesión en Azure mediante Azure PowerShell
En el terminal de Visual Studio Code, ejecute el siguiente comando para iniciar sesión en Azure:
Connect-AzAccount
En el explorador que se abre, inicie sesión en su cuenta de Azure.
Creación de dos identidades de carga de trabajo
Después, cree dos identidades de carga de trabajo en Microsoft Entra ID: una para el entorno de prueba y otra para el entorno de producción.
Ejecute el código siguiente para definir variables para el nombre de usuario de GitHub y el nombre del repositorio. Asegúrese de reemplazar
mygithubuser
por el nombre de usuario de GitHub, que anotó anteriormente en este ejercicio. Asegúrese también de especificar el nombre correcto del repositorio de GitHub.githubOrganizationName='mygithubuser' githubRepositoryName='toy-website-end-to-end'
Cree una identidad de carga de trabajo para las implementaciones en el entorno de prueba. La identidad de la carga de trabajo necesita dos credenciales federadas: una se usa cuando el flujo de trabajo ejecuta el trabajo de validación, ya que este trabajo no está asociado a un entorno de GitHub. La segunda se usa cuando el flujo de trabajo ejecuta el trabajo de implementación, que se ejecuta en el entorno de GitHub de prueba.
testApplicationRegistrationDetails=$(az ad app create --display-name 'toy-website-end-to-end-test') testApplicationRegistrationObjectId=$(echo $testApplicationRegistrationDetails | jq -r '.id') testApplicationRegistrationAppId=$(echo $testApplicationRegistrationDetails | jq -r '.appId') az ad app federated-credential create \ --id $testApplicationRegistrationObjectId \ --parameters "{\"name\":\"toy-website-end-to-end-test\",\"issuer\":\"https://token.actions.githubusercontent.com\",\"subject\":\"repo:${githubOrganizationName}/${githubRepositoryName}:environment:Test\",\"audiences\":[\"api://AzureADTokenExchange\"]}" az ad app federated-credential create \ --id $testApplicationRegistrationObjectId \ --parameters "{\"name\":\"toy-website-end-to-end-test-branch\",\"issuer\":\"https://token.actions.githubusercontent.com\",\"subject\":\"repo:${githubOrganizationName}/${githubRepositoryName}:ref:refs/heads/main\",\"audiences\":[\"api://AzureADTokenExchange\"]}"
Ejecute el código siguiente, que crea una identidad de carga de trabajo similar y credenciales federadas para el entorno de producción:
productionApplicationRegistrationDetails=$(az ad app create --display-name 'toy-website-end-to-end-production') productionApplicationRegistrationObjectId=$(echo $productionApplicationRegistrationDetails | jq -r '.id') productionApplicationRegistrationAppId=$(echo $productionApplicationRegistrationDetails | jq -r '.appId') az ad app federated-credential create \ --id $productionApplicationRegistrationObjectId \ --parameters "{\"name\":\"toy-website-end-to-end-production\",\"issuer\":\"https://token.actions.githubusercontent.com\",\"subject\":\"repo:${githubOrganizationName}/${githubRepositoryName}:environment:Production\",\"audiences\":[\"api://AzureADTokenExchange\"]}" az ad app federated-credential create \ --id $productionApplicationRegistrationObjectId \ --parameters "{\"name\":\"toy-website-end-to-end-production-branch\",\"issuer\":\"https://token.actions.githubusercontent.com\",\"subject\":\"repo:${githubOrganizationName}/${githubRepositoryName}:ref:refs/heads/main\",\"audiences\":[\"api://AzureADTokenExchange\"]}"
Ejecute el código siguiente para definir variables para el nombre de usuario de GitHub y el nombre del repositorio. Asegúrese de reemplazar
mygithubuser
por el nombre de usuario de GitHub, que anotó anteriormente en este ejercicio. Asegúrese también de especificar el nombre correcto del repositorio de GitHub.$githubOrganizationName = 'mygithubuser' $githubRepositoryName = 'toy-website-end-to-end'
Ejecute el código siguiente, que crea una identidad de carga de trabajo para el entorno de prueba y la asocia al repositorio de GitHub:
$testApplicationRegistration = New-AzADApplication -DisplayName 'toy-website-end-to-end-test' New-AzADAppFederatedCredential ` -Name 'toy-website-end-to-end-test' ` -ApplicationObjectId $testApplicationRegistration.Id ` -Issuer 'https://token.actions.githubusercontent.com' ` -Audience 'api://AzureADTokenExchange' ` -Subject "repo:$($githubOrganizationName)/$($githubRepositoryName):environment:Test" New-AzADAppFederatedCredential ` -Name 'toy-website-end-to-end-test-branch' ` -ApplicationObjectId $testApplicationRegistration.Id ` -Issuer 'https://token.actions.githubusercontent.com' ` -Audience 'api://AzureADTokenExchange' ` -Subject "repo:$($githubOrganizationName)/$($githubRepositoryName):ref:refs/heads/main"
Ejecute el código siguiente, que sigue un proceso similar para el entorno de producción:
$productionApplicationRegistration = New-AzADApplication -DisplayName 'toy-website-end-to-end-production' New-AzADAppFederatedCredential ` -Name 'toy-website-end-to-end-production' ` -ApplicationObjectId $productionApplicationRegistration.Id ` -Issuer 'https://token.actions.githubusercontent.com' ` -Audience 'api://AzureADTokenExchange' ` -Subject "repo:$($githubOrganizationName)/$($githubRepositoryName):environment:Production" New-AzADAppFederatedCredential ` -Name 'toy-website-end-to-end-production-branch' ` -ApplicationObjectId $productionApplicationRegistration.Id ` -Issuer 'https://token.actions.githubusercontent.com' ` -Audience 'api://AzureADTokenExchange' ` -Subject "repo:$($githubOrganizationName)/$($githubRepositoryName):ref:refs/heads/main"
Creación de dos grupos de recursos en Azure y concesión del acceso a la identidad de la carga de trabajo
A continuación, cree un grupo de recursos para cada entorno. Este proceso también concede a la identidad de carga de trabajo correspondiente el rol Colaborador en el grupo de recursos, lo que permite que el flujo de trabajo se implemente en dicho grupo de recursos.
Para crear el grupo de recursos del entorno de prueba y conceder el acceso de identidad de carga de trabajo a él, ejecute los comandos siguientes de la CLI de Azure en el terminal de Visual Studio Code:
testResourceGroupResourceId=$(az group create --name ToyWebsiteTest --location westus3 --query id --output tsv) az ad sp create --id $testApplicationRegistrationObjectId az role assignment create \ --assignee $testApplicationRegistrationAppId \ --role Contributor \ --scope $testResourceGroupResourceId
Ejecute un proceso similar para crear el grupo de recursos del entorno de producción:
productionResourceGroupResourceId=$(az group create --name ToyWebsiteProduction --location westus3 --query id --output tsv) az ad sp create --id $productionApplicationRegistrationObjectId az role assignment create \ --assignee $productionApplicationRegistrationAppId \ --role Contributor \ --scope $productionResourceGroupResourceId
Para crear el grupo de recursos del entorno de prueba y conceder el acceso de identidad de carga de trabajo a él, ejecute los comandos siguientes de Azure PowerShell en el terminal de Visual Studio Code:
$testResourceGroup = New-AzResourceGroup -Name ToyWebsiteTest -Location westus3 New-AzADServicePrincipal -AppId $($testApplicationRegistration.AppId) New-AzRoleAssignment ` -ApplicationId $($testApplicationRegistration.AppId) ` -RoleDefinitionName Contributor ` -Scope $($testResourceGroup.ResourceId)
Ejecute un proceso similar para crear el grupo de recursos del entorno de producción:
$productionResourceGroup = New-AzResourceGroup -Name ToyWebsiteProduction -Location westus3 New-AzADServicePrincipal -AppId $($productionApplicationRegistration.AppId) New-AzRoleAssignment ` -ApplicationId $($productionApplicationRegistration.AppId) ` -RoleDefinitionName Contributor ` -Scope $($productionResourceGroup.ResourceId)
Preparación de secretos de GitHub
Ejecute el código siguiente para generar los valores que necesita crear como secretos de GitHub:
echo "AZURE_CLIENT_ID_TEST: $testApplicationRegistrationAppId"
echo "AZURE_CLIENT_ID_PRODUCTION: $productionApplicationRegistrationAppId"
echo "AZURE_TENANT_ID: $(az account show --query tenantId --output tsv)"
echo "AZURE_SUBSCRIPTION_ID: $(az account show --query id --output tsv)"
$azureContext = Get-AzContext
Write-Host "AZURE_CLIENT_ID_TEST: $($testApplicationRegistration.AppId)"
Write-Host "AZURE_CLIENT_ID_PRODUCTION: $($productionApplicationRegistration.AppId)"
Write-Host "AZURE_TENANT_ID: $($azureContext.Tenant.Id)"
Write-Host "AZURE_SUBSCRIPTION_ID: $($azureContext.Subscription.Id)"
Creación de secretos de GitHub
Ha creado dos identidades de carga de trabajo y grupos de recursos en los que se pueden implementar. Ahora, cree un secreto en Acciones de GitHub.
En el explorador, vaya al repositorio de GitHub.
Seleccione Configuración>Secretos y variables>Acciones.
Seleccione New repository secret (Nuevo secreto del repositorio).
Asigne el nombre AZURE_CLIENT_ID_TEST al secreto.
En el campo Valor, pegue el GUID de la primera línea de la salida del terminal. No incluya
AZURE_CLIENT_ID_TEST
, los dos puntos ni los espacios en el valor.Seleccione Add secret (Agregar secreto).
Repita el proceso para crear los secretos para AZURE_CLIENT_ID_PRODUCTION, AZURE_TENANT_ID y AZURE_SUBSCRIPTION_ID, copiando los valores de los campos correspondientes en la salida del terminal.
Compruebe que en la lista de secretos se muestran ahora los cuatro secretos.
Creación de entornos en GitHub
En el explorador, vaya Settings>Environments (Configuración > Entornos).
Seleccione Nuevo entorno.
Escriba Prueba como nombre de entorno.
Seleccione Configure environment (Configurar el entorno).
Seleccione Entornos para volver a la lista de entornos.
Repita el proceso para crear otro entorno de nombre Producción.
Nota:
En los módulos anteriores de esta ruta de aprendizaje, agregó una regla de protección al entorno de producción. En este módulo, por motivos de simplicidad, se omite la regla de protección. Sin embargo, puede agregar la regla de protección usted mismo si lo desea.