Sección "hooks" de AppSpec
El contenido de la sección 'hooks' del archivo AppSpec varía en función de la plataforma de informática de la implementación. La sección 'hooks' de una implementación de EC2/en las instalaciones contiene los mapeos que vinculan los enlaces de eventos del ciclo de vida de la implementación a uno o varios scripts. La sección 'hooks' de una implementación de Lambda o de Amazon ECS especifica las funciones de validación de Lambda que se ejecutan durante un evento del ciclo de vida de la implementación. Si un enlace de evento no está presente, no se ejecuta ninguna operación para ese evento. Esta sección solo es necesaria si ejecuta scripts o funciones de validación de Lambda como parte de la implementación.
Temas
Sección "hooks" de AppSpec para una implementación de Amazon ECS
Temas
Lista de enlaces de eventos de ciclo de vida para una implementación de Amazon ECS
Un enlace de Lambda AWS es una función de Lambda especificada con una cadena en una nueva línea después del nombre del evento del ciclo de vida. Cada enlace se ejecuta una vez por implementación. A continuación, se muestran las descripciones de los eventos del ciclo de vida donde puede ejecutar un enlace durante una implementación de Amazon ECS.
-
BeforeInstall: se utiliza para ejecutar tareas antes de crear el conjunto de tareas de sustitución. Un grupo de destino se asocia al conjunto de tareas original. Si se especifica un agente de escucha de prueba opcional, se asociada al conjunto de tareas original. En este momento no es posible una restauración. -
AfterInstall: se utiliza para ejecutar tareas una vez que el conjunto de tareas se ha creado y uno de los grupos de destino se ha asociado con él. Si se especifica un agente de escucha de prueba opcional, se asociada al conjunto de tareas original. El resultado de la función de enlace en este evento de ciclo de vida puede activar una restauración. -
AfterAllowTestTraffic: se utiliza para ejecutar tareas después de que el oyente de prueba envía tráfico al conjunto de tareas de sustitución. El resultado de la función de enlace en este punto puede activar una restauración. -
BeforeAllowTraffic: se utiliza para ejecutar tareas una vez que el segundo grupo de destino se ha asociado con el conjunto de tareas de sustitución, pero antes de que se envíe tráfico al conjunto de tareas de sustitución. El resultado de la función de enlace en este evento de ciclo de vida puede activar una restauración. -
AfterAllowTraffic: se utiliza para ejecutar tareas después de que el segundo grupo de destino envíe tráfico al conjunto de tareas de sustitución. El resultado de la función de enlace en este evento de ciclo de vida puede activar una restauración.
Para obtener más información, consulte ¿Qué sucede durante una implementación de Amazon ECS? y Tutorial: Implementación de un servicio de Amazon ECS con una prueba de validación.
Orden de ejecución de los enlaces en una implementación de Amazon ECS.
En una implementación de Amazon ECS, los enlaces de eventos se ejecutan en el siguiente orden:
nota
No se pueden ejecutar mediante un script los eventos Start, Install, TestTraffic, AllowTraffic y End en la implementación, motivo por el cual aparecen atenuados en este diagrama.
Estructura de la sección "hooks"
Los siguientes ejemplos muestran la estructura de la sección 'hooks'.
Mediante YAML:
Hooks: - BeforeInstall: "BeforeInstallHookFunctionName" - AfterInstall: "AfterInstallHookFunctionName" - AfterAllowTestTraffic: "AfterAllowTestTrafficHookFunctionName" - BeforeAllowTraffic: "BeforeAllowTrafficHookFunctionName" - AfterAllowTraffic: "AfterAllowTrafficHookFunctionName"
Mediante JSON:
"Hooks": [ { "BeforeInstall": "BeforeInstallHookFunctionName" }, { "AfterInstall": "AfterInstallHookFunctionName" }, { "AfterAllowTestTraffic": "AfterAllowTestTrafficHookFunctionName" }, { "BeforeAllowTraffic": "BeforeAllowTrafficHookFunctionName" }, { "AfterAllowTraffic": "AfterAllowTrafficHookFunctionName" } ] }
Ejemplo de función de “hooks” de Lambda
Use la sección 'hooks' para especificar la función de Lambda a la que CodeDeploy puede llamar para validar una implementación de Amazon ECS. Puede utilizar la misma función o una distinta para los eventos de ciclo de vida de implementación BeforeInstall, AfterInstall, AfterAllowTestTraffic, BeforeAllowTraffic y AfterAllowTraffic. Cuando finalicen las pruebas de validación, la función de Lambda AfterAllowTraffic vuelve a llamar a CodeDeploy y devuelve como resultado Succeeded o Failed.
importante
Se considera que se ha producido un error en la implementación si la función de validación de Lambda no informa a CodeDeploy en el plazo de una hora.
Antes de invocar una función de enlace de Lambda, el servidor debe recibir una notificación con el ID de implementación y el ID de ejecución del enlace de evento del ciclo de vida con el comando putLifecycleEventHookExecutionStatus.
A continuación, se muestra una función de enlace de Lambda de ejemplo escrita en Node.js.
'use strict'; const aws = require('aws-sdk'); const codedeploy = new aws.CodeDeploy({apiVersion: '2014-10-06'}); exports.handler = (event, context, callback) => { //Read the DeploymentId from the event payload. var deploymentId = event.DeploymentId; //Read the LifecycleEventHookExecutionId from the event payload var lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId; /* Enter validation tests here. */ // Prepare the validation test results with the deploymentId and // the lifecycleEventHookExecutionId for CodeDeploy. var params = { deploymentId: deploymentId, lifecycleEventHookExecutionId: lifecycleEventHookExecutionId, status: 'Succeeded' // status can be 'Succeeded' or 'Failed' }; // Pass CodeDeploy the prepared validation test results. codedeploy.putLifecycleEventHookExecutionStatus(params, function(err, data) { if (err) { // Validation failed. callback('Validation test failed'); } else { // Validation succeeded. callback(null, 'Validation test succeeded'); } }); };
Sección "hooks" de AppSpec para una implementación de AWS Lambda
Temas
Lista de enlaces de eventos del ciclo de vida para una implementación de AWS Lambda
Un enlace de Lambda AWS es una función de Lambda especificada con una cadena en una nueva línea después del nombre del evento del ciclo de vida. Cada enlace se ejecuta una vez por implementación. A continuación se muestran las descripciones de los enlaces disponibles para su uso en su archivo AppSpec.
-
BeforeAllowTraffic: utilícelo para ejecutar tareas antes de que el tráfico se desvíe a la versión de la función de Lambda implementada.
-
AfterAllowTraffic: utilícelo para ejecutar tareas después de que el tráfico se desvíe a la versión de la función de Lambda implementada.
Orden de ejecución de los enlaces en una implementación de versiones de funciones de Lambda
En una implementación de versiones de funciones de Lambda sin servidor, los enlaces de eventos se ejecutan en el siguiente orden:
nota
Los eventos Start, AllowTraffic y End de la implementación no se pueden ejecutar mediante un script, motivo por el cual aparecen atenuados en este diagrama.
Estructura de la sección "hooks"
Los siguientes ejemplos muestran la estructura de la sección "hooks".
Mediante YAML:
hooks: - BeforeAllowTraffic:BeforeAllowTrafficHookFunctionName- AfterAllowTraffic:AfterAllowTrafficHookFunctionName
Mediante JSON:
"hooks": [{ "BeforeAllowTraffic": "BeforeAllowTrafficHookFunctionName" }, { "AfterAllowTraffic": "AfterAllowTrafficHookFunctionName" }]
Ejemplo de función de “hooks” de Lambda
Use la sección "hooks" para especificar la función de Lambda a la que CodeDeploy puede llamar para validar una implementación de Lambda. Puede utilizar la misma función o una diferente para los eventos de ciclo de vida de implementación BeforeAllowTraffic y AfterAllowTraffic. Cuando finalicen las pruebas de validación, la función de validación de Lambda vuelve a llamar a CodeDeploy y devuelve como resultado Succeeded o Failed.
importante
Se considera que se ha producido un error en la implementación si la función de validación de Lambda no informa a CodeDeploy en el plazo de una hora.
Antes de invocar una función de enlace de Lambda, el servidor debe recibir una notificación con el ID de implementación y el ID de ejecución del enlace de evento del ciclo de vida con el comando putLifecycleEventHookExecutionStatus.
A continuación, se muestra una función de enlace de Lambda de ejemplo escrita en Node.js.
'use strict'; const aws = require('aws-sdk'); const codedeploy = new aws.CodeDeploy({apiVersion: '2014-10-06'}); exports.handler = (event, context, callback) => { //Read the DeploymentId from the event payload. var deploymentId = event.DeploymentId; //Read the LifecycleEventHookExecutionId from the event payload var lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId; /* Enter validation tests here. */ // Prepare the validation test results with the deploymentId and // the lifecycleEventHookExecutionId for CodeDeploy. var params = { deploymentId: deploymentId, lifecycleEventHookExecutionId: lifecycleEventHookExecutionId, status: 'Succeeded' // status can be 'Succeeded' or 'Failed' }; // Pass CodeDeploy the prepared validation test results. codedeploy.putLifecycleEventHookExecutionStatus(params, function(err, data) { if (err) { // Validation failed. callback('Validation test failed'); } else { // Validation succeeded. callback(null, 'Validation test succeeded'); } }); };
Sección "hooks" de AppSpec para una implementación de EC2/en las instalaciones
Temas
Lista de enlaces de eventos del ciclo de vida
Un enlace de implementación de EC2/en las instalaciones se ejecuta una vez por cada implementación en una instancia. Puede especificar uno o varios scripts para ejecutar en un enlace. Cada enlace de un evento del ciclo de vida se especifica con una cadena en una línea independiente. A continuación se muestran las descripciones de los enlaces disponibles para su uso en su archivo AppSpec.
Para obtener información sobre los enlaces de eventos del ciclo de vida válidos para cada tipo de implementación y restauración, consulte Disponibilidad de los enlaces de eventos del ciclo de vida.
-
ApplicationStop: este evento de ciclo de vida de la implementación se produce incluso antes de que se descargue la revisión de la aplicación. Puede especificar scripts para este evento para detener con fluidez la aplicación o para eliminar los paquetes instalados actualmente en la preparación de una implementación. El archivo AppSpec y los scripts usados para este evento de ciclo de vida de la implementación proceden de la revisión de la aplicación anterior implementada correctamente.nota
Un archivo AppSpec no existe en una instancia antes de que se implemente. Por este motivo, el enlace
ApplicationStopno se ejecuta la primera vez que se realiza la implementación en la instancia. Puede utilizar el enlaceApplicationStopla segunda vez que realice la implementación en una instancia.Para determinar la ubicación de la última revisión de la aplicación implementada correctamente, el agente de CodeDeploy busca en la ubicación que se indica en el archivo
. Este archivo se encuentra en:deployment-group-id_last_successful_installCarpeta
/opt/codedeploy-agent/deployment-root/deployment-instructionsen las instancias de Amazon EC2 en Amazon Linux, Ubuntu Server y RHEL.Carpeta
C:\ProgramData\Amazon\CodeDeploy\deployment-instructionsen las instancias de Amazon EC2 en Windows Server.Para solucionar un error de una implementación durante el evento del ciclo de vida de la implementación
ApplicationStop, consulte Solución de problemas con eventos de ciclo de vida de la implementación ApplicationStop, BeforeBlockTraffic y AfterBlockTraffic que han producido un error. -
DownloadBundle: durante este evento de ciclo de vida de la implementación, el agente de CodeDeploy copia los archivos de la revisión de la aplicación en una ubicación temporal:Carpeta
/opt/codedeploy-agent/deployment-root/en las instancias de Amazon EC2 en Amazon Linux, Ubuntu Server y RHEL.deployment-group-id/deployment-id/deployment-archiveCarpeta
C:\ProgramData\Amazon\CodeDeploy\en las instancias de Amazon EC2 en Windows Server.deployment-group-id\deployment-id\deployment-archiveEste evento está reservado para el agente de CodeDeploy y no se puede usar para ejecutar scripts.
Para solucionar un error de una implementación durante el evento del ciclo de vida de la implementación
DownloadBundle, consulte Solución de problemas con un evento de ciclo de vida de la implementación DownloadBundle que ha producido el error "UnknownError: not opened for reading". -
BeforeInstall: puede usar este evento de ciclo de vida de la implementación para tareas de preinstalación, como descifrar archivos y crear un backup de la versión actual. -
Install: durante este evento de ciclo de vida de la implementación, el agente de copia los archivos de la revisión de la ubicación temporal en la carpeta de destino final. Este evento está reservado para el agente de CodeDeploy y no se puede usar para ejecutar scripts. -
AfterInstall: puede usar este evento de ciclo de vida de la implementación para configurar la aplicación o para cambiar los permisos de los archivos. -
ApplicationStart: este evento de ciclo de vida de la implementación se utiliza normalmente para reiniciar los servicios que se detuvieron duranteApplicationStop. -
ValidateService: este es el último evento de ciclo de vida de la implementación. Se utiliza para verificar que la implementación se ha completado correctamente. -
BeforeBlockTraffic: puede utilizar este evento de ciclo de vida de la implementación para ejecutar tareas en las instancias antes de que se cancele su registro de un equilibrador de carga.Para solucionar un error de una implementación durante el evento del ciclo de vida de la implementación
BeforeBlockTraffic, consulte Solución de problemas con eventos de ciclo de vida de la implementación ApplicationStop, BeforeBlockTraffic y AfterBlockTraffic que han producido un error. -
BlockTraffic: durante este evento de ciclo de vida de la implementación, se bloquea el tráfico de Internet a las instancias que están actualmente sirviendo tráfico. Este evento está reservado para el agente de CodeDeploy y no se puede usar para ejecutar scripts. -
AfterBlockTraffic: puede utilizar este evento de ciclo de vida de la implementación para ejecutar tareas en las instancias después de que se cancele su equilibrador de carga.Para solucionar un error de una implementación durante el evento del ciclo de vida de la implementación
AfterBlockTraffic, consulte Solución de problemas con eventos de ciclo de vida de la implementación ApplicationStop, BeforeBlockTraffic y AfterBlockTraffic que han producido un error. -
BeforeAllowTraffic: puede utilizar este evento de ciclo de vida de la implementación para ejecutar tareas en las instancias antes de que se registren con un equilibrador de carga. -
AllowTraffic: durante este evento de ciclo de vida de la implementación, se permite el acceso del tráfico de Internet a las instancias después de una implementación. Este evento está reservado para el agente de CodeDeploy y no se puede usar para ejecutar scripts. -
AfterAllowTraffic: puede utilizar este evento de ciclo de vida de la implementación para ejecutar tareas en las instancias después de que se registren con un equilibrador de carga.
Disponibilidad de los enlaces de eventos del ciclo de vida
En la siguiente tabla se indican los enlaces de eventos del ciclo de vida disponibles para cada escenario de implementación y restauración.
| Nombre de evento del ciclo de vida | Implementación de lanzamiento de Auto Scaling¹ | Implementación de terminación de Auto Scaling¹ | Implementación local¹ | Implementación blue/green: instancias originales | Implementación blue/green: instancias de sustitución | Restauración de implementación blue/green: instancias originales | Restauración de implementación blue/green: instancias de sustitución |
|---|---|---|---|---|---|---|---|
| ApplicationStop | ✓ | ✓ | ✓ | ✓ | |||
| DownloadBundle² | ✓ | ✓ | ✓ | ||||
| BeforeInstall | ✓ | ✓ | ✓ | ||||
| Install² | ✓ | ✓ | ✓ | ||||
| AfterInstall | ✓ | ✓ | ✓ | ||||
| ApplicationStart | ✓ | ✓ | ✓ | ||||
| ValidateService | ✓ | ✓ | ✓ | ||||
| BeforeBlockTraffic | ✓ | ✓ | ✓ | ✓ | |||
| BlockTraffic² | ✓ | ✓ | ✓ | ✓ | |||
| AfterBlockTraffic | ✓ | ✓ | ✓ | ✓ | |||
| BeforeAllowTraffic | ✓ | ✓ | ✓ | ✓ | |||
| AllowTraffic² | ✓ | ✓ | ✓ | ✓ | |||
| AfterAllowTraffic | ✓ | ✓ | ✓ | ✓ | |||
|
¹ Para obtener más información sobre implementaciones de Amazon EC2 Auto Scaling, consulte Cómo funciona Amazon EC2 Auto Scaling con CodeDeploy. ² Se aplica también a la reversión de una implementación local. ² Reservado para operaciones de CodeDeploy. No se puede utilizar para ejecutar scripts. |
|||||||
Orden de ejecución de los enlaces en una implementación
Implementaciones de lanzamiento de Auto Scaling
Durante una implementación de lanzamiento de Auto Scaling, CodeDeploy ejecuta los enlaces de eventos en el siguiente orden.
Para obtener más información sobre implementaciones de lanzamiento Auto Scaling, consulte Cómo funciona Amazon EC2 Auto Scaling con CodeDeploy.
nota
No se pueden ejecutar mediante un script los eventos Start, DownloadBundle, Install, AllowTraffic y End en la implementación, motivo por el cual aparecen atenuados en este diagrama. Sin embargo, puede editar la sección 'files' del archivo AppSpec para especificar lo que se debe instalar durante el evento Install.
Implementaciones de terminación de Auto Scaling
Durante una implementación de terminación de Auto Scaling, CodeDeploy ejecuta los enlaces de eventos en el siguiente orden.
Para obtener más información sobre implementaciones de terminación de Auto Scaling, consulte Habilitación de implementaciones de terminación durante los eventos de reducción horizontal de Auto Scaling.
nota
Los eventos Start, BlockTraffic y End de la implementación no se pueden ejecutar mediante un script, motivo por el cual aparecen atenuados en este diagrama.
Implementaciones in situ
En una implementación in situ, incluida la restauración de una implementación in situ, los enlaces de eventos se ejecutan en el orden siguiente:
nota
En el caso de las implementaciones locales, los seis enlaces relacionados con el bloqueo y el permiso del tráfico solo se aplican si se ha especificado un equilibrador de carga clásico, un equilibrador de carga de aplicación o un equilibrador de carga de red de Elastic Load Balancing en el grupo de implementación.
nota
Los eventos Start, DownloadBundle, Install y End de la implementación no se pueden ejecutar mediante un script, motivo por el cual aparecen atenuados en este diagrama. Sin embargo, puede editar la sección 'files' del archivo AppSpec para especificar lo que se debe instalar durante el evento Install.
Implementaciones azul/verde
En una implementación blue/green, los enlaces de eventos se ejecutan en el siguiente orden:
nota
Los eventos Start, DownloadBundle, Install, BlockTraffic, AllowTraffic y End de la implementación no se pueden ejecutar mediante un script, motivo por el cual aparecen atenuados en este diagrama. Sin embargo, puede editar la sección “files” del archivo AppSpec para especificar lo que se debe instalar durante el evento Install.
Estructura de la sección "hooks"
La sección 'hooks' tiene la siguiente estructura:
hooks:deployment-lifecycle-event-name: - location:script-locationtimeout:timeout-in-secondsrunas:user-name
Puede incluir los siguientes elementos en una entrada hook detrás del nombre de evento del ciclo de vida de la implementación:
- ubicación
-
Obligatorio. La ubicación en el paquete del archivo de script de la revisión. La ubicación de los scripts que especifica en la sección
hookses relativa a la raíz del paquete de revisión de la aplicación. Para obtener más información, consulte Planificación de una revisión de CodeDeploy. - timeout
-
Opcional. El número de segundos que se puede ejecutar el script antes de que se considere que se ha producido un error. El valor predeterminado es 3 600 segundos (1 hora).
nota
3 600 segundos (1 hora) es la cantidad máxima de tiempo de ejecución permitido para el script para cada evento del ciclo de vida de la implementación. Si el script supera este límite, la implementación se detiene y la implementación en la instancia da un error. Asegúrese de que el número total de segundos especificados en timeout para todos los scripts en cada evento del ciclo de vida de la implementación no supere este límite.
- runas
-
Opcional. El usuario que se va a suplantar al ejecutar el script. De forma predeterminada, es el agente de CodeDeploy que se ejecuta en la instancia. CodeDeploy no almacena las contraseñas, por lo que el usuario no se puede suplantar si el usuario runas necesita una contraseña. Este ejemplo se aplica únicamente a las instancias de Amazon Linux y Ubuntu Server.
Hacer referencia a los archivos en los scripts de enlaces
Si va a enlazar un script a un evento de ciclo de vida de CodeDeploy, tal y como se describe en Sección "hooks" de AppSpec, y desea hacer referencia a un archivo (por ejemplo, helper.sh) en el script, tendrá que especificar helper.sh mediante:
-
(Recomendado) Una ruta absoluta. Consulte Uso de rutas absolutas.
-
Una ruta relativa. Consulte Uso de rutas relativas.
Uso de rutas absolutas
Para hacer referencia a un archivo mediante su ruta absoluta, puede hacer lo siguiente:
-
Especifique la ruta absoluta en la sección
filesdel archivo AppSpec, en la propiedaddestination. A continuación, especifique la misma ruta absoluta en el script de enlace. Para obtener más información, consulte Sección “archivos” de AppSpec (solo implementaciones de EC2/en las instalaciones). -
Especifique una ruta absoluta dinámica en el script de enlace. Para obtener más información, consulte Ubicación del archivo de implementación.
Ubicación del archivo de implementación
Durante el evento del ciclo de vida de DownloadBundle, el agente CodeDeploy extrae la revisión de la implementación en un directorio que tiene el siguiente formato:
root-directory/deployment-group-id/deployment-id/deployment-archive
La parte del directorio raíz de la ruta siempre se establece en el valor predeterminado que se muestra en la siguiente tabla o se controla mediante el ajuste de configuración :root_dir. Para obtener más información acerca de los ajustes de configuración, consulte Referencia de configuración del agente de CodeDeploy.
| Plataforma de agentes | Directorio raíz predeterminado |
|---|---|
| Linux: todas las distribuciones rpm |
/opt/codedeploy-agent/deployment-root
|
| Ubuntu Server: todas las distribuciones deb |
/opt/codedeploy-agent/deployment-root
|
| Windows Server |
%ProgramData%\Amazon\CodeDeploy
|
Desde sus scripts de enlace, puede acceder al archivo de implementación actual utilizando la ruta del directorio raíz y las variables de entorno DEPLOYMENT_ID y DEPLOYMENT_GROUP_ID. Para obtener más información acerca de las que puede usar, consulte Disponibilidad de las variables de entorno para los enlaces.
Por ejemplo, así es como puede acceder a un archivo data.json que se encuentra en la raíz de su revisión en Linux:
#!/bin/bash rootDirectory="/opt/codedeploy-agent/deployment-root" # note: this will be different if you # customize the :root_dir configuration dataFile="$rootDirectory/$DEPLOYMENT_GROUP_ID/$DEPLOYMENT_ID/deployment-archive/data.json" data=$(cat dataFile)
Otro ejemplo: así es como puede acceder a un archivo data.json que se encuentra en la raíz de la revisión con Powershell en Windows:
$rootDirectory="$env:ProgramData\Amazon\CodeDeploy" # note: this will be different if you # customize the :root_dir configuration $dataFile="$rootDirectory\$env:DEPLOYMENT_GROUP_ID\$env:DEPLOYMENT_ID\deployment-archive\data.json" $data=(Get-Content $dataFile)
Uso de rutas relativas
Para hacer referencia a un archivo mediante su ruta relativa, necesitará conocer el directorio de trabajo del agente de CodeDeploy. Las rutas de los archivos son relativas a este directorio.
La siguiente tabla muestra el directorio de trabajo de cada plataforma compatible del agente de CodeDeploy.
| Plataforma de agente | Método de administración de procesos | Directorio de trabajo para los scripts de eventos de ciclo de vida |
|---|---|---|
| Linux: todas las distribuciones rpm | systemd (predeterminado) |
/
|
| init.d: más información |
/opt/codedeploy-agent
|
|
| Ubuntu Server: todas las distribuciones debian | all |
/opt/codedeploy-agent
|
| Windows Server | no se usa |
C:\Windows\System32
|
Disponibilidad de las variables de entorno para los enlaces
Durante cada evento del ciclo de vida de la implementación, los scripts de enlace pueden tener acceso a las siguientes variables de entorno:
- APPLICATION_NAME
-
El nombre de la aplicación en CodeDeploy que forma parte de la implementación actual (por ejemplo,
WordPress_App). - DEPLOYMENT_ID
-
El ID que CodeDeploy ha asignado a la implementación actual (por ejemplo,
d-AB1CDEF23). - DEPLOYMENT_GROUP_NAME
-
El nombre del grupo de implementación en CodeDeploy que forma parte de la implementación actual (por ejemplo,
WordPress_DepGroup). - DEPLOYMENT_GROUP_ID
-
El ID del grupo de implementación en CodeDeploy que forma parte de la implementación actual (por ejemplo,
b1a2189b-dd90-4ef5-8f40-4c1c5EXAMPLE). - LIFECYCLE_EVENT
-
El nombre del evento del ciclo de vida de la implementación actual (por ejemplo,
AfterInstall).
Estas variables de entorno son locales con respecto a cada evento del ciclo de vida de la implementación.
Hay variables de entorno adicionales disponibles para conectar scripts de enlace en función del origen del paquete de implementación:
Paquete de Amazon S3
-
BUNDLE_BUCKET
El nombre del bucket de Amazon S3 desde el que se descargó el paquete de implementación (por ejemplo,
my-s3-bucket). -
BUNDLE_KEY
La clave de objeto del paquete descargado dentro del bucket de Amazon S3 (por ejemplo,
WordPress_App.zip). -
BUNDLE_VERSION
La versión del objeto del paquete (por ejemplo,
3sL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo). Esta variable solo se establece si el bucket de Amazon S3 tiene activado el control de versiones de objetos. -
BUNDLE_ETAG
La ETag del objeto del paquete (por ejemplo,
b10a8db164e0754105b7a99be72e3fe5-4).
Paquete de GitHub
-
BUNDLE_COMMIT
El hash de confirmación SHA256 del paquete generado por Git (por ejemplo,
d2a84f4b8b650937ec8f73cd8be2c74add5a911ba64df27458ed8229da804a26).
El script siguiente cambia el puerto de escucha de un servidor HTTP Apache a 9090 en lugar de a 80 si el valor de DEPLOYMENT_GROUP_NAME es igual a Staging. Este script debe invocarse durante el evento del ciclo de vida de implementación BeforeInstall:
if [ "$DEPLOYMENT_GROUP_NAME" == "Staging" ] then sed -i -e 's/Listen 80/Listen 9090/g' /etc/httpd/conf/httpd.conf fi
El script de ejemplo siguiente cambia el nivel de detalle de los mensajes registrados en su log de errores de advertencia a depurar si el valor de la variable de entorno DEPLOYMENT_GROUP_NAME es igual a Staging. Este script debe invocarse durante el evento del ciclo de vida de implementación BeforeInstall:
if [ "$DEPLOYMENT_GROUP_NAME" == "Staging" ] then sed -i -e 's/LogLevel warn/LogLevel debug/g' /etc/httpd/conf/httpd.conf fi
El script de ejemplo siguiente sustituye el texto de la página web especificada por el texto que muestra el valor de estas variables de entorno. Este script debe invocarse durante el evento del ciclo de vida de implementación AfterInstall:
#!/usr/bin/python import os strToSearch="<h2>This application was deployed using CodeDeploy.</h2>" strToReplace="<h2>This page for "+os.environ['APPLICATION_NAME']+" application and "+os.environ['DEPLOYMENT_GROUP_NAME']+" deployment group with "+os.environ['DEPLOYMENT_GROUP_ID']+" deployment group ID was generated by a "+os.environ['LIFECYCLE_EVENT']+" script during "+os.environ['DEPLOYMENT_ID']+" deployment.</h2>" fp=open("/var/www/html/index.html","r") buffer=fp.read() fp.close() fp=open("/var/www/html/index.html","w") fp.write(buffer.replace(strToSearch,strToReplace)) fp.close()
Ejemplo de enlaces
A continuación se muestra un ejemplo de una entrada hooks (enlaces) que especifica dos enlaces para el evento de ciclo de vida AfterInstall.
hooks: AfterInstall: - location: Scripts/RunResourceTests.sh timeout: 180 - location: Scripts/PostDeploy.sh timeout: 180
El script Scripts/RunResourceTests.sh se ejecuta durante la fase AfterInstall del proceso de implementación. La implementación no tendrá éxito si el script tarda más de 180 segundos (3 minutos) en ejecutarse.
La ubicación de los scripts que especifica en la sección "hooks" es relativa a la raíz del paquete de revisión de la aplicación. En el ejemplo anterior, un archivo denominado RunResourceTests.sh está en un directorio denominado Scripts. El directorio Scripts está en la raíz del paquete. Para obtener más información, consulte Planificación de una revisión de CodeDeploy.