Tutorial: Crear una canalización sencilla (repositorio de CodeCommit) - AWS CodePipeline

Tutorial: Crear una canalización sencilla (repositorio de CodeCommit)

En este tutorial, utilizará CodePipeline para implementar código de un repositorio de CodeCommit en una sola instancia de Amazon EC2. La canalización se activa cuando envía un cambio al repositorio de CodeCommit. La canalización implementa los cambios en una instancia Amazon EC2 utilizando CodeDeploy como servicio de implementación.

La canalización tiene dos etapas:

  • Una etapa de origen (Source (Origen)) para la acción de origen de CodeCommit.

  • Una etapa de implementación (Deploy (Implementar)) para la acción de implementación de CodeDeploy.

La forma más sencilla de empezar a trabajar con AWS CodePipeline es utilizar el asistente Create Pipeline (Crear canalización) de la consola de CodePipeline.

nota

Antes de comenzar, asegúrese de haber configurado su cliente de Git para que funcione con CodeCommit. Para obtener instrucciones, consulte Configuración para CodeCommit.

Paso 1: Crear un repositorio de CodeCommit

En primer lugar, debe crear un repositorio en CodeCommit. Su canalización obtendrá el código fuente de este repositorio cuando se ejecute. También creará un repositorio local en el que conservará el código y lo actualizará antes de enviarlo al repositorio de CodeCommit.

Para crear un repositorio de CodeCommit

  1. Abra la consola de CodeCommit en https://console.aws.amazon.com/codecommit/.

  2. En la selección de regiones, seleccione la región de AWS en la que desea crear el repositorio y la canalización. Para obtener más información, consulte Regiones y puntos de enlace de AWS.

  3. En la página Repositories, seleccione Create repository.

  4. En la página Create repository (Crear repositorio), en Repository name (Nombre del repositorio), escriba un nombre para el repositorio (por ejemplo, MyDemoRepo).

  5. Seleccione Create.

nota

Los demás pasos de este tutorial utilizan MyDemoRepo como nombre para el repositorio de CodeCommit. Si elige otro nombre, asegúrese de utilizarlo durante todo el tutorial.

Para configurar un repositorio local

En este paso, configurará un repositorio local para conectarse a su repositorio remoto de CodeCommit.

  1. Con el nuevo repositorio abierto en la consola, elija Clone URL (Clonar URL) en la parte superior derecha de la página y, a continuación, elija Clone SSH (Clonar SSH). La dirección para clonar el repositorio Git se copia en el portapapeles.

  2. En el terminal o en la línea de comandos, acceda a un directorio local en el que desea que se almacene el repositorio local. En este tutorial, utilizamos /tmp.

  3. Ejecute el siguiente comando para clonar el repositorio, sustituyendo la dirección SSH por la que ha copiado en el paso anterior. Este comando crea un directorio denominado MyDemoRepo. Copie una aplicación de ejemplo en este directorio.

    git clone ssh://git-codecommit.us-west-2.amazonaws.com/v1/repos/MyDemoRepo

Paso 2: Agregar código de ejemplo al repositorio de CodeCommit

En este paso, descargará el código de una aplicación de ejemplo creada para un tutorial de ejemplo de CodeDeploy y lo añadirá al repositorio de CodeCommit.

  1. Descargue el siguiente archivo: SampleApp_Linux.zip

  2. Descomprima los archivos de SampleApp_Linux.zip en el directorio local que creó anteriormente (por ejemplo, /tmp/MyDemoRepo o c:\temp\MyDemoRepo).

    Asegúrese de colocar los archivos directamente en su repositorio local. No incluya una carpeta SampleApp_Linux. En la máquina Linux, macOS, or Unix local, por ejemplo, su directorio y la jerarquía de archivos deberían verse así:

    /tmp └-- MyDemoRepo │-- appspec.yml │-- index.html │-- LICENSE.txt └-- scripts │-- install_dependencies │-- start_server └-- stop_server
  3. Cambiar los directorios a su repositorio local:

    (For Linux, macOS, or Unix) cd /tmp/MyDemoRepo (For Windows) cd c:\temp\MyDemoRepo
  4. Ejecute el siguiente comando para preparar todos los archivos de una vez:

    git add -A
  5. Ejecute el siguiente comando para confirmar los archivos con un mensaje de confirmación:

    git commit -m "Add sample application files"
  6. Ejecute el siguiente comando para enviar los archivos de su repositorio local al repositorio de CodeCommit:

    git push
  7. Los archivos descargados y añadidos a su repositorio local ya se han añadido a la ramificación master de su repositorio de CodeCommit MyDemoRepo y están listos para ser incluidos en una canalización.

