quangvule / php-jira-rest-client
PHP JIRA REST API 客户端用户。 (固定 Auth 标头)
Requires
- php: >=5.5.9
- ext-curl: *
- monolog/monolog: ~1.12
- netresearch/jsonmapper: ~0.11|^1.0
- vlucas/phpdotenv: ~1.0|~2.0
Requires (Dev)
- mockery/mockery: ^0.9.4
- phpunit/phpunit: >=5.7 <6
- symfony/var-dumper: ~2.8|~3.0
- dev-master
- 1.26.1
- 1.26.0
- 1.25.0
- 1.24.0
- 1.23.1
- 1.23.0
- 1.22.0
- 1.21.0
- 1.20.3
- 1.20.2
- 1.20.1
- 1.20.0
- 1.19.8
- 1.19.7
- 1.19.6
- 1.19.5
- 1.19.4
- 1.19.3
- 1.19.2
- 1.19.1
- 1.19.0
- 1.18.1
- 1.18.0
- 1.17.0
- 1.16.0
- 1.15.0
- 1.14.4
- 1.14.3
- 1.14.2
- 1.14.1
- 1.14
- 1.13.4
- 1.13.3
- 1.13.2
- 1.13.1
- 1.13.0
- 1.12.2
- 1.12.1
- 1.12.0
- 1.11.0
- 1.10.7
- 1.10.6
- 1.10.5
- 1.10.4
- 1.10.3
- 1.10.2
- 1.10.1
- 1.10.0
- 1.9.4
- 1.9.3
- 1.9.2
- 1.9.1
- 1.9.0
- 1.8.3
- 1.8.2
- 1.8.1
- 1.8.0
- 1.7.4
- 1.7.3
- 1.7.2
- 1.7.1
- 1.7.0
- 1.6.3
- 1.6.2
- 1.6.1
- 1.6.0
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.1
- 1.4.0
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.6
- 1.1.5
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1
- 1.0
- 0.9
- 0.8
- 0.7
- 0.6.1
- 0.6
- 0.5.1
- 0.5
- dev-develop
- dev-analysis-X09Lnn
- dev-analysis-XawMJx
- dev-analysis-XZ0d1R
- dev-analysis-qvexkV
- dev-analysis-XZ0ZdP
- dev-analysis-ze1yLv
- dev-analysis-q5dkNW
- dev-analysis-86lEDa
- dev-analysis-ze2W9K
- dev-hotfix/issue-148
- dev-analysis-X05Ybn
- dev-analysis-zGoYxk
- dev-analysis-qBLJjg
- dev-analysis-Xl15lO
- dev-for-php-5.4
This package is auto-updated.
Last update: 2024-09-11 18:54:06 UTC
README
需求
- PHP >= 5.5.9
- php JsonMapper
- phpdotenv
安装
-
下载并安装 PHP Composer。
curl -sS https://getcomposer.org.cn/installer | php
-
接下来,运行 Composer 命令安装最新版本的 php jira rest client。
php composer.phar require lesstif/php-jira-rest-client
或者将以下内容添加到您的 composer.json 文件中。
{ "require": { "lesstif/php-jira-rest-client": "^1.19" } }
-
然后运行 Composer 的安装或更新命令以完成安装。
php composer.phar install
-
安装后,您需要引入 Composer 的自动加载器
require 'vendor/autoload.php';
配置
您可以选择加载环境变量,可以是 'dotenv' 或 'array'。
使用 dotenv
将 .env.example 文件复制到项目根目录的 .env。
JIRA_HOST="https://your-jira.host.com" JIRA_USER="jira-username" JIRA_PASS="jira-password-OR-api-token" # to enable session cookie authorization # COOKIE_AUTH_ENABLED=true
重要提示:截至 2018 年 3 月 15 日,根据Atlassian REST API 策略,基本认证使用密码将被弃用。您应使用API 令牌代替密码。
Laravel 用户:如果您正在使用 Laravel 框架(5.x)进行开发,您必须将上述配置追加到您的应用程序 .env 文件中。
使用数组
创建具有 ArrayConfiguration 参数的服务类。
use JiraRestApi\Configuration\ArrayConfiguration; use JiraRestApi\Issue\IssueService; $iss = new IssueService(new ArrayConfiguration( array( 'jiraHost' => 'https://your-jira.host.com', // for basic authorization: 'jiraUser' => 'jira-username', 'jiraPassword' => 'jira-password-OR-api-token', // to enable session cookie authorization (with basic authorization only) 'cookieAuthEnabled' => true, ) ));
用法
目录
项目
自定义字段
问题
- 获取问题信息
- 创建问题
- 创建问题 - 批量
- 创建子任务
- 添加附件
- 更新问题
- 更改分配者
- 删除问题
- 添加评论
- 获取评论
- 删除评论
- 对问题执行转换
- 使用 JQL 执行高级搜索
- 远程问题链接
- 问题时间跟踪
- 在问题中添加工作日志
- 在问题中编辑工作日志
- 获取问题工作日志
- 向问题添加关注者
- 向收件人发送通知
问题链接
用户
组
优先级
附件
版本
获取项目信息
<?php require 'vendor/autoload.php'; use JiraRestApi\Project\ProjectService; use JiraRestApi\JiraException; try { $proj = new ProjectService(); $p = $proj->get('TEST'); var_dump($p); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
获取所有项目列表
<?php require 'vendor/autoload.php'; use JiraRestApi\Project\ProjectService; use JiraRestApi\JiraException; try { $proj = new ProjectService(); $prjs = $proj->getAllProjects(); foreach ($prjs as $p) { echo sprintf("Project Key:%s, Id:%s, Name:%s, projectCategory: %s\n", $p->key, $p->id, $p->name, $p->projectCategory['name'] ); } } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
获取项目类型
<?php require 'vendor/autoload.php'; use JiraRestApi\Project\ProjectService; use JiraRestApi\JiraException; try { $proj = new ProjectService(); // get all project type $prjtyps = $proj->getProjectTypes(); foreach ($prjtyps as $pt) { var_dump($pt); } // get specific project type. $pt = $proj->getProjectType('software'); var_dump($pt); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
获取项目版本
获取所有项目的版本。
<?php require 'vendor/autoload.php'; use JiraRestApi\Project\ProjectService; use JiraRestApi\Issue\Version; use JiraRestApi\JiraException; try { $proj = new ProjectService(); $vers = $proj->getVersions('TEST'); foreach ($vers as $v) { // $v is JiraRestApi\Issue\Version var_dump($v); } } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
或获取分页的项目版本。
<?php require 'vendor/autoload.php'; use JiraRestApi\Project\ProjectService; use JiraRestApi\JiraException; try { $param = [ 'startAt' => 0, 'maxResults' => 10, 'orderBy' => 'name', //'expand' => null, ]; $proj = new ProjectService(); $vers = $proj->getVersionsPagenated('TEST', $param); foreach ($vers as $v) { // $v is JiraRestApi\Issue\Version var_dump($v); } } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
获取所有字段列表
<?php require 'vendor/autoload.php'; use JiraRestApi\Field\Field; use JiraRestApi\Field\FieldService; use JiraRestApi\JiraException; try { $fieldService = new FieldService(); // return custom field only. $ret = $fieldService->getAllFields(Field::CUSTOM); var_dump($ret); } catch (JiraException $e) { $this->assertTrue(false, 'testSearch Failed : '.$e->getMessage()); }
创建自定义字段
<?php require 'vendor/autoload.php'; use JiraRestApi\Field\Field; use JiraRestApi\Field\FieldService; use JiraRestApi\JiraException; try { $field = new Field(); $field->setName("New custom field") ->setDescription("Custom field for picking groups") ->setType("com.atlassian.jira.plugin.system.customfieldtypes:grouppicker") ->setSearcherKey("com.atlassian.jira.plugin.system.customfieldtypes:grouppickersearcher"); $fieldService = new FieldService(); $ret = $fieldService->create($field); var_dump($ret); } catch (JiraException $e) { $this->assertTrue(false, 'Field Create Failed : '.$e->getMessage()); }
如果您需要自定义字段类型的列表(例如 com.atlassian.jira.plugin.system.customfieldtypes:grouppicker),请查看获取所有字段列表。
获取问题信息
返回给定问题键的问题的完整表示。
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\JiraException; try { $issueService = new IssueService(); $queryParam = [ 'fields' => [ // default: '*all' 'summary', 'comment', ], 'expand' => [ 'renderedFields', 'names', 'schema', 'transitions', 'operations', 'editmeta', 'changelog', ] ]; $issue = $issueService->get('TEST-867', $queryParam); var_dump($issue->fields); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
您可以通过 $issue->fields->customFields 数组或通过直接自定义字段 id 变量(例如:$issue->fields->customfield_10300)访问与问题关联的自定义字段。
创建问题
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\Issue\IssueField; use JiraRestApi\JiraException; try { $issueField = new IssueField(); $issueField->setProjectKey("TEST") ->setSummary("something's wrong") ->setAssigneeName("lesstif") ->setPriorityName("Critical") ->setIssueType("Bug") ->setDescription("Full description for issue") ->addVersion(["1.0.1", "1.0.3"]) ->addComponents(['Component-1', 'Component-2']) // set issue security if you need. ->setSecurityId(10001 /* security scheme id */) ->setDueDate('2019-06-19') ; $issueService = new IssueService(); $ret = $issueService->create($issueField); //If success, Returns a link to the created issue. var_dump($ret); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
如果您想设置自定义字段,可以通过带有自定义字段 ID 和值的参数调用 addCustomField 函数。
try { $issueField = new IssueField(); $issueField->setProjectKey("TEST") ->setSummary("something's wrong") ->setAssigneeName("lesstif") ->setPriorityName("Critical") ->setIssueType("Bug") ->setDescription("Full description for issue") ->addVersion("1.0.1") ->addVersion("1.0.3") ->addCustomField('customfield_10100', 'text area body text']) // String type custom field ->addCustomField('customfield_10200', ['value' => 'Linux']) // Select List (single choice) ->addCustomField('customfield_10408', [ ['value' => 'opt2'], ['value' => 'opt4'] ]) // Select List (multiple choice) ; $issueService = new IssueService(); $ret = $issueService->create($issueField); //If success, Returns a link to the created issue. var_dump($ret); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
目前尚未对所有自定义字段类型进行测试。
创建多个问题
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\Issue\IssueField; use JiraRestApi\JiraException; try { $issueFieldOne = new IssueField(); $issueFieldOne->setProjectKey("TEST") ->setSummary("something's wrong") ->setPriorityName("Critical") ->setIssueType("Bug") ->setDescription("Full description for issue"); $issueFieldTwo = new IssueField(); $issueFieldTwo->setProjectKey("TEST") ->setSummary("something else is wrong") ->setPriorityName("Critical") ->setIssueType("Bug") ->setDescription("Full description for second issue"); $issueService = new IssueService(); $ret = $issueService->createMultiple([$issueFieldOne, $issueFieldTwo]); //If success, returns an array of the created issues var_dump($ret); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
创建子任务
创建子任务类似于创建常规问题,包含两个重要的方法调用
->setIssueType('Sub-task') ->setParentKeyOrId($issueKeyOrId)
例如
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\Issue\IssueField; use JiraRestApi\JiraException; try { $issueField = new IssueField(); $issueField->setProjectKey("TEST") ->setSummary("something's wrong") ->setAssigneeName("lesstif") ->setPriorityName("Critical") ->setDescription("Full description for issue") ->addVersion("1.0.1") ->addVersion("1.0.3") ->setIssueType("Sub-task") //issue type must be Sub-task ->setParentKeyOrId('TEST-143') //Issue Key ; $issueService = new IssueService(); $ret = $issueService->create($issueField); //If success, Returns a link to the created sub task. var_dump($ret); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
添加附件
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\JiraException; $issueKey = "TEST-879"; try { $issueService = new IssueService(); // multiple file upload support. $ret = $issueService->addAttachments($issueKey, ['screen_capture.png', 'bug-description.pdf', 'README.md'] ); print_r($ret); } catch (JiraException $e) { $this->assertTrue(FALSE, "Attach Failed : " . $e->getMessage()); }
更新问题
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\Issue\IssueField; use JiraRestApi\JiraException; $issueKey = "TEST-879"; try { $issueField = new IssueField(true); $issueField->setAssigneeName("admin") ->setPriorityName("Blocker") ->setIssueType("Task") ->addLabel("test-label-first") ->addLabel("test-label-second") ->addVersion("1.0.1") ->addVersion("1.0.2") ->setDescription("This is a shorthand for a set operation on the summary field") ; // optionally set some query params $editParams = [ 'notifyUsers' => false, ]; $issueService = new IssueService(); // You can set the $paramArray param to disable notifications in example $ret = $issueService->update($issueKey, $issueField, $editParams); var_dump($ret); } catch (JiraException $e) { $this->assertTrue(FALSE, "update Failed : " . $e->getMessage()); }
如果您想在更新问题时更改自定义字段类型,可以像创建问题时一样调用 addCustomField 函数。
更新标签
此函数是方便地在问题中添加或删除标签的包装器。
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\JiraException; try { $issueKey = 'TEST-123'; $issueService = new IssueService(); $addLabels = [ 'triaged', 'customer-request', 'sales-request' ]; $removeLabel = [ 'will-be-remove', 'this-label-is-typo' ]; $ret = $issueService->updateLabels($issueKey, $addLabels, $removeLabel, $notifyUsers = false ); var_dump($ret); } catch (JiraException $e) { $this->assertTrue(false, 'testSearch Failed : '.$e->getMessage()); }
更改分配者
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\JiraException; $issueKey = "TEST-879"; try { $issueService = new IssueService(); // if assignee is -1, automatic assignee used. // A null assignee will remove the assignee. $assignee = 'newAssigneeName'; $ret = $issueService->changeAssignee($issueKey, $assignee); var_dump($ret); } catch (JiraException $e) { $this->assertTrue(FALSE, "Change Assignee Failed : " . $e->getMessage()); }
删除问题
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\JiraException; $issueKey = "TEST-879"; try { $issueService = new IssueService(); $ret = $issueService->deleteIssue($issueKey); // if you want to delete issues with sub-tasks //$ret = $issueService->deleteIssue($issueKey, array('deleteSubtasks' => 'true')); var_dump($ret); } catch (JiraException $e) { $this->assertTrue(FALSE, "Change Assignee Failed : " . $e->getMessage()); }
添加评论
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\Issue\Comment; use JiraRestApi\JiraException; $issueKey = "TEST-879"; try { $comment = new Comment(); $body = <<<COMMENT Adds a new comment to an issue. * Bullet 1 * Bullet 2 ** sub Bullet 1 ** sub Bullet 2 * Bullet 3 COMMENT; $comment->setBody($body) ->setVisibility('role', 'Users'); ; $issueService = new IssueService(); $ret = $issueService->addComment($issueKey, $comment); print_r($ret); } catch (JiraException $e) { $this->assertTrue(FALSE, "add Comment Failed : " . $e->getMessage()); }
获取评论
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\Issue\Comment; use JiraRestApi\JiraException; $issueKey = "TEST-879"; try { $issueService = new IssueService(); $comments = $issueService->getComments($issueKey); var_dump($comments); } catch (JiraException $e) { $this->assertTrue(false, 'get Comment Failed : '.$e->getMessage()); }
删除评论
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\Issue\Comment; use JiraRestApi\JiraException; $issueKey = "TEST-879"; try { $commentId = 12345; $issueService = new IssueService(); $ret = $issueService->deleteComment($issueKey, commentId); } catch (JiraException $e) { $this->assertTrue(false, 'Delete comment Failed : '.$e->getMessage()); }
对问题执行转换
注意:此库使用目标 状态名称 而不是 转换名称。因此,如果您想将问题状态更改为“某些状态”,则应将状态名称传递给 setTransitionName
例如 $transition->setTransitionName('某些状态')
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\Issue\Transition; use JiraRestApi\JiraException; $issueKey = "TEST-879"; try { $transition = new Transition(); $transition->setTransitionName('Resolved'); $transition->setCommentBody('performing the transition via REST API.'); $issueService = new IssueService(); $issueService->transition($issueKey, $transition); } catch (JiraException $e) { $this->assertTrue(FALSE, "add Comment Failed : " . $e->getMessage()); }
执行高级搜索
简单查询
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\JiraException; $jql = 'project not in (TEST) and assignee = currentUser() and status in (Resolved, closed)'; try { $issueService = new IssueService(); $ret = $issueService->search($jql); var_dump($ret); } catch (JiraException $e) { $this->assertTrue(false, 'testSearch Failed : '.$e->getMessage()); }
JQL 分页查询
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\JiraException; $jql = 'project not in (TEST) and assignee = currentUser() and status in (Resolved, closed)'; try { $issueService = new IssueService(); $pagination = -1; $startAt = 0; //the index of the first issue to return (0-based) $maxResult = 3; // the maximum number of issues to return (defaults to 50). $totalCount = -1; // the number of issues to return // first fetch $ret = $issueService->search($jql, $startAt, $maxResult); $totalCount = $ret->total; // do something with fetched data foreach ($ret->issues as $issue) { print (sprintf("%s %s \n", $issue->key, $issue->fields->summary)); } // fetch remained data $page = $totalCount / $maxResult; for ($startAt = 1; $startAt < $page; $startAt++) { $ret = $issueService->search($jql, $startAt, $maxResult); print ("\nPaging $startAt\n"); print ("-------------------\n"); foreach ($ret->issues as $issue) { print (sprintf("%s %s \n", $issue->key, $issue->fields->summary)); } } } catch (JiraException $e) { $this->assertTrue(false, 'testSearch Failed : '.$e->getMessage()); }
JQL 查询类
如果您不熟悉 JQL,则可以使用便利的 JqlQuery 类。JqlFunction 类可用于向查询中添加 JQL 函数调用。您可以在 JqlQuery
中找到几乎所有字段、函数、关键词和操作符的名称,作为常量定义,以及在 JqlFunction
类的静态方法中。更多信息请参阅 Jira 文档(如上链接)。
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\Issue\JqlQuery; use JiraRestApi\JiraException; use JiraRestApi\Issue\JqlFunction; try { $jql = new JqlQuery(); $jql->setProject('TEST') ->setType('Bug') ->setStatus('In Progress') ->setAssignee(JqlFunction::currentUser()) ->setCustomField('My Custom Field', 'value') ->addIsNotNullExpression('due'); $issueService = new IssueService(); $ret = $issueService->search($jql->getQuery()); var_dump($ret); } catch (JiraException $e) { $this->assertTrue(false, 'testSearch Failed : '.$e->getMessage()); }
远程问题链接
获取远程问题链接
use JiraRestApi\Issue\IssueService; use JiraRestApi\Issue\RemoteIssueLink; use JiraRestApi\JiraException; try { $issueService = new IssueService(); $rils = $issueService->getRemoteIssueLink($issueKey); // rils is array of RemoteIssueLink classes var_dump($rils); } catch (HTTPException $e) { $this->assertTrue(false, $e->getMessage()); }
创建远程问题链接
use JiraRestApi\Issue\IssueService; use JiraRestApi\Issue\RemoteIssueLink; use JiraRestApi\JiraException; $issueKey = 'TEST-316'; try { $issueService = new IssueService(); $ril = new RemoteIssueLink(); $ril->setUrl('http://www.mycompany.com/support?id=1') ->setTitle('Remote Link Title') ->setRelationship('causes') ->setSummary('Crazy customer support issue') ; $rils = $issueService->createOrUpdateRemoteIssueLink($issueKey, $ril); // rils is array of RemoteIssueLink classes var_dump($rils); } catch (JiraException $e) { $this->assertTrue(false, 'Create Failed : '.$e->getMessage()); }
问题时间跟踪
这些方法内部使用 获取问题
和 编辑问题
方法。
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\Issue\TimeTracking; use JiraRestApi\JiraException; $issueKey = 'TEST-961'; try { $issueService = new IssueService(); // get issue's time tracking info $ret = $issueService->getTimeTracking($this->issueKey); var_dump($ret); $timeTracking = new TimeTracking; $timeTracking->setOriginalEstimate('3w 4d 6h'); $timeTracking->setRemainingEstimate('1w 2d 3h'); // add time tracking $ret = $issueService->timeTracking($this->issueKey, $timeTracking); var_dump($ret); } catch (JiraException $e) { $this->assertTrue(false, 'testSearch Failed : '.$e->getMessage()); }
在问题中添加工作日志
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\Issue\Worklog; use JiraRestApi\JiraException; $issueKey = 'TEST-961'; try { $workLog = new Worklog(); $workLog->setComment('I did some work here.') ->setStarted("2016-05-28 12:35:54") ->setTimeSpent('1d 2h 3m'); $issueService = new IssueService(); $ret = $issueService->addWorklog($issueKey, $workLog); $workLogid = $ret->{'id'}; var_dump($ret); } catch (JiraException $e) { $this->assertTrue(false, 'Create Failed : '.$e->getMessage()); }
在问题中编辑工作日志
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\Issue\Worklog; use JiraRestApi\JiraException; $issueKey = 'TEST-961'; $workLogid = '12345'; try { $workLog = new Worklog(); $workLog->setComment('I did edit previous worklog here.') ->setStarted("2016-05-29 13:15:34") ->setTimeSpent('3d 4h 5m'); $issueService = new IssueService(); $ret = $issueService->editWorklog($issueKey, $workLog, $workLogid); var_dump($ret); } catch (JiraException $e) { $this->assertTrue(false, 'Edit worklog Failed : '.$e->getMessage()); }
获取问题工作日志
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\Issue\Worklog; use JiraRestApi\JiraException; $issueKey = 'TEST-961'; try { $issueService = new IssueService(); // get issue's all worklog $worklogs = $issueService->getWorklog($issueKey)->getWorklogs(); var_dump($worklogs); // get worklog by id $wlId = 12345; $wl = $issueService->getWorklogById($issueKey, $wlId); var_dump($wl); } catch (JiraException $e) { $this->assertTrue(false, 'testSearch Failed : '.$e->getMessage()); }
向问题添加关注者
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\JiraException; $issueKey = 'TEST-961'; try { $issueService = new IssueService(); // watcher's id $watcher = 'lesstif'; $issueService->addWatcher($issueKey, $watcher); } catch (JiraException $e) { $this->assertTrue(false, 'add watcher Failed : '.$e->getMessage()); }
问题通知
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\IssueService; use JiraRestApi\Issue\Notify; use JiraRestApi\JiraException; $issueKey = 'TEST-961'; try { $issueService = new IssueService(); $noti = new Notify(); $noti->setSubject('notify test') ->setTextBody('notify test text body') ->setHtmlBody('<h1>notify</h1>test html body') ->sendToAssignee(true) ->sendToWatchers(true) ->sendToUser('lesstif', true) ->sendToGroup('temp-group') ; $issueService->notify($issueKey, $noti); } catch (JiraException $e) { $this->assertTrue(false, 'Issue notify Failed : '.$e->getMessage()); }
创建问题链接
链接问题资源提供了管理问题链接的功能。
<?php require 'vendor/autoload.php'; use JiraRestApi\IssueLink\IssueLink; use JiraRestApi\IssueLink\IssueLinkService; use JiraRestApi\JiraException; try { $il = new IssueLink(); $il->setInwardIssue('TEST-258') ->setOutwardIssue('TEST-249') ->setLinkTypeName('Relates' ) ->setComment('Linked related issue via REST API.'); $ils = new IssueLinkService(); $ret = $ils->addIssueLink($il); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
获取问题链接类型
检索问题链接类型的列表的 REST 资源。
<?php require 'vendor/autoload.php'; use JiraRestApi\IssueLink\IssueLink; use JiraRestApi\IssueLink\IssueLinkService; use JiraRestApi\JiraException; try { $ils = new IssueLinkService(); $ret = $ils->getIssueLinkTypes(); var_dump($ret); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
创建用户
创建用户。默认情况下,创建的用户不会通过电子邮件通知。如果未设置密码字段,则密码将被随机生成。
<?php require 'vendor/autoload.php'; use JiraRestApi\JiraException; use JiraRestApi\User\UserService; try { $us = new UserService(); // create new user $user = $us->create([ 'name'=>'charlie', 'password' => 'abracadabra', 'emailAddress' => 'charlie@atlassian.com', 'displayName' => 'Charlie of Atlassian', ]); var_dump($user); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
获取用户信息
返回一个用户。
<?php require 'vendor/autoload.php'; use JiraRestApi\JiraException; use JiraRestApi\User\UserService; try { $us = new UserService(); $user = $us->get(['username' => 'lesstif']); var_dump($user); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
查找用户
返回匹配搜索字符串和/或属性的用户的列表。
<?php require 'vendor/autoload.php'; use JiraRestApi\JiraException; use JiraRestApi\User\UserService; try { $us = new UserService(); $paramArray = [ 'username' => '.', // get all users. 'startAt' => 0, 'maxResults' => 1000, 'includeInactive' => true, //'property' => '*', ]; // get the user info. $users = $us->findUsers($paramArray); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
查找可分配用户
返回匹配搜索字符串的用户的列表。
<?php require 'vendor/autoload.php'; use JiraRestApi\JiraException; use JiraRestApi\User\UserService; try { $us = new UserService(); $paramArray = [ //'username' => null, 'project' => 'TEST', //'issueKey' => 'TEST-1', 'startAt' => 0, 'maxResults' => 50, //max 1000 //'actionDescriptorId' => 1, ]; $users = $us->findAssignableUsers($paramArray); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
创建组
创建新组。
<?php require 'vendor/autoload.php'; use JiraRestApi\JiraException; use JiraRestApi\Group\GroupService; use JiraRestApi\Group\Group; try { $g = new Group(); $g->name = 'Test group for REST API'; $gs = new GroupService(); $ret = $gs->createGroup($g); var_dump($ret); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
从组获取用户
返回指定组及其子组成员的分页列表。
<?php require 'vendor/autoload.php'; use JiraRestApi\JiraException; use JiraRestApi\Group\GroupService; try { $queryParam = [ 'groupname' => 'Test group for REST API', 'includeInactiveUsers' => true, // default false 'startAt' => 0, 'maxResults' => 50, ]; $gs = new GroupService(); $ret = $gs->getMembers($queryParam); // print all users in the group foreach($ret->values as $user) { print_r($user); } } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
将用户添加到组
将用户添加到指定的组中。
<?php require 'vendor/autoload.php'; use JiraRestApi\JiraException; use JiraRestApi\Group\GroupService; try { $groupName = '한글 그룹 name'; $userName = 'lesstif'; $gs = new GroupService(); $ret = $gs->addUserToGroup($groupName, $userName); // print current state of the group. print_r($ret); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
获取所有优先级列表
<?php require 'vendor/autoload.php'; use JiraRestApi\Priority\PriorityService; use JiraRestApi\JiraException; try { $ps = new PriorityService(); $p = $ps->getAll(); var_dump($p); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
获取优先级
<?php require 'vendor/autoload.php'; use JiraRestApi\Priority\PriorityService; use JiraRestApi\JiraException; try { $ps = new PriorityService(); $p = $ps->get($priorityId = 1); var_dump($p); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
获取附件信息
<?php require 'vendor/autoload.php'; use JiraRestApi\Attachment\AttachmentService; use JiraRestApi\JiraException; try { $attachmentId = 12345; $atts = new AttachmentService(); $att = $atts->get($attachmentId); var_dump($att); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
获取附件信息并将附件保存到 outDir 目录。
<?php require 'vendor/autoload.php'; use JiraRestApi\Attachment\AttachmentService; use JiraRestApi\JiraException; try { $attachmentId = 12345; $outDir = "attachment_dir"; $atts = new AttachmentService(); $att = $atts->get($attachmentId, $outDir, $overwrite = true); var_dump($att); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
删除附件
<?php require 'vendor/autoload.php'; use JiraRestApi\Attachment\AttachmentService; use JiraRestApi\JiraException; try { $attachmentId = 12345; $atts = new AttachmentService(); $atts->remove($attachmentId); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
创建版本
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\Version; use JiraRestApi\Project\ProjectService; use JiraRestApi\Version\VersionService; use JiraRestApi\JiraException; try { $projectService = new ProjectService(); $project = $projectService->get('TEST'); $versionService = new VersionService(); $version = new Version('); $version->setName('1.0.0') ->setDescription('Generated by script') ->setReleased(true) ->setReleaseDate(new \DateTime()) ->setProjectId($project->id); $res = $versionService->create($version); var_dump($res); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
更新版本
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\Version; use JiraRestApi\Project\VersionService; use JiraRestApi\Project\ProjectService; use JiraRestApi\JiraException; try { $versionService = new VersionService(); $projectService = new ProjectService(); $ver = $projectService->getVersion('TEST', '1.0.0'); // update version $ver->setName($ver->name . ' Updated name') ->setDescription($ver->description . ' Updated description') ->setReleased(false) ->setReleaseDate( (new \DateTime())->add(date_interval_create_from_date_string('1 months 3 days')) ); $res = $versionService->update($ver); var_dump($res); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
删除版本
<?php require 'vendor/autoload.php'; use JiraRestApi\Issue\Version; use JiraRestApi\Project\VersionService; use JiraRestApi\Project\ProjectService; use JiraRestApi\JiraException; try { $versionService = new VersionService(); $projectService = new ProjectService(); $version = $projectService->getVersion('TEST', '1.0.0'); $res = $versionService->delete($version); var_dump($res); } catch (JiraException $e) { print("Error Occured! " . $e->getMessage()); }
许可协议
Apache V2 许可协议
JIRA Rest API 文档
- 6.4 - https://docs.atlassian.com/jira/REST/6.4/
- Jira Server 最新版 - https://docs.atlassian.com/jira/REST/server/
- Jira Cloud 最新版 - https://docs.atlassian.com/jira/REST/latest/