Datos de Contexto
Las reglas se ejecutan principalmente dentro de un contexto, como webhooks, eventos de topic o pipelines.
Para usar los datos que desencadenaron el contexto, existe un namespace de ClaJS llamado ctx
que está siempre disponible para los rulebooks.
| Función de Contexto | Contexto | Tipo de Dato | Contenido |
|---|---|---|---|
ctx.category() |
cualquier evento de topic | Object | Información de categoría |
ctx.fields() |
topic_modify | Array | Lista de campos modificados, con valor antiguo y nuevo |
ctx.job() |
pipelines | Object | Información del job |
ctx.env() |
pipelines | String | Entorno del job actual |
ctx.branch() |
pipelines | String | Nombre de la rama extraída para el job |
ctx.request() |
webhook | Request | Parámetros de la petición web |
ctx.status() |
cualquier evento de topic | Object | Información de estado |
ctx.topic() |
cualquier evento de topic | Object | Información del topic |
ctx.user() |
(cualquiera) | String | Id del usuario |
undefined cuando no está en contexto
Cuando no está en contexto, todas las funciones de contexto devolverán
undefined y emitirán una advertencia a stderr [warn] X not in context.
Asegúrese de verificar el valor de retorno o usar ctx.has() antes de proceder
bajo el supuesto de que el valor de retorno es un hash {}
Uso¶
Las llamadas de contexto son útiles para obtener el detalle del evento que la regla está procesando:
topic_modify: - echo: "Topic modify event for {{ ctx.topic("name") }}" - echo: | These fields have changed: {{ ctx.fields().map( function(field){ return field.field } ) }}"
Objetos de Contexto¶
Estos son los objetos de contexto disponibles en Clarive.
Recuerde, si no está en el contexto correcto, devolverán undefined
en lugar de un Object hash. Use ctx.has() para verificar el contexto, de lo contrario
pueden ocurrir efectos secundarios extraños.
ctx.var(varname)¶
Devuelve los valores de variables para el alcance del contexto actual y el nombre de variable de entrada.
Dependiendo del alcance, el valor de la variable (si está disponible) cambiará.
deploy: - instance_id =: "{{ ctx.var("aws_instance_id") }}" - image: docker4x/shell-aws - aws ec2 start-instances --instance-ids ${instance_id} # o en un solo paso: - aws ec2 start-instances --instance-ids {{ ctx.var("instance_id") }}
ctx.topic()¶
Este es el hash devuelto por la función ClaJS ctx.topic().
El hash tiene las siguientes claves:
| Clave | Contexto |
|---|---|
ctx.topic("mid") |
id del topic |
ctx.topic("title") |
cadena del nombre del estado |
ctx.topic("status") |
cadena del nombre del estado |
ctx.topic("category") |
cadena del nombre de categoría |
[campos dependientes de categoría] |
campos adicionales, dependiendo de la categoría |
do: | print( "Topic ID=" + ctx.topic("mid") ); print( "Topic Title=" + ctx.topic("title") ); print( "Status name=" + ctx.topic("status") ); # "To Do", "In Progress", etc. print( "Category name=" + ctx.topic("category") ); # "Bugfix", "Feature", etc.
Diríjase al documento sobre reglas de eventos para más información.
ctx.fields()¶
La función de contexto ctx.fields() devuelve una lista (array) de campos modificados en el
evento topic_modify.
Aquí hay una lista de campos disponibles:
| Clave | Tipo | Descripción |
|---|---|---|
field |
string | Nombre del campo (ej. "title", "description", etc) |
old_value |
(variable) | Valor del campo antes del cambio. El tipo depende del campo. |
new_value |
string | Valor del campo después del cambio. El tipo depende del campo. |
ctx.job()¶
Aquí hay una descripción del hash devuelto por la función ctx.job():
| Clave | Tipo | Descripción |
|---|---|---|
ctx.job("project") |
String | Proyecto actual que se está procesando, si lo hay |
ctx.job("repository") |
String | Nombre del repositorio actual que se está procesando, si lo hay |
ctx.job("change_version") |
String | Número de versión del topic Release, etc. |
ctx.job("environment") |
String | Entorno de despliegue actual (DEV, QA, PROD...) |
ctx.job("env") |
String | Igual que environment anterior |
ctx.job("items") |
Array | Lista de elementos del job |
ctx.job("name") |
String | Nombre del job (como se muestra en el Monitor) |
ctx.job("type") |
String | static, promote o demote |
ctx.job("user") |
String | Usuario que creó el job |
ctx.job("mode") |
String | forward o rollback |
ctx.job("step") |
String | paso actual del job: CHECK, INIT, PRE, RUN, POST |
ctx.job("status_from") |
String | Proyecto actual que se está procesando, si lo hay |
ctx.job("status_to") |
String | Id de versión del topic Release, etc. |
ctx.job("is_rollback") |
String | Entorno de despliegue actual (DEV, QA, |
ctx.job("failing") |
Boolean | En la regla de pipeline post:, establecido en 1 si los pasos anteriores fallaron |
ctx.request()¶
El contexto de petición web solo está disponible en eventos de llamadas de URL webhook.
| Clave | Tipo | Contenido |
|---|---|---|
ctx.request('params') |
String | Los parámetros de query-string de URL o formulario en un hash |
ctx.request('args') |
String | Array con cada uno de los componentes /path de la URL |
ctx.request('body') |
String | El cuerpo completo de la petición como una cadena |
ctx.request('headers') |
Object | Cabeceras de la petición HTTP |
ctx.request('upload') |
String | Archivos subidos |
ctx.user() |
String | El id del usuario que hizo la petición (autenticado) |
Verificar si el contexto está disponible¶
Si el contexto no está disponible, intentar usar las funciones de contexto ctx generará
un error como:
context `CONTEXT_NAME` is not available
Para verificar antes de usar una función, use la función ctx.has('context_name'),
que devuelve true o false dependiendo del contexto.
Esto es especialmente útil para ops definidos con def:. De esta manera se puede verificar si
el op está en el contexto correcto o no.
def: reset_topic_title: - if: "{{ ctx.has('topic') }}" then: - update_topic: mid: ${mid} data: title: "The new title is this now" else: - fail: "No topic available in context"
Esta es la lista de argumentos que se pueden probar con ctx.has():
topicstatuscategoryjobfieldsrequestuser