大家好!在本文中,我想再次谈谈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:
我们不是指票证,而是指插件/ 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:
我们将看到这样的屏幕:
正确!这是我的最后一句话。现在我们不会将用户作为参数传递:http:
我们得到了一个错误页面:
正确!现在,让我们传递不在Jira中的用户:http:
我们看到了一个错误页面:
同样,一切都正确!现在,我们将使用帐户创建未创建单凭单的用户:http:
我们得到了一个带有错误的页面:
一切正常!因此,我们将所有重定向逻辑带到了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.silrunerLog("Hello World");
我们有用户user1,该用户没有管理员权限。我们要由该用户调用内联脚本和文件系统上的脚本。这是“远程系统”菜单屏幕:
我们将使用“安全性”部分中的“授予执行”内联,“重读”和“授予执行”按钮。首先,尝试将内联脚本称为user1。我们将使用此SIL REST API方法调用内联脚本。http:
这里带有这个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)参数中的时间,并且脚本不会被杀死。但是使用此选项,您不能等待这一刻。只需单击“杀死”按钮: