Tutorial: Crear una canalización de cuatro etapas - AWS CodePipeline

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Tutorial: Crear una canalización de cuatro etapas

Ahora que ha creado su primera canalización en Tutorial: Crear una canalización simple (bucket de S3) o Tutorial: Crear una canalización sencilla (repositorio de CodeCommit), puede comenzar a crear canalizaciones más complejas. Este tutorial le guiará en la creación de una canalización de cuatro etapas que utiliza un repositorio de GitHub para el código fuente, un servidor de compilación Jenkins para compilar el proyecto y una aplicación de CodeDeploy para implementar el código compilado en un servidor de ensayo. En el siguiente diagrama se muestra la canalización inicial de tres etapas.


      Un diagrama que muestra la etapa de fuente con la acción de código fuente, una etapa de compilación con la acción de Jenkins y una etapa de implementación con la acción de implementación.

Una vez creada la canalización, la editará para añadir una etapa con una acción de prueba para probar el código, utilizando Jenkins también.

Para crear esta canalización, primero debe configurar los recursos necesarios. Por ejemplo, si desea usar un repositorio de GitHub para el código fuente, debe crear el repositorio para poder añadirlo a una canalización. Este tutorial le ayudará a configurar Jenkins en una instancia EC2 con fines demostrativos.

importante

Muchas de las acciones que agrega a su canalización en este procedimiento implican recursos de AWS que debe crear antes de crear la canalización. Los recursos de AWSpara las acciones de código fuente siempre deben crearse en la misma región de AWS en la que se creó la canalización. Por ejemplo, si crea la canalización en la región Este de EE. UU. (Ohio) , el repositorio de CodeCommit debe estar en la región Este de EE. UU. (Ohio).

Puede añadir acciones entre regiones al crear su canalización. Los recursos de AWS para las acciones entre regiones deben estar en la misma región de AWS en la que planea ejecutar la acción. Para obtener más información, consulte Agregar una acción entre regiones en CodePipeline.

Antes de empezar este tutorial, debe haber completado los requisitos previos generales indicados en Introducción a CodePipeline.

Paso 1: completar los requisitos previos de

Para la integración con Jenkins, AWS CodePipeline requiere que se instale en cualquier instancia de Jenkins que se desee usar con CodePipeline. También debe configurar un rol o usuario de IAM dedicado para los permisos entre el proyecto de Jenkins y CodePipeline. La forma más sencilla de integrar Jenkins y CodePipeline es instalar Jenkins en una instancia EC2 que use un rol de instancia de IAM creado para la integración de Jenkins. Para que los enlaces de la canalización de acciones de Jenkins se conecten correctamente, debe configurar las opciones del proxy y del firewall del servidor o de la instancia EC2 de forma que permitan las conexiones entrantes en el puerto que el proyecto de Jenkins utiliza. Asegúrese de que ha configurado Jenkins para autenticar a los usuarios y aplicar el control de acceso antes de permitir conexiones en esos puertos (por ejemplo, 443 y 8443 si ha configurado Jenkins para que solo use conexiones HTTPS, o 80 y 8080 si permite conexiones HTTP). Para obtener más información, consulte Securing Jenkins.

nota

En este tutorial se usa un ejemplo de código y se configuran los pasos de compilación necesarios para convertir el ejemplo de Haml a HTML. Puede descargar el código de muestra de código abierto del repositorio de GitHub mediante los pasos descritos en Copia o clonación del ejemplo en un repositorio de GitHub. Necesitará el ejemplo completo en su repositorio de GitHub, no solo el archivo .zip.

En este tutorial también se supone lo siguiente:

  • Está familiarizado con la instalación y administración de Jenkins y con la creación de proyectos de Jenkins.

  • Ha instalado Rake y la gema Haml para Ruby en el mismo equipo o la misma instancia que aloja el proyecto de Jenkins.

  • Ha establecido las variables de entorno del sistema necesarias para poder ejecutar comandos de Rake desde la línea de comandos o el terminal (por ejemplo, en sistemas Windows, se modifica la variable PATH para incluir el directorio donde se instaló Rake).

Copia o clonación del ejemplo en un repositorio de GitHub

Para clonar la muestra e insertarla en un repositorio de GitHub
  1. Descargue el código de muestra del repositorio de GitHub o clone los repositorios en el equipo local. Existen dos muestras de paquetes:

  2. Desde el repositorio, elija Fork para clonar el repositorio de muestra en su cuenta de Github. Para obtener más información, consulte la documentación de GitHub.

