Crear y agregar una acción personalizada en CodePipeline - 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.

Crear y agregar una acción personalizada en CodePipeline

AWS CodePipeline incluye una serie de acciones que le ayudan a configurar los recursos de compilación, prueba e implementación para su proceso de lanzamiento automatizado. Si su proceso de lanzamiento incluye actividades que no figuran en las acciones predeterminadas, como un proceso de creación desarrollado internamente o un conjunto de pruebas, puede crear una acción personalizada para esas actividades e incluirla en su canalización. Puedes usarlo AWS CLI para crear acciones personalizadas en las canalizaciones asociadas a tu AWS cuenta.

Puedes crear acciones personalizadas para las siguientes categorías de AWS CodePipeline acciones:

  • Una acción de creación personalizada que crea o transforma los elementos

  • Una acción de implementación personalizada que implementa elementos en uno o varios servidores, sitios web o repositorios

  • Una acción de prueba personalizada que configura y ejecuta pruebas automáticas

  • Una acción de invocación personalizada que ejecuta funciones

Al crear una acción personalizada, también debe crear un trabajador laboral que sondee las solicitudes de empleo CodePipeline para esta acción personalizada, ejecute el trabajo y devuelva el estado al resultado CodePipeline. Este proceso de trabajo puede estar ubicado en cualquier equipo o recurso que tenga acceso al punto de enlace público de CodePipeline. Para gestionar fácilmente el acceso y la seguridad, plantéate alojar a tu empleado en una EC2 instancia de Amazon.

Este diagrama ofrece una perspectiva de una canalización con una acción personalizada de creación:

Una perspectiva de una canalización con una acción personalizada de creación.

Si una canalización incluye una acción personalizada en una etapa, la canalización creará una solicitud de trabajo. Un proceso de trabajo personalizado detectará esa solicitud y realizará el trabajo (en este ejemplo, un proceso personalizado que utiliza software de creación de terceros). Una vez realizada la acción, el proceso de trabajo devuelve un resultado que indica si el proceso se ha completado correctamente. Si se ha completado correctamente, la canalización proporcionará la revisión y sus artefactos a la siguiente acción. Si no se ha completado correctamente, la canalización no proporcionará a la revisión a la siguiente acción en la canalización.

nota

En estas instrucciones, se presupone que ya ha completado los pasos que se detallan en Empezar con CodePipeline.

Crear una acción personalizada

