Thao tác với Jira bằng Python

Xác thực Jira cung cấp API RESTful hoàn chỉnh, và nếu không muốn gọi trực tiếp các API, bạn có thể sử dụng thư viện Jira của Python để thao tác. Thư viện này hỗ trợ 3 phương thức xác thực:

  1. Xác thực qua Cookies (tên người dùng, mật khẩu)
  2. Xác thực qua Basic Auth (tên người dùng, mật khẩu)
  3. Xác thực qua OAuth

Chỉ cần chọn một phương thức. Dưới đây là ví dụ về xác thực qua Cookies.

from jira import JIRA

jira = JIRA('http://jira.***.com/', auth=('tên_đăng_nhập', 'mật_khẩu'))

Đối tượng jira được trả về có thể sử dụng để thao tác với Jira, bao gồm:

  • Dự án
  • Vấn đề
  • Tìm kiếm
  • Người theo dõi
  • Bình luận
  • Tệp đính kèm

Dự án (Project)

  • jira.projects(): Danh sách tất cả dự án
  • jira.project("key_dự_án"): Chi tiết dự án cụ thể

Các thuộc tính và phương thức chính của đối tượng dự án:

  • key: Khóa của dự án
  • name: Tên dự án
  • description: Mô tả dự án
  • lead: Người phụ trách dự án
  • projectCategory: Loại dự án
  • components: Các thành phần
  • versions: Các phiên bản
  • raw: Dữ liệu API gốc

Ví dụ:

print(jira.projects())  # In danh sách dự án có quyền truy cập

project = jira.project('key_dự_án')
print(project.key, project.name, project.lead)

Vấn đề (Issue) Vấn đề trong Jira bao gồm các nhiệm vụ, user story, bug. Đối tượng vấn đề có thể lấy thông qua jira.issue("key_vấn_đề"). Các thuộc tính và phương thức chính:

  • id: ID vấn đề
  • key: Khóa vấn đề
  • permalink(): Lấy liên kết vấn đề
  • fields: Các trường mô tả, thời gian tạo, v.v.
  • raw: Dữ liệu API gốc

Trường (Fields)

Trường của vấn đề bao gồm các thuộc tính cố định và tùy chỉnh. Các trường thường dùng:

  • assignee: Người được giao
  • created: Thời gian tạo
  • creator: Người tạo
  • labels: Nhãn
  • priority: Độ ưu tiên
  • project: Dự án
  • reporter: Người báo cáo
  • status: Trạng thái
  • summary: Mô tả vấn đề
  • worklog: Nhật ký công việc
  • updated: Thời gian cập nhật
  • watches: Người theo dõi
  • comments: Bình luận
  • resolution: Giải pháp
  • subtasks: Công việc con
  • issuelinks: Liên kết vấn đề
  • lastViewed: Thời gian xem gần nhất
  • attachment: Tệp đính kèm

Ví dụ:

issue = jira.issue('JRA-1330')
print(issue.key, issue.fields.summary, issue.fields.status)

Người theo dõi / Bình luận / Tệp đính kèm

  • jira.watchers(): Người theo dõi
  • jira.add_watcher(): Thêm người theo dõi
  • jira.remove_watcher(): Xóa người theo dõi
  • jira.comments(): Tất cả bình luận
  • jira.comment(): Một bình luận cụ thể
  • jira.add_comment(): Thêm bình luận
  • comment.update() / delete(): Cập nhật / Xóa bình luận
  • jira.add_attachment(): Thêm tệp đính kèm

Ví dụ:

issue = jira.issue('JRA-1330')

print(jira.watchers(issue))  # Tất cả người theo dõi
jira.add_watcher(issue, 'tên_người_dùng')  # Thêm người theo dõi

print(jira.comments(issue))  # Tất cả bình luận
comment = jira.comment(issue, '10234')  # Một bình luận cụ thể
jira.add_comment(issue, 'bình_luận_mới')  # Thêm bình luận
comment.update(body='cập_nhật_bình_luận')  # Cập nhật bình luận
comment.delete()  # Xóa bình luận

print(issue.fields.attachment)  # Tệp đính kèm
jira.add_attachment(issue=issue, attachment='/đường_dẫn/tệp.txt')  # Thêm tệp đính kèm

Tạo / Phân công / Chuyển đổi vấn đề

  • jira.create_issue(): Tạo vấn đề
  • jira.create_issues(): Tạo nhiều vấn đề
  • jira.assign_issue(): Phân công vấn đề
  • jira.transitions(): Lấy quy trình làm việc
  • jira.transition_issue(): Chuyển đổi vấn đề

Ví dụ:

# Tạo vấn đề
issue_dict = {
    'project': {'id': 123},
    'summary': 'Vấn đề mới từ jira-python',
    'description': 'Xem xét vấn đề này',
    'issuetype': {'name': 'Bug'},
}
new_issue = jira.create_issue(fields=issue_dict)

# Tạo nhiều vấn đề
issue_list = [
    {
        'project': {'id': 123},
        'summary': 'Vấn đề đầu tiên trong nhiều vấn đề',
        'description': 'Xem xét vấn đề này',
        'issuetype': {'name': 'Bug'},
    },
    {
        'project': {'key': 'FOO'},
        'summary': 'Vấn đề thứ hai',
        'description': 'Một vấn đề khác',
        'issuetype': {'name': 'Bug'},
    },
    {
        'project': {'name': 'Bar'},
        'summary': 'Vấn đề cuối cùng',
        'description': 'Vấn đề cuối cùng trong lô.',
        'issuetype': {'name': 'Bug'},
    }
]
issues = jira.create_issues(field_list=issue_list)

# Phân công vấn đề
jira.assign_issue(issue, 'người_phân_công')

# Chuyển đổi vấn đề
jira.transition_issue(issue, '5', assignee={'name': 'pm_user'}, resolution={'id': '3'})

Tìm kiếm Jira cung cấp khả năng tìm kiếm mạnh mẽ với ngôn ngữ JQL (Jira Query Language). Thư viện Python sử dụng JQL để tìm kiếm, trả về danh sách vấn đề.

jira.search_issues('JQL_statement')

Mặc định, số kết quả tối đa là 1000, nhưng có thể cấu hình thông qua tham số maxResults. Đặt -1 để không giới hạn số lượng kết quả.

jira.search_issues('project=PROJ and assignee = currentUser()', maxResults=-1)

Thẻ: jira python rest-api jql issue-tracking

Đăng vào ngày 17 tháng 6 lúc 04:56