Creación de un rol de IAM para usar en la integración de Jenkins

Como práctica recomendada, considere la posibilidad de iniciar una instancia EC2 para alojar el servidor Jenkins y de usar un rol de IAM para conceder a la instancia los permisos necesarios para interactuar con CodePipeline.

  1. Inicie sesión en la AWS Management Console y abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. En la consola de IAM, en el panel de navegación, seleccione Roles y Crear rol.

  3. En Select type of trusted entity (Seleccionar el tipo de entidad de confianza), elija Servicio de AWS. En Choose the service that will use this role (Elegir el servicio que utilizará este rol), elija EC2. En Select your use case (Seleccionar su caso de uso), elija EC2.

  4. Elija Siguiente: permisos. En la página Attach permissions policies (Asociar políticas de permisos), seleccione la política administrada AWSCodePipelineCustomActionAccess y, a continuación, elija Next: Tags (Siguiente: etiquetas). Elija Siguiente: Revisar.

  5. En la página Revisar, en Nombre del rol, especifique el nombre del rol que va a crear específicamente para la integración de Jenkins (por ejemplo, JenkinsAccess) y elija Crear rol.

Cuando cree la instancia EC2 en la que va a instalar Jenkins, en Paso 3: Configurar detalles de la instancia, asegúrese de que elige el rol de instancia (por ejemplo, JenkinsAccess).

Para obtener más información sobre los roles de instancia y Amazon EC2, consulte Roles de IAM para Amazon EC2, Uso de un rol de IAM para conceder permisos a aplicaciones que se ejecutan en instancias de Amazon EC2 y Creación de un rol para delegar permisos en un Servicio de AWS.

Instalar y configurar Jenkins y el CodePipeline Plugin for Jenkins

Para instalar Jenkins y el CodePipeline Plugin for Jenkins
  1. Cree la instancia EC2 en la que va a instalar Jenkins y en Paso 3: Configurar detalles de instancia, asegúrese de elegir el rol de instancia que ha creado (por ejemplo, JenkinsAccess). Para obtener más información sobre la creación de instancias EC2, consulte Lanzamiento de una instancia de Amazon EC2 en la Guía del usuario de Amazon EC2.

    nota

    Si ya posee los recursos de Jenkins que desea usar, puede hacerlo, pero debe crear un usuario de IAM especial, aplicar la política administrada AWSCodePipelineCustomActionAccess a ese usuario y configurar y usar las credenciales de acceso de dicho usuario en su recurso de Jenkins. Si desea usar la interfaz de usuario de Jenkins para proporcionar las credenciales, configure Jenkins para que solo permita HTTPS. Para obtener más información, consulte Solución de problemas CodePipeline.

  2. Instale Jenkins en la instancia EC2. Para obtener más información, consulte la documentación de Jenkins para instalar Jenkins y comenzar y obtener acceso a Jenkins, además de details of integration with Jenkins en Integraciones de productos y servicios con CodePipeline.

  3. Lance Jenkins y en la página de inicio, elija Manage Jenkins.

  4. En la página Manage Jenkins, elija Manage Plugins.

  5. Elija la pestaña Available (Disponible) y, en el cuadro de búsqueda Filter (Filtrar), escriba AWS CodePipeline. Elija CodePipeline Plugin for Jenkins de la lista y después Download now and install after restart.

  6. En la página Installing Plugins/Upgrades, seleccione Restart Jenkins when installation is complete and no jobs are running.

  7. Elija Back to Dashboard.

  8. En la página de inicio, elija New Item.

  9. En Item Name (Nombre del elemento), especifique un nombre para el proyecto de Jenkins (por ejemplo, MyDemoProject). Elija Freestyle project y después haga clic en OK.

    nota

    Asegúrese de que el nombre del proyecto cumple los requisitos de CodePipeline. Para obtener más información, consulte Cuotas en AWS CodePipeline.

  10. En la página de configuración del proyecto, seleccione la casilla Execute concurrent builds if necessary. En Source Code Management (Administración de código fuente), elija AWS CodePipeline. Si ha instalado Jenkins en una instancia EC2 y ha configurado la AWS CLI con el perfil del usuario de IAM que creó para la integración entre CodePipeline y Jenkins, deje todos los demás campos vacíos.

  11. Elija Avanzado y, en Proveedor, especifique el nombre para el proveedor de la acción que desea que aparezca en CodePipeline (por ejemplo, MyJenkinsProviderName). Asegúrese de que el nombre es único y fácil de recordar. Lo usará cuando añada una acción de compilación a la canalización más adelante en este tutorial y nuevamente cuando añada una acción de prueba.

    nota

    Este nombre de acción debe cumplir los requisitos de denominación de acciones de CodePipeline. Para obtener más información, consulte Cuotas en AWS CodePipeline.

  12. En Build Triggers, desmarque las casillas marcadas y seleccione Poll SCM. En Schedule (Programación), escriba cinco asteriscos separados por espacios, de la siguiente manera:

    * * * * *

    Esto sondea CodePipeline cada minuto.

  13. En Build, elija Add build step. Elija Ejecutar intérprete de comandos (Amazon Linux, RHEL o Ubuntu Server) Ejecutar el comando por lotes (Windows Server) y, a continuación, introduzca lo siguiente:

    rake
    nota

    Asegúrese de que el entorno está configurado con las variables y los valores obligatorios para ejecutar rake; de lo contrario, la compilación presentará errores.

  14. Elija Añadir acción tras compilación y después AWS CodePipeline Publisher. Elija Añadir y, en Ubicaciones de salida de compilación, deje la ubicación en blanco. Esta configuración es la predeterminada. Creará un archivo comprimido al final del proceso de compilación.

  15. Elija Save para guardar su proyecto de Jenkins.

