Verwenden Sie SIL maximal

Hallo alle zusammen!

In diesem Artikel möchte ich noch einmal über SIL sprechen . Wir alle wissen, dass SIL über eine Vielzahl von Funktionen verfügt, die die Automatisierung unserer Aktionen in Atlassian Jira und Confluence erheblich erleichtern.

Wir schreiben SIL-Skripte in den Menüpunkt SIL Manager und die meisten von uns achten nicht auf den Rest der Menüpunkte. Ich spreche über diese Menüpunkte:



In diesem Artikel werde ich jeden Menüpunkt durchgehen und Ihnen sagen, was Sie von jedem Punkt bekommen können.

Ich möchte auch darauf hinweisen, dass wir jetzt über die SIL-Engine sprechen , was bedeutet, dass Ihnen all diese Funktionen kostenlos zur Verfügung stehen.

Benutzerdefinierte Feldnutzung


Dieses Menü enthält Informationen dazu, wie jedes benutzerdefinierte Feld in Ihrer Jira-Instanz verwendet wird. Informationen des Anbieters finden Sie hier .
Sie können alle Felder in Ihrem Jira sehen, wenn Sie zu Zahnrad -> Probleme -> Benutzerdefinierte Felder gehen.



So sieht der Bildschirm aus, wenn Sie zum Menü



Benutzerdefinierte Feldverwendung wechseln: Wie Sie sehen, können Sie ein beliebiges benutzerdefiniertes Feld auswählen und Informationen dazu abrufen. Um die verfügbaren Felder zu filtern, geben Sie einfach die Zeichen ein und die Liste der benutzerdefinierten Felder wird nach diesen Zeichen gefiltert.



Nachdem Sie Ihr Feld gesehen haben, klicken Sie darauf:



Sie können die folgenden Informationen zu diesem Feld sehen:

  • Sil Aliase
  • Bildschirme und Projekte, in denen das Feld verwendet wird.
  • Zeilennummern der Skripte, in denen dieses Feld verwendet wird.

Zum Zeitpunkt des Schreibens gibt es einen solchen Fehler CADS-6237 , der besagt, dass Informationen über die Verwendung des Feldes in Skripten nicht auf dem Bildschirm angezeigt werden. Wie es ist. Ich habe diese Informationen, weil ich den Code geändert habe.

Seitenkonfiguration umleiten


Mit dieser Option können Sie die Umleitung zu Seiten in Jira intelligent verwalten. Informationen des Anbieters finden Sie hier . Um ehrlich zu sein, habe ich Stunden gebraucht, um zu verstehen, warum diese Option benötigt wurde und wie man sie verwendet. Deshalb werde ich diese Option anhand eines Beispiels erläutern.
Hier ist ein Beispiel.

Angenommen, in unserer Jira gibt jeder Mitarbeiter jeden Monat eine Rechnung für den Erhalt von Geld in Form eines Tickets im INV-Projekt ein.



Wie Sie sehen können, hat Alexey Matveev zwei Konten für März und April eröffnet.

Die Personalabteilung arbeitet jedoch nicht in Jira, sondern in einem externen System. In diesem externen System gibt es für jeden Mitarbeiter eine Seite mit einem Link in Jira, der zum Ticket des Mitarbeiters mit dem letzten Konto führt.

Wie wird dieser Link aussehen?

Natürlich können wir den Link so machenhttp: // localhost: 2990 / jira / browse / INV-2 . Aber INV-2 wird das letzte Ergebnis für April sein. Im Mai wird es ein Ticket mit einem anderen Konto geben. Wir könnten den Link jeden Monat auf der Seite eines Mitarbeiters der Personalabteilung ändern, aber das ist zu kompliziert. Es wird etwas Einfacheres benötigt.

Und nur die Seitenkonfiguration umleiten hilft uns.

Lassen Sie uns konfigurieren.

In unserem HR-Abteilungssystem sieht der Link folgendermaßen aus:

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

Wir beziehen uns nicht auf ein Ticket, sondern auf das Plugin / Servlet / Kredi-Servlet, das das benötigte Ticket umleitet. Wir übergeben den vollständigen Benutzernamen als Parameter und basierend auf diesem Parameter leitet unser Servlet zum gewünschten Ticket um.
Wir haben die Verbindung hergestellt, jetzt müssen wir die Logik herstellen. Und wir machen einfach die Logik im Menü Seitenkonfiguration umleiten. Öffnen Sie das Menü und geben Sie den folgenden Code ein:

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