Paso 3: Crear una instancia EC2 de Linux e instalar el agente de CodeDeploy

En este paso, va a crear una instancia EC2 en la que va a implementar una aplicación de ejemplo. Como parte del proceso, instalará el agente de CodeDeploy en la instancia EC2. Este agente de CodeDeploy es un paquete de software que permite utilizar una instancia en las implementaciones de CodeDeploy. También puede asociar un rol de IAM a la instancia (conocido como rol de instancia) para permitirle recuperar los archivos que el agente de CodeDeploy utiliza para implementar la aplicación.

Para crear un rol de instancia

  1. Abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. En el panel de la consola, elija Roles.

  3. Elija Create role (Crear rol).

  4. En Select type of trusted entity (Seleccionar tipo de entidad de confianza), elija AWS service (Servicio de AWS). En Choose a use case (Elija un caso de uso), seleccione EC2 y Next: Permissions (Siguiente: Permisos).

  5. Busque y seleccione la política denominada AmazonEC2RoleforAWSCodeDeploy, y, a continuación, elija Next: Tags (Siguiente: etiquetas).

  6. Elija Next: Review. Escriba el nombre del rol (por ejemplo, EC2InstanceRole).

    nota

    Anote el nombre del rol para utilizarlo en el siguiente paso. Tendrá que elegir este rol cuando cree la instancia.

    Elija Create role (crear rol).

Para lanzar una instancia

  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de control de la consola, elija Launch instance (Lanzar instancia) y, en las opciones que aparecen, seleccione Launch instance (Lanzar instancias).

  3. En Step 1: Choose an Amazon Machine Image (AMI) (Paso 1: Elegir una imagen de Amazon Machine [AMI]), busque Amazon Linux 2 AMI (HVM), SSD Volume Type y elija Select (Seleccionar). (Esta AMI tiene la etiqueta "Free tier eligible" y se puede encontrar en la parte superior de la lista).

  4. En la página Step 2: Choose an Instance Type (Paso 2: Elegir un tipo de instancia), elija la capa gratuita de tipo t2.micro como configuración de hardware de la instancia y haga clic en Next: Configure Instance Details (Siguiente: Configurar los detalles de la instancia).

  5. En la página Step 3: Configure Instance Details (Paso 3: Configurar los detalles de la instancia), haga lo siguiente:

    • En Number of instances (Número de instancias), escriba 1.

    • En Auto-assign Public IP (Asignar automáticamente una IP pública), seleccione Enable (Habilitar).

    • En IAM role (Rol de IAM), elija el rol de IAM que creó en el procedimiento anterior (por ejemplo, EC2InstanceRole).

    • Expanda Advanced Details (Detalles avanzados) y, en el campo User data (Datos de usuario), escriba lo siguiente:

      #!/bin/bash yum -y update yum install -y ruby yum install -y aws-cli cd /home/ec2-user aws s3 cp s3://aws-codedeploy-us-east-2/latest/install . --region us-east-2 chmod +x ./install ./install auto
      nota

      Para ver un ejemplo en el que se ejecutan estos comandos con privilegios elevados (comandos sudo), consulte la referencia del agente de CodeDeploy en Instalación o reinstalación del agente de CodeDeploy para Amazon Linux o RHEL en la Guía del usuario de AWS CodeDeploy.

      Este código instalará el agente de CodeDeploy en la instancia a medida que se cree.

    • No haga cambios en los demás elementos de la página Step 3: Configure Instance Details (Paso 3: Configurar los detalles de la instancia). Elija Next: Add Storage (Siguiente: Añadir almacenamiento).

  6. Deje la página Paso 4: Agregar almacenamiento tal y como está y elija Siguiente: Agregar etiquetas.

  7. Elija Add Tag (Añadir etiqueta). En Key (Clave), escriba Name y, en Value (Valor), escriba MyCodePipelineDemo. Elija Next: Configure Security Group. Posteriormente, creará una aplicación de CodeDeploy que implemente la aplicación de ejemplo en esta instancia. CodeDeploy selecciona las instancias para implementarlas en función de las etiquetas asociadas a las instancias.

  8. En la página Step 6: Configure Security Group, haga lo siguiente:

    • Junto a Assign a security group (Asignar un grupo de seguridad), elija Create a new security group (Crear un nuevo grupo de seguridad).

    • En la fila de SSH, en Source (Origen), elija My IP (Mi IP).

    • Elija Add Rule (Agregar regla), HTTP y, en Source (Origen), My IP (Mi IP).

  9. Elija Review and Launch (Revisar y lanzar).

  10. En la página Review Instance Launch, elija Launch. Cuando le pidan un par de claves, elija Continúe sin un par de claves.

    nota

    A efectos de este tutorial, puede continuar sin utilizar un par de claves. Si desea usar SSH para conectarse a sus instancias, cree o use un par de claves.

    Cuando esté listo, seleccione la casilla de confirmación y elija Lanzar instancias.

  11. Elija View Instances para cerrar la página de confirmación y volver a la consola.

  12. Puede ver el estado del lanzamiento en la página Instances. Al lanzar una instancia, su estado inicial es pending. Una vez iniciada la instancia, el estado cambia a running y recibe un nombre de DNS público. (Si la columna Public DNS (DNS público) no aparece, elija el icono Show/Hide (Mostrar/Ocultar) y seleccione Public DNS).

  13. Puede que transcurran unos minutos hasta que la instancia esté lista para conectarse. Consulte la información de la columna Status Checks (Comprobaciones de estado) para ver si la instancia ha superado sus comprobaciones de estado.