Paso 4: Crear una canalización en CodePipeline

En esta parte del tutorial, va a crear una canalización utilizando el asistente Create Pipeline (Crear canalización).

Para crear un proceso de lanzamiento automatizado de CodePipeline
  1. Inicie sesión en la AWS Management Console y abra la consola de CodePipeline en http://console.aws.amazon.com/codesuite/codepipeline/home.

  2. Si es necesario, use el selector de regiones para cambiar a la región en la que se encuentran los recursos de canalización. Por ejemplo, si ha creado recursos para el tutorial anterior en us-east-2, asegúrese de que el selector de regiones esté establecido en Este de EE. UU. (Ohio).

    Para obtener más información acerca de las regiones y los puntos de conexión disponibles para CodePipeline, consulte Puntos de conexión y cuotas de AWS CodePipeline.

  3. En la página Bienvenido, Introducción o Canalizaciones, elija Crear canalización.

  4. En la página Step 1: Choose pipeline settings (Paso 1: Elegir configuración de canalización), en Pipeline name (Nombre de canalización), escriba el nombre de la canalización.

  5. En Tipo de canalización, elija V1 para los fines de este tutorial. También puede elegir V2; sin embargo, tenga en cuenta que los tipos de canalización difieren en cuanto a características y precio. Para obtener más información, consulte Tipos de canalización.

  6. En Rol de servicio, elija Nuevo rol de servicio para permitir que CodePipeline cree un rol de servicio en IAM.

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

  8. En la página Paso 2: Añadir etapa de código fuente, en Proveedor de código fuente, elija GitHub.

  9. En Conexión, seleccione una conexión existente o cree una nueva. Para crear o administrar una conexión para su acción de código fuente de GitHub, consulte GitHub conexiones.

  10. En Step 3: Add build stage (Paso 3: Añadir etapa de compilación), elija Add Jenkins (Añadir Jenkins). En Nombre de proveedor, introduzca el nombre de la acción que ha proporcionado en CodePipeline Plugin for Jenkins (por ejemplo, MyJenkinsProviderName). Este nombre debe coincidir exactamente con el nombre que aparece en CodePipeline Plugin for Jenkins. En Server URL (URL del servidor), escriba la URL de la instancia EC2 en la que se ha instalado Jenkins. En Project name (Nombre del proyecto), escriba el nombre del proyecto que ha creado en Jenkins (por ejemplo, MyDemoProject) y elija Next (Siguiente).

  11. En el Paso 4: Añadir etapa de implementación, vuelva a usar la aplicación de CodeDeploy y el grupo de implementaciones que ha creado en Tutorial: Crear una canalización simple (bucket de S3). En Proveedor de implementación, elija CodeDeploy. En Nombre de la aplicación, escriba CodePipelineDemoApplication o haga clic en el botón de actualización y elija el nombre de la aplicación en la lista. En Deployment group (Grupo de implementación), escriba CodePipelineDemoFleet o elija un grupo de la lista. A continuación, elija Next (Siguiente).

    nota

    Puede usar sus propios recursos de CodeDeploy o crear recursos nuevos, pero podría incurrir en costos adicionales.

  12. En Step 5: Review, revise la información y después elija Create pipeline.

  13. La canalización se inicia automáticamente y ejecuta la muestra en la canalización. Puede ver el progreso y los mensajes de éxito y error de cada una de las instancias de Amazon EC2 de la implementación de CodeDeploy a medida que la canalización compila la muestra Haml en HTML y la implementa en una página web.

