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 (CodeCommitrepositorio), puede comenzar a crear canalizaciones más complejas. En este tutorial, se explica cómo crear una canalización de cuatro etapas que utiliza un GitHub repositorio para el código fuente, un servidor de compilación Jenkins para crear el proyecto y una CodeDeploy aplicación para implementar el código creado en un servidor provisional. En el siguiente diagrama se muestra la canalización inicial de tres etapas.

Un diagrama que muestra la etapa de origen con la acción de origen, 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 quieres usar un GitHub repositorio para tu código fuente, debes crear el repositorio antes de 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 añadas a la canalización en este procedimiento implican AWS recursos que debes crear antes de crear la canalización. AWS Los recursos para las acciones de origen siempre deben crearse en la misma AWS región en la que se creó la canalización. Por ejemplo, si creas tu canalización en la región EE.UU. Este (Ohio), tu CodeCommit repositorio debe estar en la región EE.UU. Este (Ohio).

Puedes añadir acciones entre regiones al crear tu canalización. AWS los recursos para las acciones entre regiones deben estar en la misma AWS región en la que planeas ejecutar la acción. Para obtener más información, consulte Añadir una acción interregional en CodePipeline.

Antes de empezar este tutorial, debe haber completado los requisitos previos generales indicados en Empezar con CodePipeline.

Paso 1: completar los requisitos previos de

Para realizar la integración con Jenkins, es AWS CodePipeline necesario que instales el CodePipeline complemento de Jenkins en cualquier instancia de Jenkins con la que quieras usarlo. CodePipeline También debes configurar un usuario o rol de IAM dedicado para usarlos como permisos entre tu proyecto de Jenkins y. CodePipeline La forma más sencilla de integrar Jenkins CodePipeline es instalar Jenkins en una instancia de EC2 que utilice un rol de instancia de IAM que haya 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 ejemplo de código abierto desde el GitHub repositorio siguiendo los pasos que se indican en. Copia o clona la muestra en un repositorio GitHub Necesitarás toda la muestra en tu GitHub repositorio, 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 clona la muestra en un repositorio GitHub

Para clonar la muestra y enviarla a un GitHub repositorio
  1. Descargue el código de muestra del GitHub repositorio o clone los repositorios en su ordenador 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. GitHub

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

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

  1. Inicie sesión en la consola de IAM AWS Management Console y ábrala 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 de revisión, en Nombre del rol, introduzca el nombre del rol que desee crear específicamente para la integración con Jenkins (por ejemplo, JenkinsAccess) y, a continuación, seleccione Crear rol.

Cuando cree la instancia de EC2 en la que instalará Jenkins, en el paso 3: Configurar los detalles de la instancia, asegúrese de elegir el rol de la 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.

Instale y configure Jenkins y el CodePipeline complemento para Jenkins