Paso 4: Crear una aplicación en CodeDeploy

En CodeDeploy, una aplicación es un recurso que contiene la aplicación de software que desea implementar. Posteriormente, usará esta aplicación con CodePipeline para automatizar las implementaciones de la aplicación de ejemplo en la instancia Amazon EC2.

En primer lugar, debe crear un rol que permita a CodeDeploy realizar implementaciones. A continuación, debe crear una aplicación de CodeDeploy.

Para crear un rol de servicio de CodeDeploy

  1. Abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. En el panel de la consola, elija Roles.

  3. Elija Create role (Crear rol).

  4. En Select type of trusted entity (Seleccionar tipo de entidad de confianza), elija AWS service (Servicio de AWS). En Choose a use case (Elija un caso de uso), seleccione CodeDeploy y Next: Permissions (Siguiente: Permisos). La política administrada AWSCodeDeployRole ya está asociada al rol.

  5. Elija Next: Tags (Siguiente: Etiquetas) y Next: Review (Siguiente: Revisar).

  6. Introduzca un nombre para el rol (por ejemplo, CodeDeployRole) y, a continuación, elija Create role (Crear rol).

Para crear una aplicación en CodeDeploy

  1. Abra la consola de CodeDeploy en https://console.aws.amazon.com/codedeploy.

  2. Si la página Applications (Aplicaciones) no aparece, en el menú AWS CodeDeploy, elija Applications (Aplicaciones).

  3. Elija Create application (Crear aplicación).

  4. En Application name (Nombre de aplicación), introduzca MyDemoApplication.

  5. En Compute platform (Plataforma de computación), elija EC2/On-Premises.

  6. Elija Create application.

Para crear un grupo de implementaciones en CodeDeploy

Un grupo de implementación es un recurso que define la configuración relacionada con la implementación, como las instancias que implementar y con qué rapidez implementarlas.

  1. En la página que muestra su aplicación, elija Create deployment group (Crear grupo de implementaciones).

  2. En Deployment group name (Nombre de grupo de implementación), escriba MyDemoDeploymentGroup.

  3. En Service Role (Rol de servicio), elija el rol de servicio de que creó anteriormente (por ejemplo, CodeDeployRole).

  4. En Deployment type (Tipo de implementación), elija In-place (In situ).

  5. En Environment configuration (Configuración del entorno), elija Amazon EC2 Instances (Instancias de Amazon EC2). En el campo Clave, escriba el nombre que utilizó para etiquetar la instancia (por ejemplo, MyCodePipelineDemo).

  6. En Deployment configuration (Configuración de implementación), elija CodeDeployDefault.OneAtaTime.

  7. En Load Balancer (Balanceador de carga), anule la selección de Enable load balancing (Habilitar balanceo de carga). No es necesario configurar un balanceador de carga ni elegir un grupo de destino para este ejemplo.

  8. Expanda la sección Advanced (Configuración avanzada). En Alarms (Alarmas), si aparece alguna alarma, elija Ignore alarm configuration (Omitir configuración de alarma).

  9. Elija Create deployment group.