Der Code führt Folgendes aus:

  • Wir erhalten den Wert des Parameters userName, der den vollständigen Namen des Benutzers enthält.
  • Wir überprüfen, ob der Parameter übergeben wird. Wenn er nicht übergeben wird, leiten wir zur Fehlerseite weiter.
  • Wir überprüfen, ob der Benutzer mit diesem vollständigen Namen bei Jira angemeldet ist. Wenn nicht, leiten Sie zur Fehlerseite weiter.
  • Wählen Sie das letzte Ticket mit einem Konto für diesen Benutzer aus. Wenn keine Tickets gefunden werden, leiten wir zur Fehlerseite weiter.
  • Machen Sie eine Weiterleitung zum Ticket mit der letzten Zählung.

Überprüfe jetzt!

Zuerst erstellen wir einen solchen Link und klicken darauf:

http://localhost:2990/jira/plugins/servlet/kredi?userName=Alexey+Matveev
Wir werden einen solchen Bildschirm sehen:

Das stimmt! Dies ist meine letzte Zählung.
Jetzt werden wir den Benutzer nicht als Parameter übergeben:

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

Und wir haben eine Fehlerseite:

Richtig!
Lassen Sie uns nun einen Benutzer übergeben, der nicht in Jira ist:

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

Wir haben eine Seite mit einem Fehler gesehen:



Wieder ist alles wahr!

Und jetzt übertragen wir den Benutzer, der kein einziges Ticket mit einem Konto erstellt hat:

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

Und wir haben eine Seite mit einem Fehler:



Alles funktioniert richtig!

Daher haben wir die gesamte Umleitungslogik auf die richtige Seite in Jira gebracht. Und es ist sehr praktisch, also schreiben wir in diesem Fall die gesamte Logik in SIL, was viel einfacher ist als das Schreiben derselben Logik in einem externen System.

Benutzer wechseln


Mit diesem Menüpunkt kann der Administrator unter jedem registrierten Benutzer in Jira arbeiten, ohne das Kennwort dieses Benutzers zu kennen. Sie können die Informationen des Anbieters lesen hier .

Dies ist beispielsweise erforderlich, wenn ein Benutzer angibt, dass sich Jira falsch verhält und der Administrator es nicht reproduzieren kann. In diesem Fall kann sich der Administrator als dieser Benutzer bei Jira anmelden und sehen, was passiert.



Um



den gewünschten Benutzer schnell zu finden, geben Sie einfach die Zeichen ein, die im Namen dieses Benutzers enthalten sind, und die Liste wird nach diesen Zeichen gefiltert: Wählen Sie den gewünschten Benutzer aus und klicken Sie auf die Schaltfläche Wechseln! .. Sie werden unter diesem Benutzer angemeldet.

Um sich unter Ihrem Benutzer wieder anzumelden, wählen Sie die Option Zurück wechseln zu

:



Sil Konfiguration


In diesem Menü können Sie SIL konfigurieren. Informationen des Anbieters finden Sie hier .



Mit SIL Home Directory können Sie das Verzeichnis angeben, in dem alle Skripte gespeichert werden. Der Standardwert ist JIRA_HOME / silprograms.

Mit Charset können Sie festlegen, in welcher Codierung Ihre Skripte gespeichert werden. Es ist besser, die Codierung in UTF-8 zu belassen. Ich habe eine schlechte Vorstellung davon, warum diese Einstellung erforderlich sein könnte.

Mit der S IL-Cache-Größe können Sie die Anzahl der Skripts angeben, deren Code in Java-Bytecode konvertiert und im SIL-Cache gespeichert wurde.

Warum brauchen wir einen SIL-Cache?

Hier ist ein Beispiel für einen SIL-Code:

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

