Gunakan SIL secara maksimal

Halo semuanya!

Pada artikel ini, saya ingin berbicara tentang SIL lagi . Kita semua tahu bahwa SIL memiliki sejumlah besar fungsi yang sangat memudahkan otomatisasi tindakan kami di Atlassian Jira dan Confluence.

Kami menulis skrip SIL di item menu SIL Manager dan kebanyakan dari kita tidak memperhatikan sisa item menu. Saya berbicara tentang item menu ini:



Dalam artikel ini saya akan membahas setiap item menu dan memberi tahu Anda apa yang bisa Anda dapatkan dari setiap item.

Saya juga ingin mencatat bahwa kita sekarang berbicara tentang mesin SIL , yang berarti bahwa semua fitur ini tersedia untuk Anda secara gratis.

Penggunaan bidang khusus


Menu ini memberikan informasi tentang bagaimana setiap bidang khusus digunakan dalam instance Jira Anda. Informasi dari vendor dapat ditemukan di sini .
Anda dapat melihat semua bidang di Jira Anda jika Anda pergi ke gear -> Masalah -> Bidang Kustom.



Ini adalah tampilan layar jika Anda pergi ke menu Penggunaan Bidang Kustom:



Seperti yang Anda lihat, Anda dapat memilih bidang khusus apa saja dan mendapatkan informasi tentangnya. Untuk memfilter bidang yang tersedia, cukup mulai mengetik karakter dan daftar bidang khusus akan difilter oleh karakter ini.



Setelah Anda melihat bidang Anda, klik di atasnya:



Anda dapat melihat informasi berikut di bidang ini:

  • Alias ​​Sil
  • Layar dan proyek di mana bidang ini digunakan.
  • Jumlah baris skrip di mana bidang ini digunakan.

Pada saat penulisan, ada bug seperti CADS-6237 , yang mengatakan bahwa informasi tentang penggunaan bidang dalam skrip tidak ditampilkan di layar. Seperti itu. Saya mendapatkan info ini karena saya memodifikasi kodenya.

Konfigurasi Halaman Redirect


Opsi ini memungkinkan Anda untuk mengelola pengalihan ke halaman di Jira secara cerdas. Anda dapat menemukan informasi dari vendor di sini . Sejujurnya, saya butuh waktu berjam-jam untuk memahami mengapa opsi ini diperlukan dan bagaimana menggunakannya, jadi saya akan menjelaskan opsi ini dengan sebuah contoh.
Berikut ini sebuah contoh.

Misalkan di Jira kami setiap karyawan setiap bulan memasukkan faktur untuk menerima uang dalam bentuk tiket dalam proyek INV.



Seperti yang Anda lihat, Alexey Matveev membuka dua akun untuk bulan Maret dan April.

Tetapi departemen personalia tidak bekerja di Jira, tetapi di beberapa sistem eksternal, dan mereka memiliki halaman di sistem eksternal ini untuk setiap karyawan dengan tautan di Jira, yang mengarah ke tiket karyawan dengan akun terakhir.

Akan seperti apakah tautan ini?

Tentu saja, kita dapat membuat tautan seperti inihttp: // localhost: 2990 / jira / browse / INV-2 . Tetapi INV-2 akan menjadi skor terakhir untuk bulan April. Pada bulan Mei akan ada tiket dengan akun yang berbeda. Kami dapat mengubah tautan setiap bulan di halaman karyawan departemen sumber daya manusia, tetapi ini terlalu rumit. Dibutuhkan sesuatu yang lebih sederhana.

Dan hanya Redirect Page Configuration yang membantu kami.

Mari kita konfigurasikan.

Dalam sistem departemen SDM kami, tautannya akan terlihat seperti ini:

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

