on
[flask] flask + jira API
[flask] flask + jira API
2종류가 있다.
JIRA python library : https://github.com/pycontribs/jira atlassian-python-api : https://github.com/atlassian-api/atlassian-python-api
1번은 JIRA 만을 사용하기 위해 만들어진 라이브러리고,
2번은 atlassian 자체를 사용하면서 그 중에 JIRA API를 쓸 수 있다.
두 라이브러리 간 사용법 자체는 크게 차이가 없어보임. jira만 쓸꺼니까 일단 1번으로 해본다.
JIRA 서버 연결
JIRA 서버를 새로 만들어서 연결하는게 아닌, 기존 서버에 연결해서 사용하는게 목적이다.
from jira import JIRA jac = JIRA('',auth=('username','password'))
여기서 계정 로그인을 위한 인증auth은 크게 세가지 방법을 나눠서 많이쓰는것 같다.
아이디-비밀번호를 이용한 인증 : auth 이메일-API 토큰을 이용한 인증 (JIRA 클라우드 사용시) : basic_auth Oauth_dict 를 사용한 인증(Oauth 방식 인증 사용시) : oauth
지금 써볼 방식은 2번의 이메일-API 토큰을 이용한 인증방식.
계정 프로필- 계정 설정 - 보안 탭에서 API토큰 관련 메뉴를 찾을 수 있다.
여기서 API 토큰을 생성하고 복사해 사용하면 된다. 생성할 때 만들어진 토큰은 자동으로 복사가 되는데, 이때 복사를 미리 해두지 않으면 다시 복사할 수 없으니 주의.
from jira import JIRA API_TOKEN = TOKEN_KEY auth_JIRA = (email,API_TOKEN) jira = JIRA(URL,basic_auth=auth_JIRA)
이렇게만 해줘도 서버에 연결하고 인증이 끝난다.
Project 참조
전체 프로젝트 목록을 불러오기 위해선 jira.projects() 함수를 사용하는데,
특정 프로젝트의 정보만 참조하고 싶을때는 project 함수를 사용한다.
pjs = jira.projects() pj = jira.project(issuename) for pname in dir(pj) : print(pname+':'+str(getattr(pj,pname)))
jira.projects() 함수는 전체 프로젝트 리스트를 반환하고, jira.project 함수는 선택한 프로젝트의 오브젝트 정보를 반환한다.
이런식으로 프로젝트 오브젝트 내 전체 속성 정보를 받아와 필요한 데이터만 사용하면 될듯.
.raw로 dict 형식 데이터 받아올 수 있음.
특정 이슈만 참조
특정 이슈를 참조하기 위해서는 jira.issue() 함수를 사용
from jira import JIRA API_TOKEN = TOKEN_KEY auth_JIRA = (email,API_TOKEN) jira = JIRA(URL,basic_auth=auth_JIRA) issue = jira.issue('issuname-number') print(issue.raw['fields']['issuetype']) print(issue.fields.status)
클래스형으로 사용하고 싶다면 필드명 으로 바로 접근이 가능하고, .raw로 접근하면 dict 형식 데이터 받아올 수 있음. 주요 데이터는 fields에 저장된다.
statuscategorychangedate issuetype timespent project customfield_10032 fixVersions customfield_10033 aggregatetimespent customfield_10034 customfield_10035 resolution customfield_10036 customfield_10029 resolutiondate workratio watches lastViewed issuerestriction created customfield_10020 customfield_10021 customfield_10022 customfield_10023 priority customfield_10024 customfield_10025 labels customfield_10016 customfield_10017 customfield_10018 customfield_10019 timeestimate aggregatetimeoriginalestimate versions issuelinks assignee updated status components timeoriginalestimate description customfield_10010 customfield_10014 customfield_10015 timetracking customfield_10005 customfield_10006 customfield_10007 security customfield_10008 customfield_10009 aggregatetimeestimate attachment summary creator subtasks reporter customfield_10000 aggregateprogress customfield_10001 customfield_10002 customfield_10003 customfield_10004 environment duedate progress votes comment worklog
fields 내 속성 목록. dict 형태니까 저 이름들을 가지고 접근하면 됨.
아래 코드를 사용하면 해당 이슈의 모든 필드 목록과 그 값을 가져올 수 있으니, 이를 통해 어떻게 접근할지 참고해볼 수 있다.
iss = jira.issue(이슈번호) for i in dir(iss.fields): print(i+":"+str(getattr(iss.fields,i)))
이슈 필드 데이터 접근
이하 데이터들은 dict 형태로 구성됨
속성명 설명 자료형
statuscategorychangedate 작업 상태가 변경된 시각 str issuetype 현재 이슈타입과 이슈타입별 속성에 대한 정보 dict timespent project 현재 이슈가 속해있는 프로젝트와 프로젝트 속성에 대한 정보 dict fixVersions issuerestriction watches 지켜보기 옵션 관련 속성 dict lastViewed 최종 조회된 시각 str created 생성 시각 str priority 현재 이슈의 우선순위와 해당 우선순위 속성 정보 dict labels 현재 이슈에 부여된 레이블 list timeestimate 이슈 '시간 추적' 속성 int aggregatetimeoriginalestimate 이슈 '최초 추정치' 속성 int updated 이슈 수정된 시각 str status 현재 이슈 상태와 상태 속성에 대한 정보 dict timeoriginalestimate 이슈 '최초 추정치' 속성 (?) - 공유하는걸로 보임 int description 이슈에 작성된 내용 str timetracking 현재 이슈의 시간 관련된 내용들 담긴 dict dict aggregatetimeestimate 이슈 '시간 추적' 속성 공유 int summary 이슈 요약 - 보드에서 보이는 제목 str creator 이슈 생성자 정보와 생성자 속성에 대한 정보 dict reporter 이슈 보고자 정보와 보고자 속성에 대한 정보 dict assignee 이슈 배정자 정보와 배정자 속성에 대한 정보 dict duedate 완료 예정 날짜 str votes 따봉 관련 속성 dict comment 이슈에 작성된 댓글 정보 dict worklog 이슈 작업로그 정보 dict
이슈 정보 접근 & 변경
jira.transitions() 함수 이용해 현재 이슈 상태와 현재 상태에서 전환 가능한 이슈 리스트를 받아올 수 있고, jira.transition_issue() 함수로 선택한 이슈의 상태를 전환한다.
issue = jira.issue('ISS-1') print(jira.transitions(issue)) print(jira.transitions('ISS-2')) jira.transition_issue(issue,'41')
이슈 객체를 담고있는 변수 혹은 이슈 코드로 사용이 가능하다.
상태 변환시엔 해당 상태의 id값을 인자로 넘겨줘야한다.
이슈 객체에 대해 update() 함수를 실행하여 이슈의 여러 필드를 변경할 수 있다.
issue = jira.issue('ISS-2') accid = '11001100110011' issue.update( assignee={'accountId':accid} )
Jira Query
jira.search_issues() 함수 실행하여 SQL DB에서 쿼리 사용하듯이 데이터 조회가 가능하다.
q = 'project = "SOT" ORDER BY created DESC' print(jira.search_issues(q)) ~~~ [, , ]
리스트 형태로 issue 오브젝트 객체가 반환된다.
쿼리로 issue 오브젝트를 받아온 경우 comment와 worklog 필드가 증발한다.
따라서, 받아온 issue 오브젝트의 key 기반으로 객체를 다시 찾아오는 작업을 거쳐야한다.
for i in jira.search_issues(q) : o = jira.issue(i.key)
comment 작성
jira.add_comment(issue,'comment test')
from http://my-repo.tistory.com/109 by ccl(A) rewrite - 2021-12-04 23:01:00