Para instalar Jenkins y el CodePipeline complemento para Jenkins
  1. Cree una instancia de EC2 en la que vaya a instalar Jenkins y, en el paso 3: Configurar los detalles de la instancia, asegúrese de elegir el rol de instancia que creó (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 el CodePipeline complemento para Jenkins de la lista y elija Descargar ahora e instalar después de reiniciar.

  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 Nombre del elemento, introduce 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 de su proyecto cumpla con los requisitos para 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 de EC2 y la ha configurado AWS CLI con el perfil del usuario de IAM que creó para la integración entre Jenkins CodePipeline y Jenkins, deje todos los demás campos vacíos.

  11. Elija Avanzado y, en Proveedor, introduzca un nombre para el proveedor de la acción tal y como aparecerá 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

    El nombre de esta acción debe cumplir los requisitos de denominación de las 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. Selecciona Añadir acción posterior a la creación y, a continuación, selecciona AWS CodePipeline Publicador. 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 2: Crea 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 publicación CodePipeline automatizado
  1. Inicie sesión en la CodePipeline consola AWS Management Console y ábrala 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 sobre las regiones y los puntos de conexión disponibles CodePipeline, consulte AWS CodePipeline puntos de conexión y cuotas.

  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 Función de servicio, elija Nueva función de servicio para poder CodePipeline crear una función 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 la fase de origen, en Proveedor de origen, elija GitHub.

  9. En Conexión, seleccione una conexión existente o cree una nueva. Para crear o gestionar una conexión para la acción GitHub de origen, consulteGitHub conexiones.

  10. En Step 3: Add build stage (Paso 3: Añadir etapa de compilación), elija Add Jenkins (Añadir Jenkins). En Nombre del proveedor, introduce el nombre de la acción que proporcionaste en el CodePipeline complemento de Jenkins (por ejemplo MyJenkinsProviderName). Este nombre debe coincidir exactamente con el nombre del CodePipeline complemento de Jenkins. En Server URL (URL del servidor), escriba la URL de la instancia EC2 en la que se ha instalado Jenkins. En Nombre del proyecto, introduce el nombre del proyecto que creaste en Jenkins, por ejemplo MyDemoProject, y luego selecciona Siguiente.

  11. En el paso 4: Añadir la fase de despliegue, reutilice la CodeDeploy aplicación y el grupo de despliegue en Tutorial: Crear una canalización simple (bucket de S3) los que creó. En Deploy provider (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 utilizar sus propios CodeDeploy recursos o crear otros nuevos, pero puede incurrir en costes 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 los mensajes de progreso y éxito y fracaso a medida que la canalización crea el ejemplo de Haml en HTML y lo despliega en una página web en cada una de las instancias de Amazon EC2 de la implementación. CodeDeploy

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 Nombre del elemento, introduzca 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 cumpla con los CodePipeline requisitos. 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 de EC2 y la ha configurado AWS CLI con el perfil del usuario de IAM que creó para la integración entre Jenkins CodePipeline y Jenkins, deje todos los demás campos vacíos.

    importante

    Si está configurando un proyecto de Jenkins y no está instalado en una instancia de Amazon EC2, o está instalado en una instancia EC2 que ejecuta un sistema operativo Windows, complete los campos requeridos por la configuración del puerto y el host del proxy, y proporcione las credenciales del usuario o rol de IAM que configuró para la integración entre Jenkins y. CodePipeline

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

  5. En Provider, introduzca el mismo nombre que utilizó 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

    Este nombre debe cumplir los requisitos de CodePipeline denominación para las acciones. 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. Selecciona Añadir acción posterior a la creación y, a continuación, selecciona AWS CodePipeline Publicador. 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 CodePipeline consola AWS Management Console y ábrala en http://console.aws.amazon.com/codesuite/codepipeline/home.

  2. En Nombre, elige el nombre de la canalización que has 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 Nombre de la acción, escriba MyJenkinsTest-Action. En Proveedor de pruebas, elija el nombre del proveedor que especificó en Jenkins (por ejemplo, MyJenkinsProviderName). En Nombre del proyecto, ingresa el nombre del proyecto que creaste en Jenkins (por ejemplo, MyTestProject). En Artefactos de entrada, elige el artefacto de la versión de Jenkins cuyo nombre predeterminado es y BuildArtifact, a continuación, selecciona 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 CodePipeline referencia de estructura de tubería.

  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 intención de seguir utilizándola CodePipeline, elimine la canalización, luego la CodeDeploy aplicación y sus instancias de Amazon EC2 asociadas y, por último, el bucket de Amazon S3 que se utiliza para almacenar artefactos. También debería considerar la posibilidad de eliminar otros recursos, como el GitHub repositorio, si no tiene intención de seguir utilizá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 CodeDeploy los recursos, sigue las instrucciones de Cleaning Up.

  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 CodePipeline volver a utilizarlas, elimine el bucket de Amazon S3 que se utiliza para almacenar los artefactos de su 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 GitHub repositorio, siga las instrucciones de Eliminar un repositorio en el sitio GitHub web.