Kami tidak merujuk ke tiket, tetapi ke plugin / servlet / kredi servlet, yang akan mengarahkan ulang tiket yang kami butuhkan. Kami akan melewati nama pengguna lengkap sebagai parameter, dan berdasarkan parameter ini, servlet kami akan mengarahkan ke tiket yang diinginkan.
Kami membuat tautan, sekarang kami perlu membuat logika. Dan kami hanya melakukan logika di menu Redirect Page Configuration. Buka menu dan masukkan kode berikut:

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

Kode melakukan hal berikut:

  • kami mendapatkan nilai parameter userName, yang berisi nama lengkap pengguna.
  • kami memeriksa bahwa parameter dilewatkan, jika tidak lulus, maka kami mengarahkan ulang ke halaman kesalahan.
  • kami memverifikasi bahwa pengguna dengan nama lengkap itu masuk ke Jira. Jika tidak, maka arahkan ke halaman kesalahan.
  • pilih tiket terakhir dengan akun untuk pengguna ini. Jika tidak ada tiket yang ditemukan, maka kami mengarahkan ulang ke halaman kesalahan.
  • buat redirect ke tiket dengan hitungan terakhir.

Sekarang periksa!

Pertama kita akan membuat tautan seperti itu dan mengkliknya:

http://localhost:2990/jira/plugins/servlet/kredi?userName=Alexey+Matveev
Kita akan melihat layar seperti itu:

Benar! Ini hitungan terakhir saya.
Sekarang kita tidak akan melewatkan pengguna sebagai parameter:

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

Dan kami mendapat halaman kesalahan:

Benar!
Sekarang mari kita masukkan pengguna yang tidak di Jira:

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

Kami melihat halaman dengan kesalahan:



Sekali lagi, semuanya benar!

Dan sekarang kami akan mentransfer pengguna yang tidak membuat satu tiket dengan akun:

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

Dan kami mendapat halaman dengan kesalahan:



Semuanya berfungsi dengan benar!

Jadi, kami membawa semua logika pengalihan ke halaman yang benar di Jira. Dan itu sangat nyaman, jadi dalam hal ini kita menulis semua logika dalam SIL, yang jauh lebih mudah daripada menulis logika yang sama dalam sistem eksternal.

Ganti pengguna


Item menu ini memungkinkan administrator untuk bekerja di bawah pengguna terdaftar di Jira tanpa mengetahui kata sandi pengguna ini. Anda dapat membaca informasi dari vendor di sini .

Ini diperlukan, misalnya, ketika pengguna mengatakan bahwa Jira berperilaku salah, dan administrator tidak dapat mereproduksi itu. Dalam hal ini, administrator dapat masuk ke Jira sebagai pengguna ini dan melihat apa yang terjadi.



Untuk menemukan pengguna yang Anda butuhkan dengan cepat, mulailah mengetik karakter yang ada dalam nama pengguna ini, dan daftar akan disaring oleh karakter-karakter ini:



Pilih pengguna yang diinginkan dan klik tombol Switch! .. Anda akan masuk log di bawah pengguna ini.

Untuk masuk kembali di bawah pengguna Anda, pilih opsi Beralih Kembali

Ke:



Konfigurasi sil


Dengan menu ini Anda dapat mengkonfigurasi SIL. Informasi dari vendor dapat ditemukan di sini .



SIL Home Directory memungkinkan Anda menentukan direktori tempat semua skrip akan disimpan. Standarnya adalah JIRA_HOME / silprograms.

Charset memungkinkan Anda menentukan di mana penyandian skrip Anda akan disimpan. Lebih baik meninggalkan pengkodean di UTF-8. Saya memiliki gagasan yang buruk tentang mengapa pengaturan ini mungkin diperlukan.

S IL Cache size memungkinkan Anda untuk menentukan jumlah skrip yang kodenya telah dikonversi ke kode byte Java dan disimpan dalam cache SIL.

Mengapa kita perlu cache SIL?

Berikut adalah contoh kode SIL:

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