Um diesen Code auszuführen, müssen wir ihn in Java-Bytecode übersetzen. SIL enthält eine große Anzahl von Konstruktionen: Strukturen, Funktionen, Schleifen, Bedingungen, Zuweisungen usw. Um all dies in Java-Bytecode zu übersetzen, benötigen Sie Zeit, und im SIL-Cache können Sie nur diese Zeit sparen. Der Code wird einmal in Java-Bytecode konvertiert und im Cache gespeichert. Wenn dieser Code erneut ausgeführt werden muss, wird der vorgefertigte Java-Bytecode aus dem SIL-Cache entnommen.

Wenn Sie über Tausende von SIL-Skripten verfügen, ist es daher sinnvoll, den Cache zu vergrößern.

Datenquellen


Mit diesem Menüpunkt können Sie Datenquellen für Datenbanken konfigurieren und diese Quellen in Ihrem Code verwenden.

Dies ist praktisch, da Sie die Datenbankzugriffsparameter und das Benutzerkennwort nicht im Code verwenden müssen. Herstellerinformationen finden Sie hier .



Lassen Sie uns die Datenbankquelle konfigurieren.

Klicken Sie auf die Schaltfläche Datenquelle hinzufügen und geben Sie die Einstellungen für die Datenbank ein:



Ich habe einen anderen Jira auf meinem Computer installiert und möchte Daten aus der Datenbank dieses Jira abrufen.
Es ist wichtig zu beachten, dass SIL keine JDBC-Treiber in seiner Distribution enthält. Daher müssen Sie die Verfügbarkeit dieser Treiber in Jira selbst sicherstellen. Hier hier können Sie lesen, wie es geht.

Klicken Sie nun auf die Schaltfläche Speichern und die Datenbankquelle mit dem Namen external_database wird erstellt:



Verwenden Sie nun diese Datenbankquelle in unserem Skript:

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

Ich führe eine Abfrage in diesem SQL-Skript aus und erhalte das Ergebnis:



Konfiguration des E-Mail-Absenders


Dieser Menüpunkt hat mich rechtzeitig leiden lassen. Informationen des Anbieters finden Sie hier .

Sie können E-Mails mit sendEmail senden und in diesem Menüpunkt die Parameter für diese Funktion angeben.



In meinem Vorlagenverzeichnis können Sie den Pfad zu E-Mail-Vorlagen angeben .

Mit der E- Mail-Sprache können Sie basierend auf dem Absender oder Empfänger die Sprache der E-Mail-Vorlage angeben. Wenn Sie E-Mail-Vorlagen verwenden, können Sie dieselbe Vorlage für verschiedene Sprachen erstellen. Sie können mehr darüber lesen Sie hier .

Mail senden überHier können Sie festlegen, wie die E-Mail gesendet werden soll. Hier sind die verfügbaren Optionen:

  • Container-Absender - Die Nachricht wird über die Standard-Jira-E-Mail-Warteschlange gesendet.



Außerdem können beim Senden von E-Mails in der Datei atlassian-jira-outgoing-mail.log Fehlermeldungen und Debug-Meldungen angezeigt werden. Dazu müssen Sie noch die Protokollierung für das Senden von E-Mail-Nachrichten an Jira konfigurieren. Weitere Informationen zum Konfigurieren der Protokollierung in Jira finden Sie hier . Ich bevorzuge diese spezielle Option.
  • Direkter Absender, benutzerdefiniert - Sie können Ihren eigenen Mailserver zum Senden von Nachrichten angeben:





In diesem Fall werden in der Datei atlassian-jira-outgoing-mail.log keine Fehlermeldungen oder Debugging-Meldungen angezeigt, in der Datei atlassian-jira.log jedoch Meldungen.
  • 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


Die Informationen des Anbieters können Sie hier lesen :

Threads legt die Anzahl der Threads für SIL fest. Standardmäßig beträgt die Anzahl der Threads 10, was bedeutet, dass jeweils nur 10 Skripte ausgeführt werden. Der Rest steht in der Schlange und wartet, bis einer der Threads frei ist. Wenn Sie eine große Anzahl von Skripten gleichzeitig ausführen, erhöhen Sie diesen Parameter.

Time To Live (TTL) legt die Lebensdauer des Threads fest. Der Standardwert ist 1 Stunde. Dies bedeutet, dass wenn das Skript länger als eine Stunde ausgeführt wird, es beendet wird und die Ergebnisse des Skripts nur diejenigen sind, die in dieser Stunde abgeschlossen wurden. Wenn Sie über Skripte mit langer Laufzeit verfügen, erhöhen Sie diesen Parameter.