Para crear una acción personalizada con AWS CLI
  1. Abra un editor de texto y cree un archivo JSON para la acción personalizada que incluye la categoría de acción, el proveedor de la acción y cualquier configuración que requiera la acción del cliente. Por ejemplo, para crear una acción de compilación personalizada que requiera solo una propiedad, el archivo JSON podría tener este aspecto:

    { "category": "Build", "provider": "My-Build-Provider-Name", "version": "1", "settings": { "entityUrlTemplate": "https://my-build-instance/job/{Config:ProjectName}/", "executionUrlTemplate": "https://my-build-instance/job/{Config:ProjectName}/lastSuccessfulBuild/{ExternalExecutionId}/" }, "configurationProperties": [{ "name": "ProjectName", "required": true, "key": true, "secret": false, "queryable": false, "description": "The name of the build project must be provided when this action is added to the pipeline.", "type": "String" }], "inputArtifactDetails": { "maximumCount": integer, "minimumCount": integer }, "outputArtifactDetails": { "maximumCount": integer, "minimumCount": integer }, "tags": [{ "key": "Project", "value": "ProjectA" }] }

    Este ejemplo añade el etiquetado a la acción personalizada incluyendo la clave de etiqueta Project y el valor ProjectA a la acción personalizada. Para obtener más información sobre cómo etiquetar los recursos CodePipeline, consulteEtiquetado de recursos.

    El archivo JSON incluye dos propiedades, entityUrlTemplate y executionUrlTemplate. Puede consultar un nombre en las propiedades de configuración de la acción personalizada dentro de las plantillas URL si sigue el formato de {Config:name}, siempre y cuando la propiedad de configuración sea obligatoria y no sea secreta. Por ejemplo, en el ejemplo anterior, el entityUrlTemplate valor hace referencia a la propiedad ProjectName de configuración.

    • entityUrlTemplate: el enlace estático que proporciona información acerca del proveedor de servicios de la acción. En el ejemplo, el sistema de compilación incluye un enlace estático a cada proyecto de compilación. El formato del enlace variará según su proveedor de compilación (o bien, si crea un tipo de acción diferente, como una prueba, otro proveedor de servicios). Debe proporcionar este formato de enlace para que cuando se añada la acción del cliente, el usuario pueda elegir este enlace para abrir un explorador en una página de su sitio web que proporcione la información específica del proyecto de compilación (o entorno de prueba).

    • executionUrlTemplate: el enlace dinámico que se actualizará con información acerca de la ejecución actual o más reciente de la acción. Cuando el empleado de trabajo personalizado actualiza el estado de este (por ejemplo, se ha realizado correctamente, error o en progreso), también proporcionará un externalExecutionId que se usará para completar el enlace. Este enlace se puede usar para proporcionar detalles acerca de la ejecución de una acción.

    Por ejemplo, al ver la acción en la canalización, verá los siguientes dos enlaces:

    Los enlaces de la CodePipeline consola conducen a más información sobre el funcionamiento de una canalización.

    1 Este enlace estático aparece después de añadir su acción personalizada y apunta a la dirección en entityUrlTemplate, la que especifica al crear su acción personalizada.

    2 Este enlace dinámico se actualiza después de cada ejecución de la acción y apunta a la dirección en executionUrlTemplate, la que especifica al crear su acción personalizada.

    Para obtener más información sobre estos tipos de enlaces, así como sobre RevisionURLTemplate yThirdPartyURL, consulte ActionTypeSettingsy CreateCustomActionTypeen la Referencia de la CodePipeline API. Para obtener más información acerca de los requisitos de estructura de acción y cómo crear una acción, consulte CodePipeline referencia de estructura de tubería.

  2. Guarda el archivo JSON y asígnale un nombre que puedas recordar fácilmente (por ejemplo, MyCustomAction .json).

  3. Abra una sesión de terminal (Linux, OS X, Unix) o el símbolo del sistema (Windows) en un equipo en el que haya instalado la AWS CLI.

  4. Usa el AWS CLI para ejecutar el aws codepipeline create-custom-action-type comando, especificando el nombre del archivo JSON que acabas de crear.

    Por ejemplo, para crear una acción personalizada de compilación:

    importante

    Asegúrese de incluir file:// antes del nombre de archivo. Es obligatorio en este comando.

    aws codepipeline create-custom-action-type --cli-input-json file://MyCustomAction.json
  5. Este comando devuelve toda la estructura de la acción personalizada que ha creado, así como la propiedad de configuración de la acción JobList, que ya se ha añadido. Al añadir una acción personalizada a una canalización, puede usar JobList para especificar los proyectos del proveedor que puede sondear en búsqueda de trabajos. Si no configura esto, todos los trabajos disponibles se devolverán cuando el empleado de trabajo personalizado sondee trabajos.

    Por ejemplo, el comando anterior podría devolver una estructura similar a la siguiente:

    { "actionType": { "inputArtifactDetails": { "maximumCount": 1, "minimumCount": 1 }, "actionConfigurationProperties": [ { "secret": false, "required": true, "name": "ProjectName", "key": true, "description": "The name of the build project must be provided when this action is added to the pipeline." } ], "outputArtifactDetails": { "maximumCount": 0, "minimumCount": 0 }, "id": { "category": "Build", "owner": "Custom", "version": "1", "provider": "My-Build-Provider-Name" }, "settings": { "entityUrlTemplate": "https://my-build-instance/job/{Config:ProjectName}/", "executionUrlTemplate": "https://my-build-instance/job/mybuildjob/lastSuccessfulBuild/{ExternalExecutionId}/" } } }
    nota

    Como parte del resultado del create-custom-action-type comando, la id sección incluye"owner": "Custom": CodePipeline asigna automáticamente Custom como propietario los tipos de acciones personalizadas. Este valor no se puede asignar ni cambiar cuando usa el comando create-custom-action-type o el comando update-pipeline.

Crear un proceso de trabajo para la acción personalizada

Las acciones personalizadas requieren un trabajador que sondee las solicitudes de trabajo CodePipeline para la acción personalizada, ejecute el trabajo y devuelva el estado al CodePipeline resultado. El proceso de trabajo puede estar ubicado en cualquier equipo o recurso que tenga acceso al punto de enlace público de CodePipeline.

El proceso de trabajo se puede diseñar de muchas formas. En las secciones siguientes se ofrecen orientaciones prácticas para desarrollar un proceso de trabajo personalizado para CodePipeline.

Elegir y configurar una estrategia de administración de permisos para el proceso de trabajo

Para desarrollar un trabajador de trabajo personalizado para su acción personalizada CodePipeline, necesitará una estrategia para la integración de la administración de usuarios y permisos.