Untuk menjalankan kode ini, kita perlu menerjemahkannya ke dalam kode byte Java. SIL berisi sejumlah besar konstruksi: struktur, fungsi, loop, kondisi, penugasan, dan sebagainya, jadi untuk menerjemahkan semua ini ke dalam kode byte Java, Anda perlu waktu, dan cache SIL hanya memungkinkan Anda untuk menghemat waktu ini. Kode dikonversi ke kode byte Java sekali dan disimpan dalam cache. Jika kode ini perlu dieksekusi lagi, maka kode byte Java yang sudah jadi diambil dari cache SIL.

Oleh karena itu, jika Anda memiliki ribuan skrip SIL, maka masuk akal untuk meningkatkan ukuran cache.

Sumber data


Item menu ini memungkinkan Anda untuk mengkonfigurasi sumber data untuk database dan menggunakan sumber-sumber ini dalam kode Anda.

Ini nyaman karena Anda tidak perlu menggunakan parameter akses basis data dan kata sandi pengguna dalam kode. Anda dapat menemukan informasi vendor di sini .



Mari kita mengkonfigurasi sumber basis data.

Klik tombol Add Datasource dan masukkan pengaturan untuk database:



Saya memiliki Jira lain yang diinstal di komputer saya dan saya ingin mendapatkan data dari database Jira ini.
Penting untuk dicatat bahwa SIL tidak mengandung driver jdbc dalam distribusinya. Karena itu, Anda harus memastikan ketersediaan driver ini di Jira sendiri. Di sini, di sini Anda dapat membaca cara melakukannya.

Sekarang klik pada tombol Simpan dan sumber database yang disebut external_database akan dibuat:



Sekarang mari kita gunakan sumber basis data ini dalam skrip kami:

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

Saya menjalankan kueri dalam skrip sql ini dan mendapatkan hasilnya:



Konfigurasi pengirim surat


Item menu ini membuat saya menderita pada waktunya. Informasi dari vendor dapat ditemukan di sini .

Anda dapat mengirim email menggunakan sendEmail dan dalam item menu ini Anda menentukan parameter untuk fungsi ini.



Direktori templat saya memungkinkan Anda menentukan jalur ke templat email .

Bahasa email aktif memungkinkan Anda menentukan, berdasarkan Pengirim atau Penerima, bahasa templat email. Jika Anda menggunakan templat email, Anda dapat membuat templat yang sama untuk berbagai bahasa. Anda dapat membaca lebih lanjut di sini .

Kirim email melaluimemungkinkan Anda menentukan bagaimana email akan dikirim. Berikut adalah opsi yang tersedia:

  • Pengirim Kontainer - pesan akan dikirim melalui antrian email standar Jira.



Selain itu, Anda dapat melihat pesan kesalahan dan men-debug pesan saat mengirim email dalam file atlassian-jira-outgoing-mail.log. Untuk melakukan ini, Anda masih perlu mengonfigurasi pencatatan pengiriman pesan email ke Jira. Anda dapat membaca lebih lanjut tentang mengkonfigurasi logging di Jira di sini . Saya lebih suka menggunakan opsi khusus ini.
  • Pengirim langsung, kustom - Anda dapat menentukan server email Anda sendiri untuk mengirim pesan:





Dalam hal ini, Anda tidak akan melihat pesan kesalahan atau pesan debug pada file atlassian-jira-outgoing-mail.log, tetapi Anda akan melihat pesan dalam file 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


Anda dapat membaca informasi dari vendor di sini :

Thread mengatur jumlah utas untuk SIL. Secara default, jumlah utas adalah 10, yang berarti bahwa hanya 10 skrip akan dieksekusi sekaligus. Sisanya akan berdiri dalam antrean dan menunggu sampai salah satu utas gratis. Jika Anda memiliki banyak skrip yang berjalan secara bersamaan, maka tingkatkan parameter ini.

Time To Live (TTL) menentukan masa pakai utas. Nilai default adalah 1 jam. Ini berarti bahwa jika skrip dieksekusi selama lebih dari satu jam, skrip tersebut akan dimatikan dan hasil skrip akan menjadi hanya skrip yang berhasil diselesaikan pada jam ini. Jika Anda memiliki skrip yang sudah berjalan lama, maka tingkatkan parameter ini.

