Usa SIL al máximo

¡Hola a todos!

En este artículo, me gustaría hablar sobre SIL nuevamente . Todos sabemos que SIL tiene una gran cantidad de funciones que facilitan enormemente la automatización de nuestras acciones en Atlassian Jira y Confluence.

Escribimos guiones SIL en el elemento del menú SIL Manager y la mayoría de nosotros no prestamos atención al resto de los elementos del menú. Estoy hablando de estos elementos del menú:



en este artículo, examinaré cada elemento del menú y le diré lo que puede obtener de cada elemento.

También quiero señalar que ahora estamos hablando del motor SIL , lo que significa que todas estas características están disponibles de forma gratuita.

Uso de campo personalizado


Este menú proporciona información sobre cómo se usa cada campo personalizado en su instancia de Jira. La información del proveedor se puede encontrar aquí .
Puede ver todos los campos en su Jira si va al engranaje -> Problemas -> Campos personalizados.



Así es como se ve la pantalla si va al menú Uso de campo personalizado:



como puede ver, puede seleccionar cualquier campo personalizado y obtener información sobre él. Para filtrar los campos disponibles, simplemente comience a escribir los caracteres y la lista de campos personalizados se filtrará por estos caracteres.



Después de ver su campo, haga clic en él:



puede ver la siguiente información en este campo:

  • Alias ​​de sil
  • Pantallas y proyectos en los que se utiliza el campo.
  • Números de línea de scripts en los que se usa este campo.

En el momento de la redacción, existe el error CADS-6237 , que dice que la información sobre el uso del campo en los scripts no se muestra en la pantalla. De la manera que es. Tengo esta información porque modifiqué el código.

Redirigir configuración de página


Esta opción le permite administrar de manera inteligente la redirección a páginas en Jira. Puede encontrar información del proveedor aquí . A decir verdad, me llevó horas entender por qué se necesitaba esta opción y cómo usarla, por lo que explicaré esta opción con un ejemplo.
Aquí hay un ejemplo.

Supongamos que en nuestro Jira cada empleado ingresa cada mes en una cuenta para recibir dinero en forma de boleto en el proyecto INV.



Como puede ver, Alexey Matveev abrió dos cuentas para marzo y abril.

Pero el departamento de personal no trabaja en Jira, sino en algún sistema externo, y tienen una página en este sistema externo para cada empleado con un enlace en Jira, que conduce al ticket del empleado con la última cuenta.

¿Cómo será este enlace?

Por supuesto, podemos hacer el enlace asíhttp: // localhost: 2990 / jira / browse / INV-2 . Pero INV-2 será el último puntaje de abril. En mayo habrá un boleto con una cuenta diferente. Podríamos cambiar el enlace cada mes en la página de un empleado del departamento de recursos humanos, pero esto es demasiado complicado. Se necesita algo más simple.

Y solo Redirect Page Configuration viene en nuestra ayuda.

Vamos a configurar

En nuestro sistema de departamento de recursos humanos, el enlace se verá así:

http://localhost:2990/jira/plugins/servlet/kredi?userName=Alexey+Matveev

No nos estamos refiriendo a un ticket, sino a los complementos / servlet / kredi servlet, que redirigirán el ticket que necesitamos. Pasaremos el nombre de usuario completo como parámetro y, en función de este parámetro, nuestro servlet redirigirá al ticket deseado.
Hicimos el enlace, ahora tenemos que hacer la lógica. Y solo hacemos la lógica en el menú Redirigir configuración de página. Abra el menú e ingrese el siguiente código:

string userName = argv["userName"];

if (isNull(userName)) {
    return "/plugins/servlet/kredierror?customErrorTitle=User Not Provided&customErrorMessage=Provide user with userName parameter";
}
if (isNull(getUserByFullName(userName))) {
    return "/plugins/servlet/kredierror?customErrorTitle=User Not Found&customErrorMessage=User " + userName + " not found";
}
string [] k = selectIssues("project = INV and reporter = " + getUserByFullName(userName).username + " order by \"Invoice Date\" desc");
if (size(k) == 0) {
   return "/plugins/servlet/kredierror?customErrorTitle=Invoice Not Found&customErrorMessage=No invoices for "+ userName; 
}
return "/browse/" + k[0];

