Jira使用 --- 经验分享
在Jira中,执行的代码/脚本都是groovy语法
Jira使用 - Create Project.
Jira使用 - Create Issue.
Jira使用 - Create Screens.
Jira使用 - Create Workflows.
Jira使用 - 组别和权限.
1.获取Field Value
1.1获取当前页中的Field Value
def systemField = getFieldByName("Field Name")
def value = systemField.getValue()
1.2获取当前issue中其它页的Field Value
import org.apache.log4j.Level
import org.apache.log4j.Logger
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.component.ComponentAccessor
def log = Logger.getLogger("data-api")
log.setLevel(Level.INFO)
MutableIssue issue = (MutableIssue) getUnderlyingIssue()
def optionName = ComponentAccessor.customFieldManager.customFieldObjects.findByName("Field Name")
def optionValue = issue.getCustomFieldValue(optionName)
log.info("request term name is:" + optionValue)
1.3获取单选/多选的值
1.在Behavious中先初始化。进行下面的 → 2.1步骤👇👇
2.对多选/单选栏位进行操作,找到栏位后,点击Add
3.在编码区进行编码,如下图👇
import org.apache.log4j.Level
import org.apache.log4j.Logger
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.component.ComponentAccessor
def isSystemField = getFieldById(getFieldChanged())
def Value = isSystemField.getValue()
2.单选or多选
1.Jira管理员账户登录,点击小齿轮,选择Manage apps
2.进入到Behaviours,按下面的语法进行查询👇👇
2.1文档参考
ScriptRunner for jira Server: https://docs.adaptavist.com/sr4js/latest/features/behaviours/behaviours-examples/select-list-conversions.
//单选
getFieldByName("TextFieldA").convertToSingleSelect([ // <1>
ajaxOptions: [
url : getBaseUrl() + "/rest/scriptrunner-jira/latest/issue/picker",
query: true, // keep going back to the sever for each keystroke
// this information is passed to the server with each keystroke
data: [
currentJql : "project = SSPA ORDER BY key ASC", // <2>
label : "Pick high priority issue in Support project", // <3>
showSubTasks: false, // <4>
// specify maximum number of issues to display, defaults to 10
// max : 5,
],
formatResponse: "issue" // <5>
],
css: "max-width: 500px; width: 500px", // <6>
])
// 多选
getFieldByName("TextFieldC").convertToMultiSelect([
ajaxOptions: [
url : getBaseUrl() + "/rest/scriptrunner/latest/custom/eventTypes",
query : true,
formatResponse: "general"
]
])
2.2运行script
1.首先要把脚本进行Mapping
即要让脚本知道,这个function对应的Project and issue type
2.结合UI界面进行测试
2.3查看log
1.找到Built-in script
2.滑到最下面
3.选择jira log
3.呼叫外部Api
3.1封装外部api,找到Rest Endpoints
import com.onresolve.scriptrunner.runner.rest.common.CustomEndpointDelegate
import groovy.json.JsonBuilder
import groovy.transform.BaseScript
import groovyx.net.http.ContentType
import groovyx.net.http.HTTPBuilder
import groovyx.net.http.Method
import javax.ws.rs.core.MultivaluedMap
import javax.ws.rs.core.Response
@BaseScript CustomEndpointDelegate delegate
githubRepoQuery(httpMethod: "GET") { MultivaluedMap queryParams ->
//这里获取Behaviours中api传的参数
def query = queryParams.getFirst("query") as String
def rt = [:]
if (query) {
def httpBuilder = new HTTPBuilder("https://api.github.com")
def repos = httpBuilder.request(Method.GET, ContentType.JSON) {
uri.path = "/search/repositories"
//进行赋值
uri.query = [q:"$query in:name", sort: "stars", order:"desc"]
headers."User-Agent" = "My JIRA"
response.failure = { resp, reader ->
log.warn("Failed to query GitHub API: " + reader.text)
}
}
def repoNames = repos["items"]*."full_name"
rt = [
items: repoNames.collect { String repo ->
[
value: repo,
html : repo.replaceAll(/(?i)$query/) { "<b>${it}</b>" },
label: repo,
]
},
total: repos["total_count"],
footer: "Choose repo... (${repoNames.size()} of ${repos["total_count"]} shown...)"
]
}
return Response.ok(new JsonBuilder(rt).toString()).build();
}
=>外部api的封装格式
注意:三个属性分别是下拉时的显示,点击确定后的显示和这个栏位的值
3.2Behaviours调用Endpoints,一般情况就是单选/多选
getFieldByName("TextFieldB").convertToMultiSelect([
ajaxOptions: [
url : getBaseUrl() + "/rest/scriptrunner/latest/custom/githubRepoQuery",
query: true, // keep going back to the sever for each keystroke
minQueryLength: 4,
keyInputPeriod: 500,
formatResponse: "general",
]
])
3.3UI界面测试,图片仅供参考
3.4多级联动,通过输入框内容模糊查询
// An highlighted block
var foo = 'bar';
4.jql查询Jira issue
1.进入issue查询界面
2.常规查询
选择对应issue的状态,然后点击Search就OK啦
3.执行语句查询
链接: 官方查询语句文档参考.
Demo:jql language
note:时间只有年月日时分,没有秒
project = xxxx and status was not "INTERFACE PROCESS" BEFORE "2022/02/14" and issuetype = "Data Pipeline Register" and status = "INTERFACE PROCESS"
5.封装Jira Service
慢慢来,不要急