La estrategia más sencilla consiste en añadir la infraestructura que necesita para su trabajador de trabajo personalizado mediante la creación de EC2 instancias de Amazon con un rol de instancia de IAM, lo que le permitirá ampliar fácilmente los recursos que necesita para su integración. Puede utilizar la integración integrada AWS para simplificar la interacción entre su trabajador de trabajo personalizado y CodePipeline.

Para configurar EC2 instancias de Amazon
  1. Obtén más información sobre Amazon EC2 y determina si es la opción correcta para tu integración. Para obtener más información, consulte Amazon EC2 : Virtual Server Hosting.

  2. Comience a crear sus EC2 instancias de Amazon. Para obtener más información, consulte Introducción a las instancias de Amazon EC2 Linux.

Otra estrategia que puede considerar es utilizar federación de identidades con IAM para integrar los recursos y el sistema de proveedor de identidad que ya tiene. Esta estrategia resulta particularmente útil si ya tiene un proveedor de identidad corporativo o una configuración que admita usuarios que utilicen proveedores de identidad web. La federación de identidades le permite conceder un acceso seguro a AWS los recursos CodePipeline, incluso sin tener que crear ni administrar usuarios de IAM. Puede utilizar características y políticas sobre los requisitos de seguridad de contraseñas y la rotación de credenciales. Puede utilizar aplicaciones de ejemplo como plantillas para su propio diseño.

Para configurar la identidad federada
  1. Obtenga más información acerca de la federación de identidades de IAM. Para obtener información, consulte Administrar federación.

  2. Revise los ejemplos en Escenarios para conceder acceso temporal para identificar el escenario de acceso temporal que mejor se adapte a las necesidades de su acción personalizada.

  3. Revise los ejemplos de códigos de identidad federada pertinentes a su infraestructura, como:

  4. Comience a configurar una identidad federada. Para obtener información, consulte Federación y proveedores de identidades en la Guía de usuarios de IAM.

Cree una de las siguientes opciones para utilizarla bajo su Cuenta de AWS al ejecutar su acción personalizada y su proceso de trabajo.

Los usuarios necesitan acceso programático si quieren interactuar con personas AWS ajenas a. AWS Management Console La forma de conceder el acceso programático depende del tipo de usuario que acceda. AWS

Para conceder acceso programático a los usuarios, elija una de las siguientes opciones.

¿Qué usuario necesita acceso programático? Para Mediante

Identidad del personal

(Usuarios administrados en el IAM Identity Center)

Usa credenciales temporales para firmar las solicitudes programáticas dirigidas al AWS CLI AWS SDKs, o. AWS APIs

Siga las instrucciones de la interfaz que desea utilizar:

IAM Utilice credenciales temporales para firmar las solicitudes programáticas dirigidas al AWS CLI AWS SDKs, o. AWS APIs Siga las instrucciones de Uso de credenciales temporales con AWS recursos de la Guía del usuario de IAM.
IAM

(No recomendado)

Utilice credenciales de larga duración para firmar las solicitudes programáticas dirigidas al AWS CLI, AWS SDKs, o. AWS APIs

Siga las instrucciones de la interfaz que desea utilizar:

A continuación se muestra una política de ejemplo que puede crear para utilizarla con un proceso de trabajo personalizado. Esta política es solo un ejemplo y se ofrece "tal cual".

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:PollForJobs", "codepipeline:AcknowledgeJob", "codepipeline:GetJobDetails", "codepipeline:PutJobSuccessResult", "codepipeline:PutJobFailureResult" ], "Resource": [ "arn:aws:codepipeline:us-east-2::actionType:custom/Build/MyBuildProject/1/" ] } ] }
nota

Plantéese utilizar la política administrada AWSCodePipelineCustomActionAccess.

Desarrollar un proceso de trabajo para una acción personalizada

Una vez que hayas elegido tu estrategia de administración de permisos, debes considerar cómo interactuará tu empleado. CodePipeline El siguiente diagrama muestra un flujo de trabajo de una acción personalizada y el proceso de trabajo de un proceso de creación.