El código hace lo siguiente:

  • obtenemos el valor del parámetro userName, que contiene el nombre completo del usuario.
  • comprobamos que se pasa el parámetro, si no se pasa, redirigimos a la página de error.
  • Verificamos que el usuario con ese nombre completo haya iniciado sesión en Jira. De lo contrario, redirija a la página de error.
  • seleccione el último ticket con una cuenta para este usuario. Si no se encuentran tickets, redirigimos a la página de error.
  • Realice una redirección al ticket con el último recuento.

¡Revisa ahora!

Primero crearemos dicho enlace y haremos clic en él:

http://localhost:2990/jira/plugins/servlet/kredi?userName=Alexey+Matveev
Veremos tal pantalla: ¡

Eso es correcto! Este es mi último recuento.
Ahora no pasaremos al usuario como parámetro:

http://localhost:2990/jira/plugins/servlet/kredi

Y tenemos una página de error: ¡

Eso es correcto!
Ahora transfiramos al usuario que no está en Jira:

http://localhost:2990/jira/plugins/servlet/kredi?userName=Super+Man

Vimos una página con un error: de



nuevo, ¡todo es verdad!

Y ahora transferiremos al usuario que no creó un ticket único con una cuenta:

http://localhost:2990/jira/plugins/servlet/kredi?userName=Tomas+Brook

Y tenemos una página con un error: ¡



Todo funciona correctamente!

Por lo tanto, llevamos toda la lógica de redireccionamiento a la página correcta en Jira. Y es muy conveniente, así que en este caso escribimos toda la lógica en SIL, que es mucho más fácil que escribir la misma lógica en un sistema externo.

Cambiar de usuario


Este elemento del menú permite al administrador trabajar con cualquier usuario registrado en Jira sin conocer la contraseña de este usuario. Puede leer la información del proveedor aquí .

Esto es necesario, por ejemplo, cuando un usuario dice que Jira se está comportando incorrectamente y el administrador no puede reproducirlo. En este caso, el administrador puede iniciar sesión en Jira como este usuario y ver qué sucede.



Para encontrar rápidamente el usuario que necesita, simplemente comience a escribir los caracteres que están en el nombre de este usuario, y la lista se filtrará por estos caracteres: ¡



Seleccione el usuario deseado y haga clic en el botón Cambiar! .. Se conectará con este usuario.

Para volver a iniciar sesión con su usuario, seleccione la opción Cambiar de nuevo

a:



Configuración Sil


Este menú le permite configurar SIL. La información del proveedor se puede encontrar aquí .



SIL Home Directory le permite especificar el directorio en el que se almacenarán todos los scripts. El valor predeterminado es JIRA_HOME / silprograms.

Charset le permite determinar en qué codificación se almacenarán sus scripts. Es mejor dejar la codificación en UTF-8. Tengo una mala idea de por qué podría ser necesaria esta configuración.

El tamaño de S IL Cache le permite especificar el número de scripts cuyo código se ha convertido a código de bytes Java y se ha almacenado en el caché SIL.

¿Por qué necesitamos un caché SIL?

Aquí hay un código SIL de muestra:

string message = "My message";
runnerLog(message);

Para ejecutar este código, necesitamos traducirlo al código de bytes de Java. SIL contiene una gran cantidad de construcciones: estructuras, funciones, bucles, condiciones, asignación, etc., por lo que para traducir todo esto en código de bytes Java, necesita tiempo, y el caché SIL solo le permite ahorrar este tiempo. El código se convierte al código de bytes de Java una vez y se almacena en la memoria caché. Si este código necesita ser ejecutado nuevamente, entonces el código de bytes de Java listo se toma del caché SIL.

