Ejercicio: Protección de la rama principal
El equipo está trabajando en una plantilla de Bicep que ya contiene un sitio web y una base de datos. Ha implementado los componentes en el entorno de producción. Ahora, debe actualizar la plantilla de Bicep para agregar la cola de procesamiento de pedidos.
En este ejercicio, creará una rama de características para el cambio. También protegerá la rama principal y solo permitirá que los cambios se combinen en la rama principal una vez revisados. Pero, antes de eso, debe asegurarse de que el entorno está configurado para completar el resto de este módulo.
Durante el proceso, hará lo siguiente:
- Configurar un repositorio de GitHub para este módulo.
- Clonar el repositorio en el equipo.
- Agregue protección de rama a la rama principal del repositorio.
- Cree una rama de características local para el cambio.
- Intente combinar la rama de características en la rama principal.
- Configurar un proyecto de Azure DevOps para este módulo.
- Clonar el repositorio del proyecto en el equipo.
- Agregue directivas de rama a la rama principal del repositorio.
- Cree una rama de características local para el cambio.
- Intente combinar la rama de características en la rama principal.
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 contiene los archivos que necesita para empezar a trabajar con este módulo.
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.
Escriba un nombre para el proyecto nuevo, como toy-website-review.
Seleccione la opción Público.
Al crear sus propios repositorios, es posible que quiera hacerlos privados. En este módulo, trabajará con características de GitHub que solo funcionan con repositorios públicos y con cuentas de GitHub Enterprise.
Seleccione Create repository from template (Crear repositorio a partir de plantilla).
Obtención del proyecto de Azure DevOps
En este paso, se asegurará de que la organización de Azure DevOps esté configurada para completar el resto de este módulo. Para configurarla, ejecute una plantilla que cree un proyecto en Azure DevOps.
En el sitio del generador de demostraciones de Azure DevOps, siga estos pasos:
Seleccione Iniciar sesión y acepte los términos de uso.
En la página Crear proyecto, seleccione la organización de Azure DevOps. Después, escriba un nombre de proyecto, como toy-website-review.
Seleccione Crear un proyecto.
La plantilla tarda unos minutos en ejecutarse. Crea automáticamente una canalización y un archivo Bicep que usará en ejercicios posteriores.
Seleccione Navegar al proyecto para ir al proyecto de Azure DevOps.
Clonación del repositorio
Ya tiene una copia del repositorio de plantillas en su propia cuenta. Clone este repositorio localmente para que pueda empezar a trabajar en él.
Seleccione Código y, después, el icono 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.
El terminal, vaya al directorio donde desea clonar el repositorio de GitHub en el equipo local. Por ejemplo, para clonar el repositorio en la carpeta toy-website-review, ejecute el comando siguiente:
cd toy-website-review
Escriba
git clone
y pegue la dirección URL que copió anteriormente y, a continuación, ejecute el comando. El comando tiene este aspecto:git clone https://github.com/mygithubuser/toy-website-review.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-review
Ahora tiene un proyecto en su propia cuenta. Clone este repositorio localmente para que pueda empezar a trabajar en él.
Seleccione Repos>Files (Repositorios > Archivos).
Seleccione Clonar.
Si usa macOS, necesita una contraseña especial para clonar el repositorio de Git. Seleccione Generar credenciales de GIT y copie en un lugar seguro el nombre de usuario y la contraseña que se muestran.
Seleccione Clonar en VS Code. Si se le pide que permita que se abra Visual Studio Code, seleccione Abrir.
Cree una carpeta para usarla para el repositorio y elija Seleccionar ubicación del repositorio.
Va a usar este repositorio por primera vez, así que se le pedirá que inicie sesión.
Si usa Windows, escriba las mismas credenciales que ha usado para iniciar sesión en Azure DevOps anteriormente en este ejercicio.
Si usa macOS, escriba el nombre de usuario y la contraseña de Git que ha generado hace unos instantes.
Visual Studio Code le pide que abra el repositorio. seleccione Open(Abrir).
Incorporación de protecciones de rama
Configure el repositorio de Git para evitar inserciones directas en la rama principal.
En el explorador, seleccione Configuración.
Seleccionar Ramas.
Seleccione Añadir regla de protección de rama.
En el cuadro de texto Branch name pattern (Patrón de nombre de rama), escriba principal.
Seleccione Require a pull request before merging (Requerir una solicitud de incorporación de cambios antes de combinar).
Desactive Require approvals (Requerir aprobaciones). Normalmente, seleccionaría esta opción. Pero en este ejemplo, va a combinar su propia solicitud de incorporación de cambios y la opción Require approvals (Requerir aprobaciones) le impide hacerlo.
Seleccione Do not allow bypassing the above settings (No permitir la omisión de la configuración anterior).
Seleccione esta configuración como ejemplo para mostrar cómo de
git push
amain
se produce un error más adelante en este ejercicio. En un entorno de producción, es posible que no desee restringir las combinaciones directas amain
para administradores o propietarios de repositorios.Hacia la parte inferior de la página, seleccione Crear.
GitHub podría pedirle que vuelva a iniciar sesión para confirmar su identidad.
Incorporación de directivas de rama
Configure el repositorio de Git para evitar inserciones directas en la rama principal.
En el explorador, vaya Repositorios>Ramas.
Mantenga el puntero sobre la rama principal y seleccione los tres puntos.
Seleccione Directivas de rama.
En la ventana Directivas de rama, cambie la opción Requerir un número mínimo de revisores a Activado.
Cambie el número mínimo de revisores a 1 y seleccione la opción Allow requestors to approve their own changes (Permitir a los solicitantes aprobar sus propios cambios).
Nota:
Aquí, habilitará la opción Allow requestors to approve their own changes (Permitir a los solicitantes aprobar sus propios cambios). En estos ejercicios, está trabajando por su cuenta, por lo que debe crear y aprobar los cambios. Pero en un entorno de equipo real, es posible que no quiera habilitar esta opción.
Creación de una rama de características local
En el terminal de Visual Studio Code, ejecute el comando siguiente:
git checkout -b add-orders-queue
Este comando crea una nueva rama de características desde la que trabajar.
Abra el archivo main.bicep en la carpeta deploy.
Debajo de los parámetros, agregue una nueva variable para el nombre de la cola:
var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS' var processOrderQueueName = 'processorder'
Dentro del recurso de la cuenta de almacenamiento, agregue la cola como un recurso secundario anidado:
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = { name: storageAccountName location: location sku: { name: storageAccountSkuName } kind: 'StorageV2' properties: { accessTier: 'Hot' } resource queueServices 'queueServices' existing = { name: 'default' resource processOrderQueue 'queues' = { name: processOrderQueueName } } }
En la definición del módulo
appService
, agregue la cuenta de almacenamiento y los nombres de cola como parámetros:module appService 'modules/appService.bicep' = { name: 'appService' params: { location: location appServiceAppName: appServiceAppName storageAccountName: storageAccount.name processOrderQueueName: storageAccount::queueServices::processOrderQueue.name environmentType: environmentType } }
Este código permite a la aplicación encontrar la cola a la que enviará mensajes.
Guarde el archivo main.bicep.
Abra el archivo appService.bicep en la carpeta deploy/modules.
Hacia la parte superior del archivo appService.bicep, agregue nuevos parámetros para los nombres de cola y cuenta de almacenamiento:
@description('The Azure region into which the resources should be deployed.') param location string @description('The name of the App Service app to deploy. This name must be globally unique.') param appServiceAppName string @description('The name of the storage account to deploy. This name must be globally unique.') param storageAccountName string @description('The name of the queue to deploy for processing orders.') param processOrderQueueName string @description('The type of the environment. This must be nonprod or prod.') @allowed([ 'nonprod' 'prod' ]) param environmentType string
Actualice el recurso
appServiceApp
para propagar los nombres de cuenta de almacenamiento y cola a las variables de entorno de la aplicación:resource appServiceApp 'Microsoft.Web/sites@2024-04-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true siteConfig: { appSettings: [ { name: 'StorageAccountName' value: storageAccountName } { name: 'ProcessOrderQueueName' value: processOrderQueueName } ] } } }
Confirmación e inserción de la rama de características
Confirme los cambios e insértelos en el repositorio de GitHub mediante la ejecución de los comandos siguientes en el terminal de Visual Studio Code:
Confirme los cambios e insértelos en el repositorio de Azure Repos mediante la ejecución de los comandos siguientes en el terminal de Visual Studio Code:
git add .
git commit -m "Add orders queue and associated configuration"
git push --set-upstream origin add-orders-queue
La rama de características se inserta en una nueva rama, también denominada add-orders-queue, en el repositorio remoto.
Intento de combinar la rama de características con rama principal
Ha aprendido por qué no es aconsejable realizar la inserción directamente en la rama principal. Aquí, intenta interrumpir esa directriz para poder ver cómo la protección de la rama principal impide insertar accidentalmente los cambios en una rama protegida.
En Visual Studio Code, ejecute las siguientes instrucciones para cambiar a la rama principal y combinar la rama add-orders-queue en ella:
git checkout main git merge add-orders-queue
El comando funcionó, pero ha combinado la rama add-orders-queue en la rama principal solo en el repositorio de Git local.
Ejecute la siguiente instrucción para intentar insertar los cambios en GitHub:
git push
Observe que se produce un error en la inserción con un mensaje de error similar al siguiente:
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 remote: error: GH006: Protected branch update failed for refs/heads/main. remote: error: Changes must be made through a pull request. To https://github.com/mygithubuser/toy-website-review.git ! [remote rejected] main -> main (protected branch hook declined) error: failed to push some refs to 'https://github.com/mygithubuser/toy-website-review.git'
El mensaje de error indica que no se permiten inserciones en la rama principal y que debe usar una solicitud de incorporación de cambios para actualizar la rama.
Deshaga la combinación mediante la ejecución de la instrucción siguiente:
git reset --hard HEAD~1
Este comando indica al repositorio de Git local que restablezca el estado de la rama principal que tenía antes de combinar la última confirmación y que no guarde los cambios. La rama add-orders-queue no se ve afectada.
Ha aprendido por qué no es aconsejable realizar la inserción directamente en la rama principal. Aquí, intenta interrumpir esa directriz para poder ver cómo las directivas de rama impiden insertar accidentalmente los cambios en una rama protegida.
En Visual Studio Code, ejecute las siguientes instrucciones para cambiar a la rama principal y combinar la rama add-orders-queue en ella:
git checkout main git merge add-orders-queue
El comando funcionó, pero ha combinado la rama add-orders-queue en la rama principal solo en el repositorio de Git local.
Ejecute la siguiente instrucción para intentar insertar los cambios en Azure Repos:
git push
Observe que se produce un error en la inserción con un mensaje de error similar al siguiente:
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 To https://dev.azure.com/mytoycompany/toy-website-review/_git/toy-website-review ! [remote rejected] main -> main (TF402455: Pushes to this branch are not permitted; you must use a pull request to update this branch.) error: failed to push some refs to 'https://dev.azure.com/mytoycompany/toy-website-review/_git/toy-website-review'
El mensaje de error indica que no se permiten inserciones en la rama principal y que debe usar una solicitud de incorporación de cambios para actualizar la rama.
Deshaga la combinación mediante la ejecución de la instrucción siguiente:
git reset --hard HEAD~1
Este comando indica al repositorio de Git local que restablezca el estado de la rama principal que tenía antes de combinar la última confirmación y que no guarde los cambios. La rama add-orders-queue no se ve afectada.