Paso 3: Agregar otra etapa a la canalización

Ahora, agregará una etapa de prueba y, después, agregará a esa etapa una acción de prueba que use la prueba de Jenkins del ejemplo para determinar si la página web tiene contenido. Esta prueba solo tiene fines ilustrativos.

nota

Si no quisiese añadir otra etapa a la canalización, podría añadir una acción de prueba a la etapa de ensayo de la canalización, antes o después de la acción de implementación.

Agregar una etapa de prueba a la canalización

Buscar la dirección IP de una instancia

Para comprobar la dirección IP de una instancia en la que ha implementado el código
  1. Cuando el estado de canalización aparezca como Succeeded en el área de estado de la etapa Staging (Ensayo), elija Details.

  2. En la sección Deployment Details, en Instance ID, elija el ID de instancia de una de las instancias implementadas correctamente.

  3. Copie la dirección IP de la instancia (por ejemplo, 192.168.0.4). Usará esta dirección IP en la prueba de Jenkins.

Crear un proyecto de Jenkins para probar la implementación

Para crear el proyecto de Jenkins
  1. En la instancia en la que ha instalado Jenkins, abra Jenkins y en la página principal, elija New Item.

  2. En Item Name (Nombre del elemento), especifique un nombre para el proyecto de Jenkins (por ejemplo, MyTestProject). Elija Freestyle project y después haga clic en OK.

    nota

    Asegúrese de que el nombre del proyecto cumple los requisitos de CodePipeline. Para obtener más información, consulte Cuotas en AWS CodePipeline.

  3. En la página de configuración del proyecto, seleccione la casilla Execute concurrent builds if necessary. En Source Code Management (Administración de código fuente), elija AWS CodePipeline. Si ha instalado Jenkins en una instancia EC2 y ha configurado la AWS CLI con el perfil del usuario de IAM que creó para la integración entre CodePipeline y Jenkins, deje todos los demás campos vacíos.

    importante

    Si está configurando un proyecto de Jenkins y este no está instalado en una instancia de Amazon EC2 o está instalado en una instancia EC2 que utiliza el sistema operativo Windows, rellene los campos con arreglo a la configuración del puerto y del host del proxy y proporcione las credenciales del usuario o rol de IAM que configuró para integrar Jenkins y CodePipeline.

  4. Elija Avanzado y en Categoría, elija Prueba.

  5. En Provider (Proveedor), escriba el mismo nombre que usó para el proyecto de compilación (por ejemplo, MyJenkinsProviderName). Usará este nombre cuando añada la acción de prueba a la canalización más adelante en este tutorial.

    nota

    El nombre debe cumplir los requisitos de denominación de acciones de CodePipeline. Para obtener más información, consulte Cuotas en AWS CodePipeline.

  6. En Build Triggers, desmarque las casillas marcadas y seleccione Poll SCM. En Schedule (Programación), escriba cinco asteriscos separados por espacios, de la siguiente manera:

    * * * * *

    Esto sondea CodePipeline cada minuto.

  7. En Build, elija Add build step. Si va a realizar la implementación en instancias de Amazon Linux, RHEL, o Ubuntu Server, elija Ejecutar intérprete de comandos. A continuación, escriba lo siguiente, donde la dirección IP será la dirección de la instancia EC2 que copió anteriormente:

    TEST_IP_ADDRESS=192.168.0.4 rake test

    Si va a realizar la implementación en instancias de Windows Server, elija Ejecutar comando por lotes y escriba la siguiente información, donde la dirección IP es la dirección de la instancia EC2 que copió anteriormente:

    set TEST_IP_ADDRESS=192.168.0.4 rake test
    nota

    La prueba adopta el puerto 80 como puerto predeterminado. Si desea especificar un puerto diferente, añada una indicación de puerto de prueba, tal y como se indica a continuación:

    TEST_IP_ADDRESS=192.168.0.4 TEST_PORT=8000 rake test
  8. Elija Añadir acción tras compilación y después AWS CodePipeline Publisher. No elija Add.

  9. Elija Save para guardar su proyecto de Jenkins.