Por lo tanto, si tiene miles de scripts SIL, entonces tiene sentido aumentar el tamaño del caché.

Fuentes de datos


Este elemento del menú le permite configurar fuentes de datos para bases de datos y utilizar estas fuentes en su código.

Esto es conveniente porque no tiene que usar los parámetros de acceso a la base de datos y la contraseña de usuario en el código. Puede encontrar información del proveedor aquí .



Configuremos la fuente de la base de datos.

Haga clic en el botón Agregar fuente de datos e ingrese la configuración de la base de datos:



tengo otra Jira instalada en mi computadora y quiero obtener datos de la base de datos de esta Jira.
Es importante tener en cuenta que SIL no contiene controladores jdbc en su distribución. Por lo tanto, debe garantizar la disponibilidad de estos controladores en Jira usted mismo. Aquí aquí puedes leer cómo hacerlo.

Ahora haga clic en el botón Guardar y se creará la fuente de la base de datos llamada external_database:



Ahora usemos esta fuente de la base de datos en nuestro script:

string [] results = sql("external_database", "select * from cwd_group");
runnerLog(results);

Ejecuto una consulta en este script sql y obtengo el resultado:



Configuración del remitente del correo


Este elemento del menú me hizo sufrir a su debido tiempo. La información del proveedor se puede encontrar aquí .

Puede enviar correos electrónicos mediante sendEmail y en este elemento del menú puede especificar los parámetros para esta función.



El directorio Mis plantillas le permite especificar la ruta a las plantillas de correo electrónico .

Mail language on le permite especificar, según el remitente o el destinatario, el idioma de la plantilla de correo electrónico. Si usa plantillas de correo electrónico, puede crear la misma plantilla para diferentes idiomas. Puedes leer más sobre esto aquí .

Enviar correo a través dele permite especificar cómo se enviará el correo electrónico. Aquí están las opciones disponibles:

  • Remitente del contenedor: el mensaje se enviará a través de la cola de correo electrónico estándar de Jira.



Además, puede ver mensajes de error y mensajes de depuración al enviar correos electrónicos en el archivo atlassian-jira-outgoing-mail.log. Para hacer esto, aún necesita configurar el registro de envío de mensajes de correo electrónico a Jira. Puede leer más sobre cómo configurar el inicio de sesión en Jira aquí . Prefiero usar esta opción en particular.
  • Remitente directo, personalizado: puede especificar su propio servidor de correo para enviar mensajes:





En este caso, no verá mensajes de error o mensajes de depuración en el archivo atlassian-jira-outgoing-mail.log, pero verá mensajes en el archivo atlassian-jira.log.
  • Direct sender, default — , , Jira. atlassian-jira-outgoing-mail.log, atlassian-jira.log.
  • Null sender (log only) — atlassian-jira.log. . . com.keplerinfo ERROR, , . , , . , INFO com.keplerinfo. . :



2020-05-24 14:19:53,601+0300 pool-42-thread-8 INFO admin 859x6032x1 aizaws 0:0:0:0:0:0:0:1 /rest/keplerrominfo/refapp/latest/async-script/runScriptFromEditor [c.k.r.sil.impl.MailConfigurationAccessor] NULL MAILER (log only mail sender) : Subject: aa, From: null, To: [alex@gmail.com], CC: [alex@bk.ru], Body:
aa

Asynchronous Runner


Puede leer la información del proveedor aquí :

Subprocesos establece el número de subprocesos para SIL. De forma predeterminada, el número de subprocesos es 10, lo que significa que solo se ejecutarán 10 scripts a la vez. El resto se mantendrá en línea y esperará hasta que uno de los hilos esté libre. Si tiene una gran cantidad de scripts ejecutándose al mismo tiempo, aumente este parámetro.

