最大限度地使用SIL

大家好!

在本文中,我想再次谈谈SIL众所周知,SIL具有大量功能,极大地促进了我们在Atlassian Jira和Confluence中行动的自动化。

我们在SIL Manager菜单项中编写SIL脚本,而我们大多数人并不关注其余菜单项。我在谈论这些菜单项:



在本文中,我将介绍每个菜单项,并告诉您可以从每个菜单项中获得什么。

我还想指出,我们现在正在谈论SIL引擎,这意味着您可以免费使用所有这些功能。

自定义字段用法


该菜单提供有关如何在Jira实例中使用每个自定义字段的信息。来自供应商的信息可以在这里找到
如果转到齿轮->问题->自定义字段,则可以看到Jira中的所有字段。



如果进入“自定义字段使用”菜单,则屏幕显示如下:



如您所见,您可以选择任何自定义字段并获取有关其的信息。为了过滤可用字段,只需开始输入字符,这些字符将过滤自定义字段的列表。



查看字段后,单击它:



您可以在此字段上看到以下信息:

  • Sil别名
  • 使用该字段的屏幕和项目。
  • 使用此字段的脚本的行号。

在撰写本文时,存在这样的错误CADS-6237,该错误表示屏幕上未显示有关在脚本中使用该字段的信息。事情是这样的。我有此信息,因为我修改了代码。

重定向页面配置


此选项使您可以智能地管理对Jira中页面的重定向。您可以在此处找到供应商的信息。实话实说,我花了几个小时来理解为什么需要此选项以及如何使用它,因此,我将通过一个示例来解释此选项。
这是一个例子。

假设在我们的Jira中,每个员工每个月都会在INV项目中输入一张以票证形式收款的发票。



如您所见,Alexey Matveev在3月和4月开设了两个帐户。

但是人事部门不在Jira中工作,而是在某些外部系统中工作,并且在此外部系统中每个员工都有一个页面,在Jira中具有链接,该页面会指向带有最后一个帐户的员工票证。

该链接是什么样的?

当然,我们可以像这样建立链接http://本地主机:2990 / jira /浏览/ INV-2。但是INV-2将是四月份的最后成绩。 5月将有一个使用其他帐户的票证。我们可以每月在人力资源部门一名员工的页面上更改链接,但这太复杂了。需要更简单的方法。

只是重定向页面配置对我们有帮助。

让我们进行配置。

在我们的人力资源部门系统中,链接将如下所示:

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

我们不是指票证,而是指插件/ servlet / kredi servlet,它将重定向我们需要的票证。我们将传递完整的用户名作为参数,并基于此参数,我们的servlet将重定向到所需的票证。
我们建立了链接,现在我们需要逻辑。而且,我们只需在“重定向页面配置”菜单中执行逻辑即可。打开菜单并输入以下代码:

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];

该代码执行以下操作:

  • 我们得到userName参数的值,其中包含用户的全名。
  • 我们检查参数是否已传递,如果未传递,则重定向到错误页面。
  • 我们验证具有该全名的用户已登录到Jira。如果不是,则重定向到错误页面。
  • 选择该用户的最后一个票证。如果未找到故障单,那么我们将重定向到错误页面。
  • 重定向到具有最新计数的故障单。

现在检查!

首先,我们将创建这样的链接,然后单击它:

http://localhost:2990/jira/plugins/servlet/kredi?userName=Alexey+Matveev
我们将看到这样的屏幕:

正确!这是我的最后一句话。
现在我们不会将用户作为参数传递:

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

我们得到了一个错误页面:

正确!
现在,让我们传递不在Jira中的用户:

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

我们看到了一个错误页面:



同样,一切都正确!

现在,我们将使用帐户创建未创建单凭单的用户:

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

我们得到了一个带有错误的页面:



一切正常!

因此,我们将所有重定向逻辑带到了Jira中的正确页面上。而且非常方便,因此在这种情况下,我们将所有逻辑都用SIL编写,这比在外部系统中编写相同的逻辑要容易得多。

切换用户


该菜单项允许管理员在Jira中的任何注册用户下工作,而无需知道该用户的密码。您可以在此处从供应商处阅读信息

例如,当用户说Jira行为不正确且管理员无法重现它时,这是必需的。在这种情况下,管理员可以以该用户身份登录Jira,然后查看会发生什么。



为了快速找到所需的用户,只需开始键入该用户名中的字符,列表就会被这些字符过滤:



选择所需的用户,然后单击“切换”按钮!..您将以该用户身份登录。

为了在您的用户下重新登录,请选择切回

选项



Sil配置


此菜单允许您配置SIL。来自供应商的信息可以在这里找到



SIL主目录允许您指定所有脚本将存储在的目录。默认值为JIRA_HOME / silprograms。

字符集允许您确定脚本将以哪种编码存储。最好将编码保留为UTF-8。我对为什么可能需要此设置的想法不好。

S IL高速缓存大小允许您指定其代码已转换为Java字节代码并存储在SIL高速缓存中的脚本数量。

为什么我们需要SIL缓存?

这是一个示例SIL代码:

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

为了执行此代码,我们需要将其转换为Java字节代码。SIL包含大量构造:结构,函数,循环,条件,赋值等,因此,为了将所有这些都翻译成Java字节代码,需要时间,而SIL缓存仅允许您节省时间。该代码将一次转换为Java字节代码,并存储在缓存中。如果需要再次执行此代码,则从SIL缓存中获取现成的Java字节代码。

因此,如果您有成千上万的SIL脚本,那么增加缓存的大小就很有意义。

数据源


此菜单项允许您配置数据库的数据源并在代码中使用这些源。

这很方便,因为您不必在代码中使用数据库访问参数和用户密码。您可以在此处找到供应商信息



让我们配置数据库源。

单击添加数据源按钮,然后输入数据库的设置:



我的计算机上安装了另一个Jira,我想从该Jira的数据库中获取数据。
重要的是要注意,SIL在其发行版中不包含jdbc驱动程序。因此,您必须自己确保Jira中这些驱动程序的可用性。在这里,您可以阅读操作方法。

现在单击Save按钮,将创建名为external_database的数据库源:



现在,在脚本中使用此数据库源:

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

我在此sql脚本中执行查询并获得结果:



邮件发件人配置


这个菜单项使我在适当的时候受苦。来自供应商的信息可以在这里找到

您可以使用sendEmail发送电子邮件,并在此菜单项中指定此功能的参数。



我的模板目录允许您指定电子邮件模板的路径

启用邮件语言后,您可以基于发件人或收件人指定电子邮件模板的语言。如果使用电子邮件模板,则可以为不同的语言创建相同的模板。您可以在此处了解更多信息

通过发送邮件允许您指定电子邮件的发送方式。以下是可用的选项:

  • 容器发件人-消息将通过标准的Jira电子邮件队列发送。



此外,在atlassian-jira-outgoing-mail.log文件中发送电子邮件时,您还可以看到错误消息和调试消息。为此,您仍然需要配置向Jira发送电子邮件的日志记录。您可以在此处阅读有关在Jira中配置日志记录的更多信息我更喜欢使用此特定选项。
  • 直接发件人,自定义-您可以指定自己的邮件服务器来发送消息:





在这种情况下,您不会在atlassian-jira-outgoing-mail.log文件中看到错误消息或调试消息,但是会在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


您可以在此处从供应商处读取信息

线程设置SIL的线程数。默认情况下,线程数为10,这意味着一次只能执行10个脚本。其余的将排成一列,并等待直到其中一个线程可用。如果您同时运行大量脚本,请增加此参数。生存

时间(TTL)设置线程的生存期。默认值为1小时。这意味着,如果脚本执行了一个小时以上,它将被杀死,并且脚本的结果将仅是该小时内设法完成的结果。如果您的脚本运行时间较长,请增加此参数。

检查点间隔确定SIL多久检查一次脚本运行时间是否超过TTL时间参数。如果找到了此类脚本,则它们将被杀死。

同样在此屏幕上,您可以看到当前正在运行的所有脚本。

远程系统


远程系统菜单使您能够:
  • 将连接添加到外部Jira实例,并在这些实例上运行SIL脚本。
  • 为非Jira管理员的用户设置通过SIL REST API执行SIL脚本的权限。

您可以在此处从供应商处阅读信息

首先,我们创建一个到Jira的远程连接,并在其上执行SIL脚本。
我提出了两个Jira实例:localhost:2990 / jira和localhost:8080。
我在本地主机:8080上创建了此脚本,并将其称为test.sil脚本:

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

该脚本采用一个参数,并在atlassian-jira.log日志中显示带有该参数的消息。
现在在localhost:2990 / jira上,我将创建一个远程连接。我将转到齿轮->管理应用程序->远程系统,单击添加远程按钮,然后输入localhost的Jira数据:8080:



现在,单击保存按钮按钮,然后在同一Jira实例(本地主机:2990 / jira)上,我将创建一个脚本,该脚本将调用本地主机的脚本:8080:

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

第一个参数是我创建的远程连接:my_ext_jira。
第二个参数是将在远程系统(localhost:8080)上执行的脚本的名称:test.sil。

第三个参数是将传递给test.sil的字符串:localhost:2990 / jira。

现在执行此脚本(本地主机上的脚本:2990 / jira),并查看远程系统上的日志(本地主机:8080)。我们将看到以下行:

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

这意味着我们在本地主机:2990 / jira的本地主机:8080远程系统上成功调用了SIL脚本。

现在,让我们看一下选择“远程系统”菜单项后在屏幕上看到的“安全性”部分。

假设我们在本地主机上有两个脚本:2990 / jira。
测试硅

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

测试1.sil

runerLog("Hello World");

我们有用户user1,该用户没有管理员权限。

我们要由该用户调用内联脚本和文件系统上的脚本。

这是“远程系统”菜单屏幕:



我们将使用“安全性”部分中的“授予执行”内联,“重读”和“授予执行”按钮。

首先,尝试将内联脚本称为user1。我们将使用此SIL REST API方法调用内联脚本。

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

这里带有这个JSON:

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

我们得到了403禁止错误。

现在,按“授予执行内联”按钮,向user1授予一个权限:



我们将获得200响应代码,这意味着我们已成功完成了内联脚本。

现在,让我们在user1下运行test1.sil脚本。这次,JSON将如下所示:

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

再一次,我们得到这个403 Forbidden错误。

现在,我们授予user1执行test1.sil脚本的权限。单击“授予执行”按钮:



这次,响应代码为200。一切都完成了。

LDAP配置


您可以配置与LDAP的连接。供应商信息可以在这里找到

从这里在docker中启动ldap服务器

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

ldap服务器正在运行。

现在,让我们单击“添加LDAP”按钮并配置连接:



“目录”字段仅提供Active Directory。但这并不意味着您只能连接到Microsoft Active Directory。您可以连接到任何ldap服务器。我连接到打开的ldap。

现在,让我们使用ldapUserList从LDAP中选择用户

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

而我们得到的结果是:



这意味着一切都对我们有效。

脚本存储


此菜单项使您可以指定将存储SIL脚本的位置。您可以在此处从供应商处阅读信息

默认情况下,脚本存储在文件系统(选项磁盘)中:



您可以选择将脚本存储在数据库(选项数据库)中。在这种情况下,脚本将存储在表AO_1B54DA_TSTEXT中。

我认为仍然最好将脚本存储在文件系统中。在这种情况下,您可以使用版本控制系统,例如Bitbucket。

自定义字段映射


在此菜单项中,您可以指定自定义字段类型到SIL值类型的映射。您可以在此处从供应商处阅读信息



例如,查看自定义复选框字段。该字段的值映射为字符串[],这意味着如果要从Checkboxes类型的字段中读取值,则必须编写以下代码:

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

并分配一个值,下面是这样的代码:

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

您不能更改此字段的映射,因为它是标准字段。Cprime已经表明了正确的映射。

现在,让我们看看自定义字段Grid的类型。我们是从Table Grid Next Generation插件中获得的。Cprime不提供此字段的开箱即用的映射,因此为其分配了默认映射。默认映射是字符串。但是您可以将默认映射更改为其他映射:



在某些情况下,内置映射是不够的,在这种情况下,您可以使用映射为SIL扩展。有关如何执行此操作的更多详细信息,请参见此处

整合配置


您可以在此菜单项中创建到Slack和Stride的连接。供应商在这里有一个非常详细的说明

SIL Webhooks配置


您可以创建自己的REST API,以调用SIL脚本。你可以在这里阅读

SIL诊断


该菜单项提供了全面的SIL配置信息:



大多数信息对于SIL开发人员来说都是必需的,但是我想提请注意此屏幕上的一项重要功能。

您可以杀死当前正在运行的SIL脚本。

假设您编写并运行了一个创建无限循环的脚本。如果没有此选项,则必须等到脚本的工作时间超过生存时间(TTL)参数中的时间,并且脚本不会被杀死。但是使用此选项,您不能等待这一刻。

只需单击“杀死”按钮:


All Articles