Paso 5: Crear la primera canalización en CodePipeline

Ya está preparado para crear y ejecutar su primera canalización. En este paso, creará una canalización que se ejecuta automáticamente cuando se inserte código en el repositorio de CodeCommit.

Para crear una canalización de CodePipeline

  1. Inicie sesión en la Consola de administración de AWS y abra la consola de CodePipeline en http://console.aws.amazon.com/codesuite/codepipeline/home.

    Abra la consola de CodePipeline en https://console.aws.amazon.com/codepipeline/.

  2. Elija Create pipeline (Crear canalización).

  3. En Step 1: Choose pipeline settings (Paso 1: Elegir configuración de canalización), en Pipeline name (Nombre de canalización), escriba MyFirstPipeline.

  4. En Service role (Rol de servicio), elija New service role (Nuevo rol de servicio) para permitir que CodePipeline cree un rol de servicio en IAM.

  5. En Advanced settings (Configuración avanzada), deje los valores predeterminados y elija Next (Siguiente).

  6. En el Step 2: Add source stage (Paso 2: Añadir etapa de código fuente), en Source provider (Proveedor de código fuente), elija AWS CodeCommit. En Repository name (Nombre de repositorio), elija el nombre del repositorio de CodeCommit que ha creado en Paso 1: Crear un repositorio de CodeCommit. En Branch name (Nombre de la ramificación), elija master y, a continuación, elija Next step (Paso siguiente).

    
            La página Step 2: Source (Paso 2: Código fuente) en el asistente de canalización de CodePipeline

    Después de seleccionar el nombre del repositorio y la ramificación, se muestra un mensaje con la regla de Amazon CloudWatch Events que se va a crear para esta canalización.

    En Change detection options, deje los valores predeterminados. Esto permite a CodePipeline utilizar Amazon CloudWatch Events para detectar cambios en el repositorio de código fuente.

    Seleccione Next (Siguiente).

  7. En Step 3: Add build stage (Paso 3: Añadir etapa de compilación), elija Skip build stage (Omitir etapa de compilación) y, a continuación, acepte el mensaje de advertencia eligiendo Skip (Omitir) una vez más. Seleccione Next (Siguiente).

    nota

    En este tutorial, va a implementar código que no requiere ningún servicio de compilación, por lo que puede omitir este paso. Sin embargo, si es necesario compilar el código fuente antes de implementarlo en instancias, puede configurar CodeBuild en este paso.

  8. En el Step 4: Add deploy stage (Paso 4: Añadir etapa de implementación), en Deploy provider (Proveedor de implementación), elija AWS CodeDeploy. En Application name (Nombre de aplicación), escriba MyDemoApplication. En Deployment group (Grupo de implementación), elija MyDemoDeploymentGroup y, a continuación, elija Next step (Paso siguiente).

    
            La página Step 4: Deploy (Paso 4: Implementar) del asistente de canalización de CodePipeline
  9. En Step 5: Review, revise la información y después elija Create pipeline.

  10. La canalización comienza a ejecutarse después de crearla. Descarga el código del repositorio de CodeCommit y crea una implementación de CodeDeploy en la instancia EC2. Puede ver el progreso y los mensajes de éxito y error a medida que la muestra de CodePipeline implementa la página web en la instancia Amazon EC2 dentro de la implementación de CodeDeploy.

    
            Una vista de una canalización que comienza a ejecutarse en la consola de CodePipeline.

¡Enhorabuena! Acaba de crear una canalización sencilla en CodePipeline.

A continuación, podrá verificar los resultados.

Para comprobar que la canalización se ha ejecutado correctamente

  1. Vea el progreso inicial de la canalización. El estado de cada etapa cambia de No executions yet (Sin ejecuciones) a In Progress (En curso) y después a Succeeded (Realizado correctamente) o Failed (Error). La canalización debería completar la primera ejecución en unos minutos.

  2. Cuando el estado de canalización aparezca como Realizado correctamente en el área de estado de la etapa Implementación, elija AWS CodeDeploy. Se abrirá la consola de CodeDeploy. Si no se muestra Succeeded (Correcto) consulte Solución de problemas del CodePipeline.

  3. En la pestaña Implementaciones, elija el ID de la implementación. En la página de la implementación, en la sección Eventos del ciclo de vida de la implementación, elija el ID de la instancia. Se abrirá la consola de EC2.

  4. En la pestaña Description (Descripción), en Public DNS (DNS público), copie la dirección (por ejemplo, ec2-192-0-2-1.us-west-2.compute.amazonaws.com) y después péguela en la barra de direcciones de su explorador web.

    Esta es la aplicación de ejemplo que descargó e integró con su repositorio de CodeCommit.

    
            La aplicación de la página web de muestra que se integró con su repositorio de CodeCommit.