Time To Live (TTL) establece la vida útil del hilo. El valor predeterminado es 1 hora. Esto significa que si el script se ejecuta durante más de una hora, se eliminará y los resultados del script serán solo aquellos que lograron completarse en esta hora. Si tiene scripts de larga ejecución, aumente este parámetro.

Intervalo de punto de controldetermina con qué frecuencia SIL comprobará si hay secuencias de comandos que se ejecutan más tiempo que el parámetro de tiempo TTL. Y si se encuentran tales scripts, entonces serán asesinados.

También en esta pantalla puede ver todos los scripts que se están ejecutando actualmente.

Sistemas remotos


El menú de Sistemas remotos le permite:
  • Agregue conexiones a instancias externas de Jira y ejecute scripts SIL en esas instancias.
  • Establezca permisos para ejecutar scripts SIL a través de la API SIL REST para usuarios que no son administradores de Jira.

Puede leer la información del proveedor aquí .

Primero creemos una conexión remota a Jira y ejecutemos un script SIL en él.
He planteado dos instancias de Jira: localhost: 2990 / jira y localhost: 8080.
Creé este script en localhost: 8080 y llamé a este script test.sil:

logPrint("ERROR", "I am called from " + argv[0]);

Este script toma un parámetro y muestra un mensaje con este parámetro en el registro atlassian-jira.log.
Ahora en localhost: 2990 / jira crearé una conexión remota. Iré al engranaje -> Administrar aplicaciones -> Sistemas remotos, haré clic en el botón Agregar remoto e ingresaré los datos de Jira para localhost: 8080:



Ahora hago clic en el botón Guardar y en la misma instancia de Jira (localhost: 2990 / jira) Crearé un script que llamará script con localhost: 8080:

call("my_ext_jira", "test.sil", "localhost:2990/jira")

El primer parámetro es la conexión remota que creé: my_ext_jira.
El segundo parámetro es el nombre del script que se ejecutará en el sistema remoto (localhost: 8080): test.sil.

El tercer parámetro es la cadena que se pasará a test.sil: localhost: 2990 / jira.

Ahora ejecute este script (el que está en localhost: 2990 / jira) y vea los registros en el sistema remoto (localhost: 8080). Veremos esta línea:

2020-05-25 08:30:57,944+0000 pool-38-thread-2 ERROR admin 510x101x1 3sauem 172.26.0.1 /rest/keplerrominfo/refapp/latest/async-script/runScript [c.k.s.lang.routines.LogPrintRoutine] I am called from localhost:2990/jira

Esto significa que invocamos con éxito el script SIL en el sistema remoto localhost: 8080 con localhost: 2990 / jira.

Ahora veamos la sección Seguridad en la pantalla que vemos después de seleccionar el elemento del menú Sistemas remotos.

Supongamos que tenemos dos scripts en localhost: 2990 / jira.
test.sil

call("my_ext_jira", "test.sil", "localhost:2990/jira")

test1.sil

runerLog("Hello World");

Y tenemos el usuario user1, que no tiene derechos de administrador.

Queremos llamar a los scripts en línea y los scripts que están en el sistema de archivos de este usuario.

Aquí está la pantalla del menú de Sistemas remotos:



Trabajaremos con los botones Grant ejecutar en línea, Gran lectura y Grant ejecutar desde la sección Seguridad.

Primero, intente llamar al script en línea como usuario1. Llamaremos al script en línea usando este método de API SIL REST.

http://localhost:2990/jira/rest/keplerrominfo/refapp/1.0/async-script/runScript

Aquí con este JSON:

{
   "source" : {
    "type": "INLINE",
    "code": "return 1;"
    }
}

Y obtenemos este error prohibido 403.

Ahora presione el botón Grant ejecutar en línea y otorgue una concesión al usuario1:



y obtendremos un código de respuesta 200, lo que significa que completamos el script en línea con éxito.

Ahora ejecutemos el script test1.sil en user1. Esta vez, JSON será así:

{
   "source": {
        "type": "FILE",
        "code": "test1.sil"
    }
}