El flujo de trabajo de una acción personalizada y el proceso de trabajo de un proceso de creación.
  1. Su empleado laboral sondea CodePipeline los trabajos que utilizaPollForJobs.

  2. Cuando se activa una canalización debido a un cambio en su etapa de código fuente (por ejemplo, cuando un desarrollador confirma un cambio), se inicia el proceso de lanzamiento automático. Este proceso sigue hasta la etapa en la que se ha configurado la acción personalizada. Cuando llegue a su punto de acción en esta etapa, pondrá en CodePipeline cola un trabajo. El trabajo aparecerá si el proceso de trabajo invoca realiza una llamada PollForJobs de nuevo para obtener el estado. Tome los detalles del trabajo de PollForJobs y páselos de nuevo al proceso de trabajo.

  3. El trabajador llama AcknowledgeJob para enviar CodePipeline un acuse de recibo de trabajo. CodePipeline devuelve un acuse de recibo que indica que el trabajador debe continuar con el trabajo (InProgress) o, si hay más de un trabajador que se presenta a las urnas y otro trabajador ya lo ha solicitado, recibirá una respuesta de InvalidNonceException error. Tras el InProgress acuse de recibo, CodePipeline espera a que se devuelvan los resultados.

  4. El proceso de trabajo inicia la acción personalizada en la revisión y después se ejecuta la acción. Junto con otras acciones, la acción personalizada devuelve un resultado al proceso de trabajo. En el ejemplo de una acción personalizada de creación, la acción obtiene artefactos del bucket de Amazon S3, los compila y transmite artefactos compilados correctamente al bucket de Amazon S3.

  5. Mientras se ejecuta la acción, el proceso de trabajo puede llamar a PutJobSuccessResult con un token de continuación (la serialización del estado del trabajo generada por el proceso de trabajo; por ejemplo, un identificador de compilación en formato JSON o una clave de objeto de Amazon S3) y también a la información de ExternalExecutionId, que se usará para rellenar el enlace de executionUrlTemplate. Esto añadirá en la vista de la canalización en la consola un enlace de trabajo a los detalles de una acción mientras se está realizando. Aunque no es obligatorio, resulta conveniente hacerlo porque de este modo los usuarios ven el estado de la acción personalizada mientras se ejecuta.

    En cuanto se ha llamado a PutJobSuccessResult, se considera que el trabajo se ha completado. Se crea un nuevo trabajo CodePipeline que incluye el token de continuación. Este trabajo aparecerá si el proceso de trabajo realiza de nuevo una llamada PollForJobs. El nuevo trabajo se puede usar para comprobar el estado de la acción: devolverá un token de continuación o, si la acción está completada, no lo devolverá.

    nota

    Si el proceso de trabajo realiza todo el trabajo de la acción personalizada, debería plantearse dividirlo en por lo menos dos pasos. En el primer paso se establece la página de detalles de la acción. En cuanto haya creado la página de detalles, puede serializar el estado del proceso de trabajo y devolverlo como un token de continuación, cumpliendo los límites de tamaño (consulte Cuotas en AWS CodePipeline). Por ejemplo, podría escribir el estado de la acción en la cadena que utiliza como token de continuación. En el segundo paso (y los subsiguientes) del proceso de trabajo serían en los que se realizaría la tarea de la acción. El paso final devuelve el éxito o el fracaso CodePipeline, sin ningún token de continuación en el paso final.

    Para obtener más información sobre el token de continuación, consulte las especificaciones de PutJobSuccessResult en la CodePipeline API Reference.

  6. Una vez completada la acción personalizada, el trabajador del trabajo devuelve el resultado de la acción personalizada CodePipeline a una de estas dos opciones APIs:

    • PutJobSuccessResult sin token de continuación, que indica que la acción personalizada se realizó correctamente

    • PutJobFailureResult, que indica que la acción personalizada no se realizó correctamente

    En función del resultado, la canalización proseguirá con la siguiente acción (si se ha realizado correctamente) o se detendrá (si no se ha realizado correctamente).

Arquitectura y ejemplos de procesos de trabajo personalizados