Prüfpunktintervalllegt fest, wie oft SIL prüft, ob Skripte vorhanden sind, die länger als der TTL-Zeitparameter ausgeführt werden. Und wenn solche Skripte gefunden werden, werden sie getötet.

Auf diesem Bildschirm sehen Sie auch alle Skripte, die derzeit ausgeführt werden.

Remote-Systeme


Im Menü Remote-Systeme können Sie:
  • Fügen Sie Verbindungen zu externen Jira-Instanzen hinzu und führen Sie SIL-Skripte auf diesen Instanzen aus.
  • Legen Sie Berechtigungen zum Ausführen von SIL-Skripten über die SIL-REST-API für Benutzer fest, die keine Jira-Administratoren sind.

Sie können die Informationen des Anbieters lesen hier .

Lassen Sie uns zuerst eine Remoteverbindung zu Jira herstellen und ein SIL-Skript darauf ausführen.
Ich habe zwei Instanzen von Jira angesprochen: localhost: 2990 / jira und localhost: 8080.
Ich habe dieses Skript auf localhost: 8080 erstellt und dieses Skript test.sil aufgerufen:

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

Dieses Skript verwendet einen Parameter und zeigt eine Nachricht mit diesem Parameter im Protokoll atlassian-jira.log an.
Jetzt auf localhost: 2990 / jira werde ich eine Remote-Verbindung herstellen. Ich gehe zum Zahnrad -> Apps verwalten -> Remote-Systeme, klicke auf die Schaltfläche Remote hinzufügen und gebe die Jira-Daten für localhost ein: 8080:



Jetzt klicke ich auf die Schaltfläche Speichern und auf dieselbe Instanz von Jira (localhost: 2990 / jira) erstelle ich ein Skript, das aufgerufen wird Skript mit localhost: 8080:

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

Der erste Parameter ist die von mir erstellte Remoteverbindung: my_ext_jira.
Der zweite Parameter ist der Name des Skripts, das auf dem Remote-System ausgeführt wird (localhost: 8080): test.sil.

Der dritte Parameter ist die Zeichenfolge, die an test.sil: localhost: 2990 / jira übergeben wird.

Führen Sie nun dieses Skript aus (das auf localhost: 2990 / jira) und sehen Sie sich die Protokolle auf dem Remote-System an (localhost: 8080). Wir werden diese Zeile sehen:

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

Dies bedeutet, dass wir das SIL-Skript auf dem Remote-System localhost: 8080 mit localhost: 2990 / jira erfolgreich aufgerufen haben.

Schauen wir uns nun den Abschnitt Sicherheit auf dem Bildschirm an, den wir nach Auswahl des Menüelements Remote Systems sehen.

Angenommen, wir haben zwei Skripte auf localhost: 2990 / jira.
test.sil

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

test1.sil

runerLog("Hello World");

Und wir haben den Benutzer user1, der keine Administratorrechte hat.

Wir möchten Inline-Skripte und Skripte aufrufen, die sich von diesem Benutzer im Dateisystem befinden.

Hier ist der Menübildschirm von Remote Systems:



Wir arbeiten mit den Schaltflächen Grant Execute Inline, Grand Read und Grant Execute im Abschnitt Security.

Versuchen Sie zunächst, das Inline-Skript als Benutzer1 aufzurufen. Wir werden das Inline-Skript mit dieser SIL REST-API-Methode aufrufen.

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

Hier mit diesem JSON:

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

Und wir bekommen so einen 403 Forbidden Fehler.

Klicken Sie nun auf die Schaltfläche Grant Inline ausführen und geben Sie Benutzer1 einen Grant:



Und wir erhalten einen 200-Antwortcode, was bedeutet, dass wir das Inline-Skript erfolgreich abgeschlossen haben.

Führen Sie nun das Skript test1.sil unter user1 aus. Dieses Mal wird JSON so aussehen:

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

Und wieder erhalten wir diesen 403 Forbidden-Fehler.

Jetzt erteilen wir user1 die Rechte, das Skript test1.sil auszuführen. Klicken Sie auf die Schaltfläche Grant Execute:



Diesmal lautet der Antwortcode 200. Alles hat geklappt.

LDAP-Konfiguration


Sie können die Verbindung zu LDAP konfigurieren. Herstellerinformationen finden Sie hier .

Ich starte den LDAP-Server im Docker von hier aus .

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

Der LDAP-Server wird ausgeführt.

Klicken Sie nun auf die Schaltfläche LDAP hinzufügen und konfigurieren Sie die Verbindung:



Für das Feld Verzeichnis ist nur Active Directory verfügbar. Dies bedeutet jedoch nicht, dass Sie nur eine Verbindung zu Microsoft Active Directory herstellen können. Sie können eine Verbindung zu jedem LDAP-Server herstellen. Ich habe mich mit open ldap verbunden. Wählen

wir nun Benutzer aus LDAP mit ldapUserList aus :

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

Und wir haben das Ergebnis:



Das bedeutet, dass alles für uns geklappt hat.

Skriptspeicherung


In diesem Menüpunkt können Sie angeben, wo Sie SIL-Skripte speichern möchten. Sie können die Informationen des Anbieters lesen hier .

Standardmäßig werden Skripte im Dateisystem (Optionsdiskette) gespeichert:



Sie können festlegen, dass Skripte in der Datenbank (Optionsdatenbank) gespeichert werden. In diesem Fall werden die Skripte in der Tabelle AO_1B54DA_TSTEXT gespeichert.

Meiner Meinung nach ist es dennoch besser, Skripte im Dateisystem zu speichern. In diesem Fall können Sie ein Versionskontrollsystem verwenden, z. B. Bitbucket.

Benutzerdefinierte Feldzuordnung


In diesem Menüpunkt können Sie die Zuordnung von benutzerdefinierten Feldtypen zu SIL-Werttypen festlegen. Sie können die Informationen des Anbieters lesen hier .



Sehen Sie sich beispielsweise das Feld Benutzerdefinierte Kontrollkästchen an. Der Wert dieses Felds wird dem Typ string [] zugeordnet. Wenn Sie also einen Wert aus einem Feld vom Typ Checkboxes lesen möchten, müssen Sie diesen Code schreiben:

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

Und um einen Wert zuzuweisen, ist hier ein Code wie folgt:

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

Sie können die Zuordnung für dieses Feld nicht ändern, da es sich um ein Standardfeld handelt. Und Cprime hat bereits die richtige Zuordnung angegeben.

Schauen wir uns nun den Typ des benutzerdefinierten Feldgitters an. Wir haben diesen Typ vom Table Grid Next Generation Plugin erhalten. Cprime bietet keine Standardzuordnung für dieses Feld, daher wird ihm die Standardzuordnung zugewiesen. Die Standardzuordnung ist Zeichenfolge. Sie können die Standardzuordnung jedoch in eine andere ändern:



In einigen Fällen reicht die integrierte Zuordnung nicht aus, und in diesem Fall können Sie mit Ihrer Zuordnung eine Erweiterung in SIL schreiben. Weitere Details dazu finden Sie hier .

Integrationskonfiguration


In diesem Menüpunkt können Sie Verbindungen zu Slack and Stride herstellen. Der Verkäufer hat eine sehr detaillierte Anleitung, wie es zu tun hier .

SIL Webhooks-Konfiguration


Sie können Ihre eigene REST-API erstellen, die SIL-Skripte aufruft. Sie können hier lesen .

SIL-Diagnose


Dieser Menüpunkt enthält umfassende Informationen zur SIL-Konfiguration:



Die meisten dieser Informationen sind für SIL-Entwickler erforderlich, ich möchte jedoch auf eine wichtige Funktion auf diesem Bildschirm aufmerksam machen.

Sie können SIL-Skripte beenden, die gerade ausgeführt werden.

Angenommen, Sie haben ein Skript geschrieben und ausgeführt, das eine Endlosschleife erstellt hat. Ohne diese Option müssten Sie warten, bis das Skript länger als die Zeit im TTL-Parameter (Time To Live) funktioniert und nicht beendet wurde. Aber mit dieser Option können Sie nicht auf diesen Moment warten.

Klicken Sie einfach auf die Schaltfläche Töten:


All Articles