Crear una cuarta etapa

Para añadir una etapa a la canalización que incluya la acción de prueba de Jenkins
  1. Inicie sesión en la AWS Management Console y abra la consola de CodePipeline en http://console.aws.amazon.com/codesuite/codepipeline/home.

  2. En Nombre, elija el nombre de la canalización que ha creado, MySecondPipeline.

  3. En la página de detalles de la canalización, elija Edit.

  4. En la página Edit (Editar), elija + Stage (+ Etapa) para añadir una etapa inmediatamente después de la etapa de compilación.

  5. En el campo de nombre de la etapa nueva, escriba un nombre (por ejemplo, Testing) y elija + Add action group (Agregar grupo de acciones).

  6. En Action name (Nombre de la acción), escriba MyJenkinsTest-Action. En Test provider, elija el nombre del proveedor que especificó en Jenkins (por ejemplo, MyJenkinsProviderName). En Project name (Nombre del proyecto), escriba el nombre del proyecto que creó en Jenkins (por ejemplo, MyTestProject). En Input artifacts (Artefactos de entrada), elija el artefacto de la compilación de Jenkins cuyo nombre predeterminado es BuildArtifact y después elija Done (Listo).

    nota

    Dado que la acción de prueba de Jenkins opera en la aplicación integrada en el paso de compilación de Jenkins, utilice el artefacto de compilación para el artefacto de entrada de la acción de prueba.

    Para obtener más información acerca de los artefactos de entrada y salida y de la estructura de las canalizaciones, consulte Referencia de estructura de canalización de CodePipeline.

  7. En la página Edit, elija Save pipeline changes. En el cuadro de diálogo Save pipeline changes, elija Save and continue.

  8. Aunque se ha añadido la nueva etapa a la canalización, el estado No executions yet aparece en esa etapa porque no se han producido cambios que activen otra ejecución de la canalización. Para ejecutar la muestra en la canalización revisada, elija Liberar cambio en la página de detalles de la canalización.

    La vista de canalización muestra las etapas y acciones de su canalización y el estado de la revisión que se ejecuta en esas cuatro etapas. El tiempo que tarde en ejecutarse la canalización en todas las etapas dependerá del tamaño de los artefactos, la complejidad de la compilación y las acciones de prueba y otros factores.

Paso 4: limpie los recursos

Una vez completado este tutorial, debe eliminar la canalización y los recursos que utiliza para que no se le cobre por el uso continuado de esos recursos. Si no tiene pensado seguir usando CodePipeline, elimine la canalización y, después, la aplicación de CodeDeploy y las instancias de Amazon EC2 asociadas, así como, por último, el bucket de Amazon EC2 que se usa para almacenar los artefactos. Considere también la posibilidad de eliminar otros recursos, como el repositorio de GitHub, si no tiene pensado seguir usándolos.

Para limpiar los recursos usados en este tutorial
  1. Abra una sesión de terminal en su máquina Linux, macOS o Unix local o en un símbolo del sistema en su máquina Windows local y ejecute el comando delete-pipeline para eliminar la canalización creada. En MySecondPipeline, debería escribir el siguiente comando:

    aws codepipeline delete-pipeline --name "MySecondPipeline"

    Este comando no devuelve nada.

  2. Para limpiar los recursos de CodeDeploy, siga las instrucciones de Limpieza.

  3. Para limpiar los recursos de la instancia, elimine la instancia EC2 en la que instaló Jenkins. Para obtener más información, consulte Eliminación de la instancia.

  4. Si no tiene intención de crear más canalizaciones o volver a usar CodePipeline, elimine el bucket de Amazon S3 que se usó para almacenar los artefactos de la canalización. Para eliminar el bucket, siga las instrucciones que se indican en Eliminar un bucket.

  5. Si no tiene intención de volver a usar los demás recursos de esta canalización, plantéese eliminarlos siguiendo las instrucciones de la guía de ese recurso específico. Por ejemplo, si desea eliminar el repositorio de GitHub, siga las instrucciones en Deleting a repository en el sitio web de GitHub.