Para obtener más información sobre las etapas, las acciones y cómo funcionan las canalizaciones, consulte Conceptos de CodePipeline.

Paso 6: Modificar código del repositorio de CodeCommit

Se ha configurado la canalización de modo que se ejecute siempre que se realicen cambios en el código de su repositorio de CodeCommit. En este paso, va a realizar cambios en el archivo HTML que forma parte de la aplicación CodeDeploy de ejemplo en el repositorio de CodeCommit. Cuando envíe estos cambios, la canalización se ejecuta de nuevo y los cambios que realice estarán visibles en la dirección web a la que accedió anteriormente.

  1. Cambiar los directorios a su repositorio local:

    (For Linux, macOS, or Unix) cd /tmp/MyDemoRepo (For Windows) cd c:\temp\MyDemoRepo
  2. Use un editor de texto para modificar el archivo index.html:

    (For Linux or Unix)gedit index.html (For OS X)open –e index.html (For Windows)notepad index.html
  3. Revise el contenido del archivo index.html para cambiar el color de fondo y parte del texto de la página web y, a continuación, guarde el archivo.

    <!DOCTYPE html> <html> <head> <title>Updated Sample Deployment</title> <style> body { color: #000000; background-color: #CCFFCC; font-family: Arial, sans-serif; font-size:14px; } h1 { font-size: 250%; font-weight: normal; margin-bottom: 0; } h2 { font-size: 175%; font-weight: normal; margin-bottom: 0; } </style> </head> <body> <div align="center"><h1>Updated Sample Deployment</h1></div> <div align="center"><h2>This application was updated using CodePipeline, CodeCommit, and CodeDeploy.</h2></div> <div align="center"> <p>Learn more:</p> <p><a href="https://docs.aws.amazon.com/codepipeline/latest/userguide/">CodePipeline User Guide</a></p> <p><a href="https://docs.aws.amazon.com/codecommit/latest/userguide/">CodeCommit User Guide</a></p> <p><a href="https://docs.aws.amazon.com/codedeploy/latest/userguide/">CodeDeploy User Guide</a></p> </div> </body> </html>
  4. Confirme e integre los cambios con su repositorio de CodeCommit ejecutando los siguientes comandos, uno a la vez:

    git commit -am "Updated sample application files"
    git push

Para comprobar que la canalización se ha ejecutado correctamente

  1. Vea el progreso inicial de la canalización. El estado de cada etapa cambia de No executions yet (Sin ejecuciones) a In Progress (En curso) y después a Succeeded (Realizado correctamente) o Failed (Error). La ejecución de la canalización debería completarse en unos minutos.

  2. Cuando aparezca Succeeded (Correcto) en el estado de la acción, actualice la página de demostración a la que ha accedido anteriormente en el navegador.

    En la página web actualizada se mostrará:

    
            La aplicación de la página web de muestra actualizada que se integró con su repositorio de CodeCommit.

Paso 7: Limpiar recursos

Puede utilizar algunos de los recursos que ha creado en este tutorial para otros tutoriales de esta guía. Por ejemplo, puede reutilizar la implementación y la aplicación de CodeDeploy. Sin embargo, una vez completado este o cualquier otro tutorial, debe eliminar la canalización y los recursos que utiliza para que no se le cobre por el uso continuado de esos recursos. Elimine primero la canalización, después la aplicación de CodeDeploy y las instancias de Amazon EC2 asociadas y, por último, el repositorio de CodeCommit.

Para limpiar los recursos usados en este tutorial

  1. Para limpiar los recursos de CodePipeline, siga las instrucciones en Suprimir una canalización en AWS CodePipeline.

  2. Para limpiar sus recursos de CodeDeploy, siga las instrucciones en Limpiar recursos de guía de implementación.

  3. Para eliminar el repositorio de CodeCommit, siga las instrucciones de Eliminar un repositorio de CodeCommit.

Paso 8: Documentación adicional

Obtenga más información sobre el funcionamiento de CodePipeline.