Ejercicio: Protección de la rama principal

Completado

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:

  1. Seleccione Usar esta plantilla>Crear un nuevo repositorio.

    Captura de pantalla de la interfaz de GitHub que muestra el repositorio de plantillas, con el botón para usar la plantilla actual resaltado.

  2. Escriba un nombre para el proyecto nuevo, como toy-website-review.

  3. 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.

  4. Seleccione Create repository from template (Crear repositorio a partir de plantilla).

    Captura de pantalla de la interfaz de GitHub que muestra la página de creación del repositorio.

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:

  1. Seleccione Iniciar sesión y acepte los términos de uso.

  2. En la página Crear proyecto, seleccione la organización de Azure DevOps. Después, escriba un nombre de proyecto, como toy-website-review.

    Captura de pantalla en la que se muestra la creación de un proyecto mediante el generador de demostraciones de Azure DevOps.

  3. 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.

  4. 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.

  1. Seleccione Código y, después, el icono Copiar.

    Captura de pantalla de la interfaz de GitHub que muestra el repositorio nuevo, con el botón Copiar la dirección URL del repositorio resaltado.

  2. Abra Visual Studio Code.

  3. 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.

  4. 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
    
  5. 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
    
  6. 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.

  1. Seleccione Repos>Files (Repositorios > Archivos).

    Captura de pantalla de Azure DevOps en la que se muestra el menú Repos (Repositorios) con la opción Files (Archivos) resaltada.

  2. Seleccione Clonar.

    Captura de pantalla de Azure DevOps en la que se muestra el repositorio, con el botón Clone (Clonar) resaltado.

  3. 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.

  4. Seleccione Clonar en VS Code. Si se le pide que permita que se abra Visual Studio Code, seleccione Abrir.

    Captura de pantalla de Azure DevOps en la que se muestra la configuración del repositorio, con el botón para clonar en Visual Studio Code resaltado.

  5. Cree una carpeta para usarla para el repositorio y elija Seleccionar ubicación del repositorio.

  6. 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.

  7. Visual Studio Code le pide que abra el repositorio. seleccione Open(Abrir).

    Captura de pantalla de Visual Studio Code que muestra una indicación para abrir el repositorio clonado y el botón Abrir resaltado.

Incorporación de protecciones de rama

Configure el repositorio de Git para evitar inserciones directas en la rama principal.

  1. En el explorador, seleccione Configuración.

  2. Seleccionar Ramas.

  3. Seleccione Añadir regla de protección de rama.

    Captura de pantalla de GitHub que muestra la página para agregar reglas de protección de rama, con el botón para agregar una regla resaltada.

  4. En el cuadro de texto Branch name pattern (Patrón de nombre de rama), escriba principal.

  5. 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.

  6. 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 a main 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 a main para administradores o propietarios de repositorios.

  7. Hacia la parte inferior de la página, seleccione Crear.

    Captura de pantalla de GitHub que muestra el botón 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.

  1. En el explorador, vaya Repositorios>Ramas.

  2. Mantenga el puntero sobre la rama principal y seleccione los tres puntos.

  3. Seleccione Directivas de rama.

    Captura de pantalla de Azure DevOps que muestra la lista de ramas, con el menú contextual mostrado y el elemento de menú para las directivas de rama resaltado.

  4. En la ventana Directivas de rama, cambie la opción Requerir un número mínimo de revisores a Activado.

  5. 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).

    Captura de pantalla de Azure DevOps que muestra la página de directivas de rama para la rama principal.

    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

  1. 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.

  2. Abra el archivo main.bicep en la carpeta deploy.

    Captura de pantalla de Visual Studio Code que muestra que el archivo main.bicep de la carpeta deploy

  3. 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'
    
  4. 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
        }
      }
    }
    
  5. 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.

  6. Guarde el archivo main.bicep.

  7. Abra el archivo appService.bicep en la carpeta deploy/modules.

  8. 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
    
  9. 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.

  1. 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.

  2. 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.

  3. 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.

  1. 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.

  2. 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.

  3. 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.