Una vez planificado el flujo general de trabajo, puede crear el proceso de trabajo. Los detalles de la acción personalizada determinan en última instancia lo que va a necesitar para el proceso de trabajo. La mayoría de los procesos para acciones personalizadas incluyen las funcionalidades siguientes:

  • Encuesta para obtener empleos a partir del CodePipeline usoPollForJobs.

  • Reconocer los trabajos y devolver los resultados al CodePipeline usar AcknowledgeJobPutJobSuccessResult, yPutJobFailureResult.

  • Recuperar artefactos o insertarlos en el bucket de Amazon S3 de la canalización. Para descargar artefactos del bucket de Amazon S3 debe crear un cliente de Amazon S3 que utilice la versión 4 de Signature (Sig V4). Se requiere la firma V4 para AWS KMS.

    Para cargar artefactos al bucket de Amazon S3 deberá configurar la solicitud PutObject de Amazon S3 para que use el cifrado. Actualmente, solo se admite el servicio de administración de AWS claves (AWS KMS) para el cifrado. AWS KMS usos AWS KMS keys. Para saber si debe utilizar una clave gestionada por el cliente Clave administrada de AWS o una clave gestionada por el cliente para cargar artefactos, su empleado personalizado debe analizar los datos del trabajo y comprobar la propiedad de la clave de cifrado. Si la propiedad está establecida, debe usar ese ID de clave administrada por el cliente al realizar la configuración AWS KMS. Si la propiedad clave es nula, se utiliza la Clave administrada de AWS. CodePipeline usa el, Clave administrada de AWS a menos que se configure de otra manera.

    Para ver un ejemplo que muestra cómo crear los AWS KMS parámetros en Java o.NET, consulte Especificar los parámetros AWS Key Management Service en Amazon S3 mediante AWS SDKs. Para obtener más información sobre el bucket de Amazon S3 para CodePipeline, consulteConceptos de CodePipeline.

Un ejemplo más complejo de un trabajador de trabajo personalizado está disponible en GitHub. El ejemplo es de código abierto y se proporciona "tal cual".

Agregar una acción personalizada a una canalización

Una vez que tenga un trabajador, puede añadir su acción personalizada a una canalización creando una nueva y seleccionándola cuando utilice el asistente Crear canalización, editando una canalización existente y añadiendo la acción personalizada, o utilizando la AWS CLI SDKs, la o la APIs.

nota

Puede crear una canalización con el asistente Crear canalización que incluya una acción personalizada si es una acción de compilación o implementación. Si la acción personalizada figura en la categoría de pruebas, debe añadirla modificando una canalización existente.

Agregar una acción personalizada a una canalización existente (CLI)

Puedes usar el AWS CLI para añadir una acción personalizada a una canalización existente.

  1. Abra una sesión de terminal (Linux, macOS, or Unix) o el símbolo del sistema (Windows) y ejecute el comando get-pipeline para copiar la estructura de canalización que desee editar en un archivo JSON. Por ejemplo, para una canalización denominada MyFirstPipeline, debería escribir el siguiente comando:

    aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json

    Este comando no devuelve nada, pero el archivo creado debería aparecer en el directorio en el que se ejecutó el comando.

  2. Abra el archivo JSON en cualquier editor de texto y modifique la estructura del archivo para añadir su acción personalizada a la etapa existente.

    nota

    Si desea que su acción se ejecute en paralelo con otra acción en esa etapa, asegúrese de asignarla al mismo valor de runOrder que esa acción.

    Por ejemplo, para modificar la estructura de una canalización que permita añadir una etapa denominada Build y añadir una acción personalizada de compilación a esa etapa, es posible modificar el JSON para añadir la etapa Build antes de una etapa de implementación de la siguiente manera:

    , { "name": "MyBuildStage", "actions": [ { "inputArtifacts": [ { "name": "MyApp" } ], "name": "MyBuildCustomAction", "actionTypeId": { "category": "Build", "owner": "Custom", "version": "1", "provider": "My-Build-Provider-Name" }, "outputArtifacts": [ { "name": "MyBuiltApp" } ], "configuration": { "ProjectName": "MyBuildProject" }, "runOrder": 1 } ] }, { "name": "Staging", "actions": [ { "inputArtifacts": [ { "name": "MyBuiltApp" } ], "name": "Deploy-CodeDeploy-Application", "actionTypeId": { "category": "Deploy", "owner": "AWS", "version": "1", "provider": "CodeDeploy" }, "outputArtifacts": [], "configuration": { "ApplicationName": "CodePipelineDemoApplication", "DeploymentGroupName": "CodePipelineDemoFleet" }, "runOrder": 1 } ] } ] }
  3. Para aplicar los cambios, ejecute el comando update-pipeline, especificando el archivo JSON de la canalización, de forma similar a como se muestra a continuación:

    importante

    Asegúrese de incluir file:// antes del nombre de archivo. Es obligatorio en este comando.

    aws codepipeline update-pipeline --cli-input-json file://pipeline.json

    Este comando devuelve la estructura completa de la canalización editada.

  4. Abre la CodePipeline consola y elige el nombre de la canalización que acabas de editar.

    La canalización muestra los cambios. La próxima vez que haga un cambio en la ubicación de código fuente, la canalización ejecutará dicha revisión a través de la estructura revisada de la canalización.