Y de nuevo, obtenemos este error prohibido 403.

Ahora le damos los derechos al usuario1 para ejecutar el script test1.sil. Haga clic en el botón de ejecución Grant:



esta vez, el código de respuesta es 200. Todo funcionó .

Configuración LDAP


Puede configurar la conexión a LDAP. La información del proveedor se puede encontrar aquí .

Comienzo el servidor ldap en la ventana acoplable desde aquí .

docker run -p 389:389 -p 636:636 --name my-openldap-container --env LDAP_ADMIN_PASSWORD="adminadmin" --detach osixia/openldap:1.3.0

El servidor ldap se está ejecutando.

Ahora hagamos clic en el botón Agregar LDAP y configuremos la conexión:



solo Active Directory está disponible para el campo Directorio. Pero esto no significa que solo pueda conectarse a Microsoft Active Directory. Puede conectarse a cualquier servidor ldap. Me conecté para abrir ldap.

Ahora, seleccionemos usuarios de LDAP usando ldapUserList :

runnerLog(ldapUserList({"cn", "uid"}, "objectClass=*", "myldap"));

Y obtuvimos el resultado:



esto significa que todo funcionó para nosotros.

Almacenamiento de guiones


Este elemento del menú le permite especificar dónde almacenará los scripts SIL. Puede leer la información del proveedor aquí .

De manera predeterminada, las secuencias de comandos se almacenan en el sistema de archivos (disco de opciones):



puede elegir tener las secuencias de comandos almacenadas en la base de datos (base de datos de opciones). En este caso, los scripts se almacenarán en la tabla AO_1B54DA_TSTEXT.

En mi opinión, aún así, es mejor almacenar scripts en el sistema de archivos. En este caso, puede usar un sistema de control de versiones, por ejemplo, Bitbucket.

Mapeo de campos personalizados


En este elemento del menú puede especificar la asignación de tipos de campo personalizados a los tipos de valor SIL. Puede leer la información del proveedor aquí .



Por ejemplo, mire el campo Casillas de verificación personalizadas. El valor de este campo se asigna al tipo cadena [], lo que significa que si desea leer un valor de un campo de tipo Casillas de verificación, debe escribir este código:

string[] value =  #{My Checkbox Field};

Y para asignar un valor, aquí hay un código como este:

string[] value =  {"value1", "value2"};
#{My Checkbox Field} =  value;

No puede cambiar la asignación para este campo porque es un campo estándar. Y Cprime ya indicó la asignación correcta.

Ahora veamos el tipo de campo personalizado Cuadrícula. Obtuvimos este tipo del complemento Table Grid Next Generation. Cprime no proporciona la asignación para este campo fuera de la caja, por lo que se le asigna la asignación predeterminada. La asignación predeterminada es una cadena. Pero puede cambiar la asignación predeterminada a otra:



en algunos casos, la asignación incorporada no es suficiente y, en este caso, puede escribir una extensión en SIL con su asignación. Puede encontrar más detalles sobre cómo hacer esto aquí .

Configuración de integración


Puede crear conexiones con Slack y Stride en este elemento del menú. El vendedor tiene una instrucción muy detallada sobre cómo hacerlo aquí .

Configuración de SIL Webhooks


Puede crear su propia API REST que llamará scripts SIL. Puedes leer aquí .

Diagnóstico SIL


Este elemento del menú proporciona información completa de configuración de SIL: la



mayoría de esta información es necesaria para los desarrolladores de SIL, pero me gustaría llamar la atención sobre una característica importante en esta pantalla.

Puede eliminar los scripts SIL que se están ejecutando actualmente.

Suponga que escribió y ejecutó un script que creó un bucle sin fin. Sin esta opción, tendría que esperar hasta que el script funcionara más tiempo que el tiempo en el parámetro Time To Live (TTL) y no se eliminara. Pero con esta opción no puedes esperar este momento.

Simplemente haga clic en el botón Matar:


All Articles