硬盤做網(wǎng)站空間漢中seo培訓(xùn)
近日,龍智舉辦的DevSecOps研討會(huì)年終專場(chǎng)“趨勢(shì)展望與實(shí)戰(zhàn)探討:如何打好DevOps基礎(chǔ)、賦能創(chuàng)新”在上海圓滿落幕。龍智Atlassian技術(shù)與顧問咨詢團(tuán)隊(duì),以及清暉、JamaSoftware、CloudBees等生態(tài)伙伴的嘉賓發(fā)表了主題演講,分享他們?cè)贒evOps領(lǐng)域的豐富經(jīng)驗(yàn)與獨(dú)到見解,并圍繞Atlassian最新產(chǎn)品趨勢(shì)與Jira、Confluence等工具的最佳實(shí)踐,展開了深入探討。
本篇文章回顧龍智技術(shù)總監(jiān)李毅的演講,聚焦于Jira的實(shí)用插件ScriptRunner,分享如何使用ScriptRunner拓展Jira的功能、ScriptRunner的重要功能模塊以及最佳實(shí)踐。
演講回顧
如何在Jira中進(jìn)行團(tuán)隊(duì)成本與時(shí)間管理
大家好,我今天將分享如何使用ScriptRunner擴(kuò)展Jira的功能,內(nèi)容主要分為四個(gè)部分。
首先,我將介紹ScriptRunner是什么樣的產(chǎn)品,讓大家對(duì)其有一個(gè)整體的認(rèn)識(shí)。
第二部分,我將詳細(xì)講解ScriptRunner中各個(gè)功能模塊的作用,以便在為業(yè)務(wù)方提供解決方案時(shí)能夠有所參考,知道應(yīng)該使用ScriptRunner中的哪個(gè)模塊來實(shí)現(xiàn)目標(biāo)。
第三部分是實(shí)踐經(jīng)驗(yàn)總結(jié)。我會(huì)分享在實(shí)踐和為客戶提供解決方案過程中積累的一些經(jīng)驗(yàn),推薦一些實(shí)用做法,并提供注意事項(xiàng),以便大家應(yīng)用ScriptRunner時(shí)能夠輕松上手。
最后,我將總結(jié)一些在Jira中通用且重要的模塊,以及在為客戶提供服務(wù)時(shí)經(jīng)常出現(xiàn)的使用場(chǎng)景。
ScriptRunner——針對(duì)Jira自動(dòng)化、定制功能及擴(kuò)展的解決方案
首先,我們來快速了解一下ScriptRunner是怎樣的產(chǎn)品。ScriptRunner主要利用Groovy腳本的強(qiáng)大功能,實(shí)現(xiàn)了Jira Software和Jira Service Desk本身無(wú)法實(shí)現(xiàn)的功能;以及從自動(dòng)化,批量操作,構(gòu)建自定義工作流,到第三方系統(tǒng)集成,ScriptRunner賦予Jira管理員超強(qiáng)的擴(kuò)展能力。
它的主要優(yōu)勢(shì)是一體化、功能強(qiáng)大以及降本增效。作為一個(gè)產(chǎn)品,它包含了多個(gè)功能模塊,幾乎涵蓋了用戶可能需要的所有功能。相比購(gòu)買多個(gè)插件,我們推薦首選ScriptRunner,因?yàn)樗墓δ茇S富且實(shí)用。其次,它的功能強(qiáng)大,特別適用于構(gòu)建復(fù)雜的自動(dòng)化工作流,以減少人工成本。此外,它還能幫助團(tuán)隊(duì)實(shí)現(xiàn)降本增效,能夠通過簡(jiǎn)單的腳本來支持業(yè)務(wù)需求,而無(wú)需進(jìn)行定制化插件開發(fā)。
ScriptRunner的主要特點(diǎn)包括自動(dòng)化、高度定制化、可擴(kuò)展以及提升用戶體驗(yàn)。它不僅能夠滿足各種自動(dòng)化需求,還能夠根據(jù)不同行業(yè)的特殊要求進(jìn)行高度定制,以滿足業(yè)務(wù)場(chǎng)景的需求。同時(shí),它的拓展性也非常好,能夠輕松實(shí)現(xiàn)與Atlassian體系中的其他工具的集成,也可以通過RestAPI的方式與其他異構(gòu)系統(tǒng)進(jìn)行數(shù)據(jù)交互。無(wú)論是Jira管理人員還是日常使用Jira的用戶,都能夠充分體驗(yàn)到其強(qiáng)大的功能。
ScriptRunner功能模塊
讓我們一起瀏覽ScriptRunner的各個(gè)功能模塊,了解它們的主要用途。
1、控制臺(tái)——Script Console。控制臺(tái)主要用于編寫試驗(yàn)性的腳本或進(jìn)行一次性功能驗(yàn)證。用戶可以在此處執(zhí)行定期清理用戶、查詢Issue數(shù)據(jù)、項(xiàng)目數(shù)據(jù)等任務(wù),并查看結(jié)果。此外,用戶還可以在控制臺(tái)學(xué)習(xí)和測(cè)試Jira REST API和HAPI,非常方便。
2、Built-In Scripts,該模塊集成了許多內(nèi)置的通用性腳本,提供了許多實(shí)用功能,例如批量操作用戶、批量操作Issue、查看日志、切換日志等。對(duì)于不太熟悉Groovy腳本編寫的用戶,建議先查看內(nèi)置腳本,看是否已經(jīng)滿足需求。
3、Listeners,顧名思義,它用于監(jiān)聽Jira中發(fā)生的事件,并在捕捉到事件后執(zhí)行特定的腳本處理。
4、Jobs允許您定期自動(dòng)的運(yùn)行腳本,從而節(jié)省管理員的時(shí)間,并降低人工執(zhí)行的風(fēng)險(xiǎn)。
5、Script Fields就是所謂的腳本字段,它使用Groovy腳本計(jì)算或合并來自一個(gè)或多個(gè)現(xiàn)有字段的數(shù)據(jù),并將它們展示在自定義字段中。通常用來展示擴(kuò)展的Issue信息。
6、Behaviours行為模塊,是Script Fields的特有模塊,也是最重要的模塊之一。它用于控制Issue界面上字段的行為,使得用戶可以根據(jù)需要定制化業(yè)務(wù)場(chǎng)景和流程。
7、Workflows也是常用模塊之一,主要通過Script Conditions、Script Validators和Script Post Functions來增強(qiáng)和自動(dòng)化工作流程。
8、Script Fragments主要與定制化UI相關(guān),可以添加按鈕、Web圖標(biāo)等。
9、JQL Functions擴(kuò)展了Jira的內(nèi)置功能,允許您進(jìn)行更精細(xì)的搜索操作,以快速獲取項(xiàng)目/問題的更詳細(xì)信息。
10、REST Endpoints模塊主要利用Groovy腳本迅速定義REST Endpoints,并可以與企業(yè)內(nèi)部協(xié)同使用的工具集成并交互數(shù)據(jù),例如從HR系統(tǒng)拉取用戶數(shù)據(jù)或從其他需求管理平臺(tái)獲取項(xiàng)目的任務(wù)開發(fā)進(jìn)度等。
11、Resources模塊可建立本地或外部數(shù)據(jù)庫(kù)的鏈接,以及Ldap用戶管理的鏈接。一旦建立了連接,在其他場(chǎng)景編寫腳本時(shí)都可以直接使用,通過內(nèi)置的BaseUtil和LdapUtil工具類,可以輕松獲取所需的數(shù)據(jù)。
12、最后是Mail Handler模塊,雖然使用頻率不高,但在用戶接收郵件時(shí)執(zhí)行指定操作時(shí)非常有用。
ScriptRunner最佳實(shí)踐
動(dòng)態(tài)表單
在實(shí)際為客戶提供解決方案時(shí),我們總結(jié)了一些使用ScriptRunner的好方法和注意事項(xiàng)。
我想推薦大家嘗試使用Dynamic Forms(動(dòng)態(tài)表單)功能。動(dòng)態(tài)表單允許創(chuàng)建的腳本帶有一些需要用戶動(dòng)態(tài)輸入的參數(shù),從而增強(qiáng)了腳本的通用性。Dynamic Forms可以保存腳本,并且?guī)в凶⑨?#xff0c;即使對(duì)代碼不太了解的用戶也可以理解腳本的用途,提高了易用性。你可以編寫一個(gè)通用型的腳本,在多個(gè)地方都能派上用場(chǎng),因此我強(qiáng)烈推薦大家使用動(dòng)態(tài)表單功能。
我編寫了一個(gè)簡(jiǎn)單的示例,以便大家了解這個(gè)概念。這個(gè)示例包含一個(gè)帶有"注釋"的變量,稱為"user Picker"。它可以通過這種方式將變量綁定到用戶上,當(dāng)用戶使用這個(gè)腳本時(shí),就可以動(dòng)態(tài)輸入用戶變量。這個(gè)腳本的實(shí)際功能非常簡(jiǎn)單,它通過JQL查詢“經(jīng)辦人等于輸入的用戶變量”的所有Issue并進(jìn)行批量操作。這樣的腳本具有通用性,每個(gè)人都可以動(dòng)態(tài)輸入想要的用戶變量參數(shù)。
這只是其中一個(gè)示例。實(shí)際上,動(dòng)態(tài)表單可以支持Jira中絕大多數(shù)的字段類型,包括Issue、Group、Project等,甚至各種工作流方案和權(quán)限方案。你可以選擇并基于它編寫通用性的腳本。
HAPI
我也強(qiáng)烈推薦大家使用HAPI。HAPI是ScriptRunner擴(kuò)展出的便捷API,它實(shí)際上是基于Jira腳本的,但做了一層緊湊的封裝,進(jìn)一步降低了用戶的使用門檻。使用HAPI不需要對(duì)Jira過于熟悉。
通常情況下,按照J(rèn)avaAPI的方式編寫腳本會(huì)比較繁瑣。但是,直接使用HAPI會(huì)更為簡(jiǎn)潔。
接下來我會(huì)舉幾個(gè)例子,大家可以體會(huì)一下。使用HAPI相對(duì)來說門檻非常低,而且編輯器中針對(duì)HAPI提供了很多代碼提示功能。只要按照提示編寫,基本上都會(huì)有相應(yīng)的建議。這降低了很多用戶的使用門檻,因此我也非常推薦大家在編寫腳本時(shí)盡量使用HAPI。
簡(jiǎn)單舉幾個(gè)例子。首先是創(chuàng)建Issue,非常簡(jiǎn)單,只需一句話。你可以在Console中執(zhí)行一下代碼,它會(huì)在“ABC”項(xiàng)目下創(chuàng)建一個(gè)類型為“Task”的Issue,其摘要為“my first HAPI”。相比使用Java API來編寫,這種方式更加簡(jiǎn)單。
接下來是批量搜索Issue的寫法,同樣也非常簡(jiǎn)單。直接使用JQL語(yǔ)句,甚至可以通過filter進(jìn)行過濾。我們可以限制返回的條數(shù)。
以下是關(guān)于用戶的一些例子??梢钥吹?#xff0c;創(chuàng)建用戶也非常簡(jiǎn)單,只需使用users.即可,后面的信息就是用戶名、郵箱和全名。通過Users.getByName就能獲取到相應(yīng)的用戶信息。users.的使用非常廣泛,它提供了許多提示,內(nèi)置了許多實(shí)用的函數(shù)。而projects.則提供了與項(xiàng)目相關(guān)的功能提示。
因此,我非常推薦大家嘗試使用HAPI來編寫代碼,便捷高效。
以下是關(guān)于幾個(gè)泛用性高的模塊的推薦用法以及使用過程中需要注意的事項(xiàng)。
首先是特色功能——Behaviours。Behaviours通常用于用戶界面,包括新增、編輯、轉(zhuǎn)換界面等。它也可用于JSM的portal端。如果您正在使用JSM產(chǎn)品,并且需要在portal端定制字段的行為,也可以考慮使用它。
Behaviours通常用于字段的必填校驗(yàn),只讀控制,顯示/隱藏控制,以及字段的選項(xiàng)動(dòng)態(tài)變動(dòng),字段聯(lián)動(dòng)等。在使用過程中,要避免多個(gè)Behaviours腳本同時(shí)控制同一個(gè)字段的情況。需要做好控制范圍,確保字段不會(huì)受到多個(gè)腳本的影響。此外,Behaviours不適用于批量操作,也不支持移動(dòng)Issue界面。
它還支持項(xiàng)目類別的映射。通常情況下,腳本的控制范圍是通過項(xiàng)目和問題類型映射來實(shí)現(xiàn)的。如果我們利用ChangeEvent事件,并在此事件中使用MappingService進(jìn)行映射。那么我們就可以實(shí)現(xiàn)腳本對(duì)項(xiàng)目類別的范圍控制了。
最后,Behaviours不支持插件擴(kuò)展的自定義字段,但可以通過Vendors API進(jìn)行兼容。Vendors指的是Marketplace上的供應(yīng)商,他們通常會(huì)提供免費(fèi)的API。因此,如果您希望擴(kuò)展出的自定義字段也受到Behaviours的控制,可以考慮集成該API進(jìn)行擴(kuò)展。
最后,讓我們來談?wù)凷cript Fields。Script Fields主要用于只讀字段,它也集成了許多內(nèi)置的腳本字段,可以滿足大部分業(yè)務(wù)場(chǎng)景的需求。
例如,“No. of Times In Status”(狀態(tài)次數(shù)),這個(gè)字段可以統(tǒng)計(jì)Issue進(jìn)入指定狀態(tài)的次數(shù)。在實(shí)際應(yīng)用中,這個(gè)功能可以在很多地方發(fā)揮作用,比如一個(gè)工作流中反復(fù)進(jìn)入某個(gè)狀態(tài),我們可能需要統(tǒng)計(jì)這個(gè)狀態(tài)的次數(shù)。例如,在測(cè)試中,如果一個(gè)bug被反復(fù)打開,可能就存在問題,我們可以利用這個(gè)腳本字段來統(tǒng)計(jì)這種情況。這些指標(biāo)可以幫助我們后續(xù)進(jìn)行跟蹤和分析。
另外一個(gè)常見的自定義場(chǎng)景是業(yè)務(wù)方有自己特殊的業(yè)務(wù)邏輯。典型的例子包括問題嚴(yán)重度字段的實(shí)時(shí)計(jì)算,這需要根據(jù)其他字段的值通過一定的業(yè)務(wù)規(guī)則計(jì)算后得出;或者是Issue的評(píng)分,通常也是依賴于其他字段并進(jìn)行業(yè)務(wù)規(guī)則計(jì)算得出的。Script Fields通常在這些自定義場(chǎng)景中使用。
ScriptRunner客戶案例
接下來,我將分享一些重要模塊的具體實(shí)際案例,供大家參考。當(dāng)大家在工作中遇到類似的場(chǎng)景時(shí),可以考慮通過這些方式去實(shí)現(xiàn)。
Behaviours
首先是Behaviours,它主要的適用場(chǎng)景是在創(chuàng)建、編輯和轉(zhuǎn)換界面中增加字段的行為邏輯(業(yè)務(wù)規(guī)則),相當(dāng)于定制化業(yè)務(wù)規(guī)則。
-
當(dāng)字段A選擇某選項(xiàng)時(shí),字段B顯示并且必填;
-
字段A和字段B有聯(lián)動(dòng)效果,如:字段A選擇了 "上海",字段B的選項(xiàng)值變?yōu)?"徐匯區(qū)","普陀區(qū)";
-
校驗(yàn)字段A的日期和字段B的日期間隔不能超過60天;
-
校驗(yàn)字段A的日期不能早于字段B ;
-
限制字段A的編輯權(quán)限,只有用戶組a中的用戶才可以編輯,其他用戶都是只讀;
-
限制某些問題類型的創(chuàng)建;
-
當(dāng)issuePicker字段A選擇一條Issue后,自動(dòng)將字段B的值變更為該Issue中某個(gè)字段的值;
Custom Listener
然后是Custom Listener模塊,也是非常重要的。它適用于在發(fā)生特定事件時(shí)需要執(zhí)行相應(yīng)的處理邏輯的場(chǎng)景。
-
IssueA和IssueB有鏈接關(guān)系,當(dāng)IssueA字段更新時(shí),將對(duì)應(yīng)的字段值同步到IssueB;
-
當(dāng)Issue中的模塊發(fā)生變化時(shí),將Issue的經(jīng)辦人修改為該模塊的負(fù)責(zé)人;
-
IssueA和IssueB有鏈接關(guān)系,當(dāng)IssueA狀態(tài)變化時(shí),將狀態(tài)同步到IssueB;
-
當(dāng)Issue經(jīng)辦人變更時(shí),給自定義字段賦值;
-
當(dāng)IssueA字段更新時(shí),同時(shí)更新動(dòng)態(tài)表單IssuePicker選擇的Issue中相關(guān)字段值;
-
當(dāng)Issue中的字段、狀態(tài)發(fā)生變化時(shí),產(chǎn)生郵件通知或添加評(píng)論。
Workflows
Workflows也是一個(gè)被廣泛使用的模塊。它的適用場(chǎng)景是定制化專屬的工作流以及自動(dòng)化業(yè)務(wù)流程。我們分別從condition、validator和post-function來討論幾個(gè)典型的業(yè)務(wù)場(chǎng)景。
Custom script condition:
-
“問題等級(jí)”字段為S級(jí)時(shí),需要負(fù)責(zé)人審批,其他問題等級(jí)則不需要;
根據(jù)“問題嚴(yán)重度”字段值的不同,執(zhí)行不同的工作流。
Custom script validator:
-
若“項(xiàng)目負(fù)責(zé)人”字段為空時(shí),Issue 必須停留在原狀態(tài),工作流往下流轉(zhuǎn)時(shí)需要給出錯(cuò)誤提示。
Custom script post-function:
-
Issue 創(chuàng)建成功后,自動(dòng)將經(jīng)辦人設(shè)置為經(jīng)辦人的主管,并且發(fā)郵件通知;
-
Issue 最終完成時(shí),自動(dòng)給“最終完成時(shí)間”字段賦值。
Script Field
最后再談一下腳本字段,它的適用場(chǎng)景是字段只讀并且字段值依賴其他字段自動(dòng)計(jì)算或統(tǒng)計(jì)。通用場(chǎng)景有:
-
腳本字段A的值是根據(jù)字段B、字段C 的值,按照業(yè)務(wù)規(guī)則自動(dòng)計(jì)算所得;
-
腳本字段A的值根據(jù)Issue進(jìn)入Open狀態(tài)后的天數(shù)統(tǒng)計(jì)得到。
總結(jié)一下今天演講的主要內(nèi)容:如果您要使用ScriptRunner,重點(diǎn)關(guān)注Behaviours、Listeners、Workflows以及Script Fields這幾個(gè)模塊。將精力集中在這些模塊上,再加上動(dòng)態(tài)表單和HAPI的使用,就可以解決絕大部分的問題。如果大家還有其他問題解決不了,可以聯(lián)系A(chǔ)tlassian全球白金合作伙伴——龍智,我們將提供優(yōu)秀的解決方案,幫助你們達(dá)到目標(biāo)。
我今天的分享就到這,謝謝大家!