Interval pos pemeriksaanmenentukan seberapa sering SIL akan memeriksa apakah ada skrip yang berjalan lebih lama dari parameter waktu TTL. Dan jika skrip tersebut ditemukan, maka mereka akan terbunuh.

Juga di layar ini Anda dapat melihat semua skrip yang sedang berjalan.

Sistem jarak jauh


Menu Sistem Jarak Jauh memungkinkan Anda untuk:
  • Tambahkan koneksi ke instance Jira eksternal dan jalankan skrip SIL pada instance tersebut.
  • Tetapkan izin untuk menjalankan skrip SIL melalui API SIL REST untuk pengguna yang bukan administrator Jira.

Anda dapat membaca informasi dari vendor di sini .

Pertama-tama mari kita membuat koneksi jarak jauh ke Jira dan menjalankan skrip SIL di atasnya.
Saya telah mengangkat dua contoh Jira: localhost: 2990 / jira dan localhost: 8080.
Saya membuat skrip ini di localhost: 8080 dan menyebut skrip ini test.sil:

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

Script ini mengambil parameter dan menampilkan pesan dengan parameter ini di log atlassian-jira.log.
Sekarang di localhost: 2990 / jira saya akan membuat koneksi jarak jauh. Saya akan pergi ke gear -> Kelola Aplikasi -> Sistem Jarak Jauh, klik tombol Tambah Jarak Jauh dan masukkan data Jira untuk localhost: 8080:



Sekarang saya klik tombol Simpan dan pada instance yang sama dari Jira (localhost: 2990 / jira) Saya akan membuat skrip yang akan memanggil skrip dengan localhost: 8080:

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

Parameter pertama adalah koneksi jarak jauh yang saya buat: my_ext_jira.
Parameter kedua adalah nama skrip yang akan dieksekusi pada sistem jarak jauh (localhost: 8080): test.sil.

Parameter ketiga adalah string yang akan diteruskan ke test.sil: localhost: 2990 / jira.

Sekarang jalankan skrip ini (yang ada di localhost: 2990 / jira) dan lihat log pada sistem jarak jauh (localhost: 8080). Kami akan melihat baris ini:

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

Ini berarti bahwa kami berhasil menjalankan skrip SIL di localhost: 8080 sistem jarak jauh dengan localhost: 2990 / jira.

Sekarang mari kita lihat bagian Keamanan pada layar yang kita lihat setelah memilih item menu Sistem Jarak Jauh.

Misalkan kita memiliki dua skrip di localhost: 2990 / jira.
test.sil

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

test1.sil

runerLog("Hello World");

Dan kami memiliki pengguna user1, yang tidak memiliki hak administrator.

Kami ingin memanggil skrip inline dan skrip yang ada di sistem file oleh pengguna ini.

Ini adalah layar menu Sistem Jarak Jauh:



Kami akan bekerja dengan inline eksekusi Grant, Grand read, dan tombol eksekusi Grant dari bagian Keamanan.

Pertama, coba panggil skrip inline sebagai user1. Kami akan memanggil skrip inline menggunakan metode SIL REST API ini.

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

Di sini dengan JSON ini:

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

Dan kami mendapatkan kesalahan Terlarang 403.

Sekarang tekan tombol Hibah eksekusi inline dan berikan hibah kepada pengguna1:



Dan kita akan mendapatkan 200 kode tanggapan, yang berarti bahwa kita berhasil menyelesaikan skrip inline.

Sekarang mari kita jalankan skrip test1.sil di bawah user1. Kali ini, JSON akan seperti ini:

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

Dan lagi, kita mendapatkan kesalahan Terlarang 403 ini.

Sekarang kami memberikan hak kepada pengguna1 untuk menjalankan skrip test1.sil. Klik tombol Hibah eksekusi:



Kali ini, kode responsnya adalah 200. Semuanya berhasil .

Konfigurasi LDAP


Anda dapat mengkonfigurasi koneksi ke LDAP. Informasi vendor dapat ditemukan di sini .

Saya memulai server ldap di buruh pelabuhan dari sini .

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

Server ldap sedang berjalan.

Sekarang mari kita klik tombol Add LDAP dan konfigurasikan koneksi:



Hanya Active Directory yang tersedia untuk bidang Direktori. Tetapi ini tidak berarti bahwa Anda hanya dapat terhubung ke Microsoft Active Directory. Anda dapat terhubung ke server ldap apa pun. Saya terhubung untuk membuka ldap.

Sekarang, mari kita pilih pengguna dari LDAP menggunakan ldapUserList :

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

Dan kami mendapat hasilnya:



Ini berarti semuanya berjalan baik bagi kami.

Penyimpanan skrip


Item menu ini memungkinkan Anda menentukan di mana Anda akan menyimpan skrip SIL. Anda dapat membaca informasi dari vendor di sini .

Secara default, skrip disimpan dalam sistem file (disk opsi):



Anda dapat memilih agar skrip disimpan dalam basis data (basis data opsi). Dalam hal ini, skrip akan disimpan dalam tabel AO_1B54DA_TSTEXT.

Menurut pendapat saya, tetap saja, lebih baik menyimpan skrip dalam sistem file. Dalam hal ini, Anda dapat menggunakan sistem kontrol versi, misalnya, Bitbucket.

Pemetaan bidang khusus


Di item menu ini, Anda bisa menentukan pemetaan tipe bidang khusus ke tipe nilai SIL. Anda dapat membaca informasi dari vendor di sini .



Misalnya, lihat bidang Kotak centang khusus. Nilai bidang ini dipetakan ke tipe string [], yang berarti bahwa jika Anda ingin membaca nilai dari bidang tipe Kotak Centang, Anda harus menulis kode ini:

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

Dan untuk menetapkan nilai, berikut adalah kode seperti ini:

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

Anda tidak dapat mengubah pemetaan untuk bidang ini karena ini adalah bidang standar. Dan Cprime sudah menunjukkan pemetaan yang benar.

Sekarang mari kita lihat jenis Grid bidang kustom. Kami mendapatkan jenis ini dari plugin Table Grid Next Generation. Cprime tidak menyediakan pemetaan untuk bidang ini di luar kotak, jadi ini ditugaskan pemetaan default. Pemetaan default adalah string. Tetapi Anda dapat mengubah pemetaan default ke yang lain:



Dalam beberapa kasus, pemetaan bawaan tidak cukup dan dalam hal ini Anda dapat menulis ekstensi untuk SIL dengan pemetaan Anda. Rincian lebih lanjut tentang cara melakukan ini dapat ditemukan di sini .

Konfigurasi integrasi


Anda dapat membuat koneksi ke Slack dan Stride di item menu ini. Penjual memiliki instruksi yang sangat terperinci tentang bagaimana melakukannya di sini .

Konfigurasi SIL Webhooks


Anda dapat membuat API REST Anda sendiri yang akan memanggil skrip SIL. Anda bisa baca di sini .

Diagnostik SIL


Item menu ini menyediakan informasi konfigurasi SIL komprehensif:



Sebagian besar informasi ini diperlukan untuk pengembang SIL, tetapi saya ingin menarik perhatian ke satu fitur penting pada layar ini.

Anda dapat membunuh skrip SIL yang sedang berjalan.

Misalkan Anda menulis dan menjalankan skrip yang membuat loop tanpa akhir. Tanpa opsi ini, Anda harus menunggu hingga skrip bekerja lebih lama daripada waktu di parameter Time To Live (TTL) dan tidak terbunuh. Tetapi dengan opsi ini Anda tidak bisa menunggu saat ini.

Cukup klik pada tombol Kill:


All Articles