JIRA8-管理秘籍第三版-全-
JIRA8 管理秘籍第三版(全)
原文:
annas-archive.org/md5/46398bd27f5a55e6889d5590e2511193
译者:飞龙
前言
Atlassian Jira 是一种企业级问题跟踪系统。 它的一个关键优势是能够根据组织的需求进行适应,从前端用户界面到为第三方应用程序提供扩展其功能的平台。 然而,理解其灵活性并选择合适的应用程序通常是许多管理员面临的一项艰巨任务。 学会如何在保持整体设计简洁清晰的同时,充分利用 Jira 的强大功能,对于实施的成功和未来的增长至关重要。
通过本书,你可以充分利用有用的教程来解决实际 Jira 管理中的挑战,提供解决方案和示例。 每个教程都包含易于跟随的逐步说明和实际 Jira 应用中的插图。
本书适合谁阅读
本书面向那些定制、支持和维护 Jira 的管理员。
你需要熟悉并理解 Jira 的核心概念。 对于某些教程,基本了解 HTML、CSS、JavaScript 以及基本编程(Java 或 Groovy)也会有所帮助。
本书内容
第一章,Jira 服务器管理,包含了帮助你管理 Jira 服务器的教程,包括升级 Jira 和使用 SSL 证书保护 Jira。
第二章,为你的项目定制 Jira,包含了允许你通过自定义字段和屏幕来定制 Jira 的教程。 本章还包括高级技术,如使用脚本和第三方应用程序为 Jira 无法提供的字段添加更多控制。
第三章,Jira 工作流,涵盖了 Jira 中最强大的功能之一,并提供了工作流操作的教程,包括权限和用户输入验证。 本章还介绍了有用的第三方应用程序以及使用脚本扩展现成组件的方法。
第四章,用户管理,解释了 Jira 中如何管理用户和组。 本章从简单的教程开始,涵盖了现成的用户管理功能,并进一步包括 LDAP 集成以及各种单点登录实现等主题。
第五章,Jira 安全性,重点介绍了 Jira 提供的不同安全控制功能,包括不同级别的权限和授权控制。 本章还介绍了其他与安全相关的主题,如用户密码策略和电子签名捕获。
第六章,电子邮件与通知,解释了 Jira 的电子邮件处理系统,包括出站和入站电子邮件。 本章还介绍了 Jira 的事件系统以及如何扩展基本的事件和模板集合。
第七章,与 Jira 的集成,介绍了如何将 Jira 与其他系统集成,包括其他 Atlassian 应用程序和许多其他流行的云平台,如 Google Drive 和 GitHub。
第八章,Jira 故障排除与管理,介绍了在 Jira 中排查各种问题的方法。内容包括诊断与权限和通知相关的常见问题,以及更高级的功能,作为管理员,您可以模拟用户以更好地理解问题。
第九章,Jira Service Desk,介绍了 Jira 平台的新成员——Jira Service Desk。Jira Service Desk 使您能够将 Jira 实例转变为一个功能齐全的帮助台系统,充分利用 Jira 强大的工作流和其他定制功能。
要充分利用本书的内容。
对于安装和升级教程,您需要有最新的 Jira 8 版本,您可以直接从 Atlassian 网站下载,链接如下:
www.atlassian.com/software/jira/download
。
您可能还需要一些其他软件,包括以下内容:
-
Java SDK:您可以从
java.sun.com/javase/downloads
获取。 -
MySQL:您可以从
dev.mysql.com/downloads
获取。
对于其他教程,在各自的教程中提供了获取所需工具的详细信息。
下载示例代码文件。
您可以从您的账户下载本书的示例代码文件,网址为www.packtpub.com。如果您是从其他地方购买的本书,您可以访问www.packtpub.com/support,并注册后将文件直接通过电子邮件发送给您。
您可以按照以下步骤下载代码文件:
-
登录或注册www.packtpub.com。
-
选择“支持”标签。
-
点击“代码下载与勘误”。
-
在搜索框中输入书名,并按照屏幕上的指示操作。
文件下载后,请确保使用最新版本的工具解压或提取文件夹:
-
WinRAR/7-Zip for Windows。
-
Zipeg/iZip/UnRarX for Mac。
-
7-Zip/PeaZip for Linux。
本书的代码包也托管在 GitHub 上,网址为github.com/PacktPublishing/Jira-8-Administration-Cookbook-Third-Edition
。我们还有其他代码包,来自我们丰富的书籍和视频目录,您可以在github.com/PacktPublishing/
查看。快去看看吧!
下载彩色图片。
我们还提供了一份 PDF 文件,包含本书中使用的屏幕截图/图表的彩色图像。您可以在此下载:static.packt-cdn.com/downloads/9781838558123_ColorImages.pdf
。
使用的约定
本书中使用了许多文本约定。
CodeInText
:表示文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟网址、用户输入和 Twitter 用户名。以下是一个例子:“这是一个用于以 HTML 格式发送电子邮件的模板文件,存储在html
子目录中。”
代码块如下所示:
#disable_html_escaping()
$eventTypeName - ($issue.key) $issue.summary
当我们希望您特别注意代码块中的某一部分时,相关行或项目将以粗体显示:
<blockquote>
<p>
#if($comment.body)
$comment.body
#else
<i>No comment</i>
任何命令行输入或输出都按以下方式书写:
$ mkdir css
$ cd css
粗体:表示一个新术语、重要词汇或您在屏幕上看到的单词。例如,菜单或对话框中的单词会这样显示。以下是一个例子:“您可以通过点击通知链接来更新此默认方案的通知设置。”
警告或重要说明如下所示。
提示和技巧如下所示。
章节
在本书中,您会看到几个经常出现的标题(准备工作,如何做...,它是如何工作的...,还有更多...,以及参见)。
为了清晰地给出如何完成食谱的指示,请按照以下结构使用这些章节:
准备工作
本节告诉您在食谱中应预期什么,并描述如何设置任何所需的软件或任何前期设置。
如何做…
本节包含了执行食谱所需的步骤。
它是如何工作的…
本节通常包含对上一节内容的详细解释。
还有更多…
本节包含关于食谱的附加信息,以帮助您更深入了解该食谱。
参见
本节提供了一些有用的链接,指向食谱的其他相关信息。
联系我们
我们始终欢迎读者的反馈。
一般反馈:请发送电子邮件至feedback@packtpub.com
,并在邮件主题中注明书名。如果您对本书的任何方面有疑问,请通过questions@packtpub.com
与我们联系。
勘误:虽然我们已经尽力确保内容的准确性,但错误总是难免。如果您在本书中发现错误,敬请报告给我们。请访问www.packtpub.com/submit-errata,选择您的书籍,点击勘误提交表格链接,并填写相关信息。
盗版:如果您在互联网上发现任何形式的我们作品的非法复制品,请提供相关网址或网站名称,我们将非常感激。请通过copyright@packtpub.com
与我们联系,并提供相关链接。
如果你有兴趣成为作者:如果你在某个领域有专业知识,并且有兴趣写书或为书籍做贡献,请访问 authors.packtpub.com。
评论
请留下评论。在阅读并使用本书后,为什么不在你购买本书的网站上留下评论呢?潜在读者可以看到并利用你的公正意见做出购买决定,我们在 Packt 可以了解你对我们产品的看法,而我们的作者也能看到你对他们书籍的反馈。谢谢!
想了解更多关于 Packt 的信息,请访问 packtpub.com。
第一章:Jira 服务器管理
Atlassian Jira 是一个广泛使用的缺陷跟踪系统,全球许多公司都在使用它。与大多数企业软件不同,它的优势之一是安装和实现不需要几天或几周,而且升级和维护非常简单。
我们假设你已经知道如何安装全新的 Jira 系统。因此,我们将探讨常见的管理任务,如升级和迁移 Jira,并且我们将看看不同的选项,包括使用 Atlassian 提供的全新自动化升级工具,或者从头开始进行所有操作。我们还会向你展示一些其他有用的技巧,比如重置管理员密码,帮助你解决棘手问题。
由于 Jira 现在是一个产品系列,包括 Jira Core(即 Jira 7 之前的旧版 Jira Classic)、Jira Software(即 Jira Core 加上敏捷功能)和 Jira Service Desk(即 Jira Core 加上旧版 Jira Service Desk 插件),本书中的配方将使用 "Jira" 这一术语来指代三者中最流行的 Jira Software。
在本章中,我们将讨论以下主题:
-
安装 Jira 用于生产环境
-
使用安装程序升级 Jira
-
手动升级 Jira
-
将 Jira 迁移到另一个环境
-
设置 Jira 的上下文路径
-
设置 SSL
-
从其他应用程序安装 SSL 证书
-
重置 Jira 管理员密码
-
从 CSV 导入数据
-
在 Jira 实例之间复制配置
安装 Jira 用于生产环境
在本示例中,我们将探讨如何在生产环境中安装和设置 Jira。这包括设置一个专用用户来运行 Jira,并使用外部数据库。
我们将使用归档分发版,因为这些步骤在 Windows 和 Linux 平台上是一致的。这也会让你了解部署和运行 Jira 实例所需的确切步骤;这些步骤通常会被自动安装程序隐藏。这将为你提供后续维护和进一步配置所需的信息。
准备工作
在开始之前需要检查以下事项:
-
从
www.atlassian.com/software/jira/download
下载最新的 Jira 归档分发版,并根据你的服务器选择合适的包,例如 Linux 或 Windows。对于本示例,我们将使用 TAR.GZ 归档文件。 -
确保你的服务器环境满足 Jira 的要求,访问
confluence.atlassian.com/adminjiraserver/supported-platforms-938846830.html
查看详细信息。 -
在系统上安装 Java。撰写本文时,Jira 8 需要 Java 8(无论是 Oracle JDK 还是 OpenJDK)。你可以从
www.oracle.com/technetwork/java/javase/downloads/index.html
下载 Java。 -
确保已配置
JAVA_HOME
或JRE_HOME
环境变量。 -
确保有一个可用的数据库系统,可以在托管 Jira 的服务器上,也可以在通过网络访问的其他服务器上。本示例中,我们将使用 MySQL。如果你使用的是其他数据库,请相应地更改命令和查询。
-
下载必要的数据库驱动程序。对于 MySQL,可以从
dev.mysql.com/downloads/connector/j
下载。
如何执行此操作...
我们首先需要为 Jira 创建一个空的 MySQL 数据库:
-
在 MySQL 服务器上打开一个新的命令提示符。
-
运行以下命令(你也可以使用其他用户替代
root
,只要该用户具有创建新用户和数据库的权限):
mysql -u root -p
-
在提示时输入用户的密码。
-
通过运行以下命令为 Jira 创建一个新数据库:
create database jiradb character set utf8;
- 在数据库中为 Jira 创建一个新用户,并使用以下命令授予该用户对我们刚创建的
jiradb
数据库的访问权限:
grant all on jiradb.* to 'jirauser'@'localhost'
identified by 'jirapassword';
-
在前五个步骤中,我们创建了一个名为
jiradb
的新数据库和一个名为jirauser
的新数据库用户。稍后我们将使用这些信息将 Jira 与 MySQL 连接。下一步是安装 Jira。 -
创建一个专用用户账户来运行 Jira。如果你使用的是 Linux,请作为 root 用户或使用
sudo
运行以下命令:
useradd --create-home --comment "Dedicated
Jira account" -- shell /bin/bash jira
为了减少安全风险,最好将用户账户锁定,确保其没有登录权限。
-
在文件系统中创建一个新目录,将在此目录下安装 Jira。该目录将被称为
JIRA_INSTALL
。 -
在文件系统中创建另一个目录。此目录将用于 Jira 存储其附件、搜索索引、应用程序数据和其他信息。你可以将此目录创建在具有更大硬盘容量的其他驱动器上,例如网络驱动器(这可能会导致性能下降)。此目录将被称为
JIRA_HOME
。
最好将 JIRA_INSTALL
和 JIRA_HOME
目录分开;即 JIRA_HOME
目录不应是 JIRA_INSTALL
目录的子目录。这样将使未来的升级和维护更加方便。
-
在
JIRA_INSTALL
目录中解压 Jira 压缩文件。 -
将
JIRA_INSTALL
和JIRA_HOME
目录的所有权更改为新创建的 Jira 用户。 -
在文本编辑器中打开
JIRA_INSTALL/atlassian-jira/WEB-INF/classes/jira-application.properties
文件。 -
在此文件中找到
jira.home=
这一行。 -
复制并粘贴完整路径到
JIRA_HOME
目录,并在有#
符号时将其删除。确保使用正斜杠(/
)。以下行展示了在 Linux 系统上的样子:
jira.home=/opt/data/jira_home
Windows 使用反斜杠(\
)作为文件路径。尽管如此,在指定 jira.home
目录时,仍然应该使用正斜杠(/
)。
-
将数据库驱动程序 JAR 文件(从 准备工作 部分获得)复制到
JIRA_INSTALL/lib
目录。 -
通过在
JIRA_INSTALL/bin
目录下以 Jira 用户身份运行start-jira.sh
(适用于 Linux)或start-jira.bat
(适用于 Windows)脚本来启动 Jira。您应该能在控制台看到Tomcat
的输出,这意味着 Jira 已启动并运行。 -
Jira 带有一个安装向导,可以帮助我们完成安装的最后阶段。
-
打开浏览器并访问
http://localhost:8080
(将 localhost 替换为实际的服务器名称)。默认情况下,Jira 运行在端口8080
上。您可以通过更改JIRA_INSTALL/conf/server.xml
文件中的连接器端口值来更改此端口。 -
设置的第一步是选择如何设置 Jira。选择我自己设置选项,然后点击下一步按钮:
-
第二步是设置数据库信息。选择我的数据库(推荐用于生产环境)选项。
-
选择数据库类型选项的值。对于本教程,选择 MySQL 5.7+选项。
-
输入新建的
jiradb
数据库的详细信息:
-
点击测试连接,检查 Jira 是否能够连接到数据库。
-
如果数据库连接测试成功,点击下一步按钮继续,进入向导的下一步。
-
输入此 Jira 实例的应用程序标题值。
-
如果您希望用户能够注册帐户,选择公共;如果您只希望管理员创建帐户,选择私有。大多数使用 Jira 来跟踪内部项目的组织将需要私有模式。
-
设置基础 URL选项。基础 URL 是用户用来访问 Jira 的网址。通常,这应该是一个完全合格的域名或主机名——即不能是 localhost 或 IP 地址。
-
点击下一步,进入向导的第三步,如下图所示:
-
如果您有 Jira 许可密钥,请输入。如果没有许可密钥,您可以通过点击生成 Jira 试用许可链接并按照指示生成临时试用许可。
-
点击下一步,进入向导的第四步,如下图所示:
-
输入初始管理员帐户的详细信息。该用户帐户将可以访问 Jira 中的所有配置选项,因此请确保不要丢失其登录凭据。
-
点击下一步,进入向导的第五步和最后一步,如下图所示:
-
选择是否要现在或稍后设置外发 SMTP 服务器。如果您现在没有准备好 SMTP 服务器,可以随时回来稍后配置。
-
点击完成以完成设置过程。
您将看到以下欢迎屏幕:
这部分是设置过程的通用配置部分。您的 Jira 系统已经启动并运行。接下来,Jira 将引导您完成首次使用的入门过程。您将被要求选择使用的默认语言、上传用户头像并创建您的第一个项目。
还有更多内容...
默认情况下,Jira 设置为使用最多 768 MB 的内存。对于生产部署,您可能需要增加分配给 Jira 的内存量。您可以通过打开 JIRA_INSTALL/bin
目录中的 setenv.sh
(Linux)或 setenv.bat
(Windows)文件并更改 JVM_MAXIMUM_MEMORY
参数的值来增加内存。
例如,如果我们想将最大内存设置为 2 GB,我们将其更改为 JVM_MAXIMUM_MEMORY="2048m"
。完成此更改后,您需要重新启动 Jira。对于生产环境,建议您为 Jira JVM 分配至少 4 GB(4096 MB)的内存。首先确保您的服务器上有足够的物理内存。
如果您在组织中使用 LDAP 进行用户管理,请参考 第四章 中的 仅用于认证的 LDAP 集成 配方,位于 用户管理 部分。
下载代码包的详细步骤已在本书的 前言 中提及,请查看。本书的代码包也托管在 GitHub 上,链接为 github.com/PacktPublishing/Jira-8-Administration-Cookbook-Third-Edition
。我们还提供了来自我们丰富书籍和视频目录的其他代码包,您可以访问 github.com/PacktPublishing/
查看。
使用安装程序升级 Jira
对于 Windows 和 Linux,Atlassian 提供了一个安装程序包,可以指导您完成升级过程。安装程序将自动检测您当前的 Jira 安装并执行所有必要的任务,将其升级到目标版本。
在本章节中,我们将向您展示如何使用标准的 Jira 安装程序来升级您的 Jira 实例。
准备就绪
由于 Jira 安装程序仅适用于 Windows 和 Linux 的独立安装,因此我们将在本章节中通过 Windows 上的安装程序进行演示:
-
检查升级说明,了解任何特殊的操作指南以及目标 Jira 版本,确保您可以进行直接升级。
-
确保您有有效的 Jira 许可证。
-
验证您的当前主机环境是否与目标 Jira 版本兼容,包括 Java 版本、数据库和操作系统。
-
验证您的操作环境是否与目标 Jira 版本兼容,特别是浏览器的要求。
-
确保您使用的插件与新版本的 Jira 兼容。
-
下载目标 Jira 版本的安装包。
您可以使用 Universal Plugin Manager 的 Jira 更新检查工具来检查插件的兼容性。
如何操作...
使用以下步骤使用安装程序升级您的 Jira 系统:
-
关闭当前的 Jira 服务,例如通过运行
stop-jira.bat
脚本。 -
使用其原生备份工具备份 Jira 数据库。
-
启动安装程序并选择升级现有 JIRA 安装选项。
-
现在,选择当前安装了 Jira 的目录:
- 选中备份 JIRA 主目录选项,然后点击下一步按钮。
如果你的 JIRA_HOME
目录很大,你可能需要手动备份它或删除一些 cache
和 tmp
文件夹,因为安装程序备份这些内容会花费很长时间。
- 查看升级检查列表并单击升级按钮:
-
等待安装程序完成升级过程。升级完成后,安装程序将自动启动 Jira。
-
更新任何插件后,Jira 成功启动。
安装程序将检测并提供位于 JIRA_INSTALL
目录中的自定义文件列表,您需要在升级后手动复制这些文件。
另请参阅
如果无法使用安装程序升级 Jira,请参阅手动升级 Jira说明。
手动升级 Jira
如果您无法使用安装程序升级 Jira,例如如果您在没有安装程序二进制文件的操作系统上托管 Jira 或在云平台上托管 Jira,则可以使用手动升级方法来升级您的 Jira 实例。
准备工作
手动升级 Jira 实例所需的任务与使用安装程序的任务相同。请参考前面的说明以了解涉及的常见任务。由于安装程序在升级 Jira 时自动化了许多备份任务,因此你需要执行以下操作:
-
使用其原生备份工具备份 Jira 数据库。
-
备份
JIRA_INSTALL
目录。 -
备份
JIRA_HOME
目录。 -
从 Jira 的系统信息页面中获取
JIRA_INSTALL
目录中所有自定义文件的列表。
如何操作...
要手动升级你的 Jira 实例,请执行以下步骤:
-
关闭当前的 Jira 服务。
-
在不同的目录中安装新版本的 Jira。
-
编辑位于
JIRA_INSTALL/atlassian-jira/WEB-INF/classes
目录下的jira-application.properties
文件,将其指向现有的JIRA_HOME
目录。 -
复制任何从旧的 Jira 实例修改过的文件到新的实例中。
-
启动新的 Jira 实例。
-
成功启动 Jira 后,请更新插件。
-
删除先前的安装目录以避免混淆。
工作原理...
我们在这里做的基本上是设置了一个新的 Jira 实例,并将其指向旧的 Jira 实例的数据。当我们启动新的 Jira 实例时,它将通过从 JIRA_HOME
目录中的 dbconfig.xml
文件读取来连接到现有的 Jira 数据库,并执行就地升级以进行所有必要的模式更改。
将 Jira 迁移到另一个环境
现在我们已经完成了 Jira 实例的升级,我们将探讨如何将 Jira 实例迁移到另一个服务器环境。这是在将应用程序迁移到虚拟化环境或数据中心时常见的使用场景。
准备工作
在开始本步骤之前,需要检查以下内容:
-
确保你拥有有效的 Jira 许可证。
-
检查你的新环境是否符合 Jira 的系统要求。
-
确保旧的和新的 Jira 实例具有相同的大版本或小版本。如果你打算在新环境中运行更新版本的 Jira,建议在迁移成功后进行升级。
系统迁移可能会对用户造成很大的干扰。确保你已通知用户,并为回滚分配了足够的时间。
如何操作...
要将现有的 Jira 实例迁移到另一个服务器,执行以下步骤:
-
在新的环境中下载并安装一个全新的 Jira 实例,使用空数据库。
-
记下系统信息页面中列出的已修改文件和已删除文件,以下截图显示了一个示例:
-
关闭当前的 Jira 实例。
-
使用数据库的原生备份工具备份当前的 Jira 数据库。
-
备份你当前的
JIRA_HOME
目录。 -
将你的新 Jira 下线。
-
复制你的
JIRA_HOME
备份并用它替换新的JIRA_HOME
目录。 -
使用新的 Jira 数据库详细信息更新
dbconfig.xml
文件。 -
复制你的数据库备份并恢复新的 Jira 数据库。
-
启动新的 Jira 实例。
-
对第 2 步中的新 Jira 实例应用相同的更改。
设置 Jira 的上下文路径
如果你在同一域上运行多个 Web 应用程序,你可能需要为 Jira 设置一个上下文路径——例如,http://example.com/jira
,其中/jira
是上下文路径。
如何操作...
执行以下步骤来为 Jira 设置上下文路径:
-
如果 Jira 正在运行,请先关闭 Jira。
-
在文本编辑器中打开
JIRA_INSTALL/conf/server.xml
。 -
找到以下行并为
path
属性输入上下文路径——例如,path="/jira"
:
<Context path="/jira"docBase="${catalina.home}
/atlassian-jira" reloadable="false"
useHttpOnly="true">
-
保存文件并重启 Jira。如果你在 Jira 安装之后进行此操作,你需要更新 Jira 的基本 URL 选项,以便其链接反映这一变化。
-
以管理员身份登录 Jira。
-
导航到管理 > 系统 > 常规配置。
-
点击编辑设置按钮。
-
在基本 URL字段中输入包括上下文路径的 Jira 完全合格 URL。
-
点击更新以应用更改。
在你完成所有设置后,你将能够通过新的上下文路径访问 Jira,所有链接,包括来自 Jira 通知邮件的链接,将在 URL 中显示上下文路径。
设置 SSL
默认情况下,Jira 使用标准的未加密 HTTP 协议运行。如果你在安全的环境中运行 Jira,如内部网络,这种方式是可以接受的。但是,如果你计划通过互联网开放 Jira 的访问,你需要通过启用SSL(HTTPS)加密敏感数据(如发送的用户名和密码)来增强安全性。
本教程描述了如何在 Jira Tomcat 应用服务器上安装 SSL。如果你在 Jira 前面有像 Apache 这样的 HTTP web 服务器,你也可以选择在 web 服务器上安装 SSL 证书。
准备工作
在开始本教程之前,你需要设置以下内容:
- 获取有效的 SSL 证书:你可以使用自签名证书,或者从证书颁发机构(CA)如Verisign获取一个证书。使用自签名证书时,当用户首次访问网站时会显示警告信息,如下所示的截图所示:
-
确保
JAVA_HOME
环境变量已正确设置。 -
确保你知道 Jira 使用的是哪个 JDK/JRE。你可以从 Jira 中的系统信息页面找到此信息,查找
java.home
属性。 -
确保你的 JRE/JDK 的
bin
目录已添加到PATH
环境变量中,keytool
命令将输出其使用方法,如下图所示:
现在让我们开始本教程的步骤。
如何操作...
执行以下步骤导入 SSL 证书:
-
打开命令窗口并进入证书文件所在的目录。
-
通过运行
keytool -genkey -alias jira -keyalg RSA -keystore $JIRA_HOME/jira.jks
命令,为 Jira 生成一个Java KeyStore(JKS)。 -
通过运行
keytool -import -alias jira -keystore $JIRA_HOME/jira.jks -file file.crt
命令,将证书导入到 KeyStore 存储库中,其中file.crt
是证书文件。 -
打开位于
JIRA_INSTALL/conf
目录中的server.xml
文件并使用文本编辑器编辑。 -
定位并取消注释以下 XML 配置片段:
<Connector port="8443"
maxHttpHeaderSize="8192" SSLEnabled="true"
maxThreads="150"
minSpareThreads="25" maxSpareThreads="75"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false"
sslProtocol="TLS" useBodyEncodingForURI="true"/>
- 向
Connector
标签添加一些新的属性并保存文件,如下所示:
keystoreFile="PATH_TO_YOUR_KEYSTORE"
keystorePass="PASSWORD_FOR_YOUR_KEYSTORE"
keyAlias="jira"
keystoreType="JKS"
- 重启 Jira 以应用更改。
它是如何工作的...
我们首先使用 Java 的 keytool 工具为 Jira 创建了一个新的 Java KeyStore 存储库来存储其 SSL 证书。在此步骤中,系统会提示你提供关于存储库的信息以及用于访问 KeyStore 存储库的密码。
不要忘记 KeyStore 存储库的密码。
在创建了 KeyStore 存储库后,我们导入了证书(然后启用了一个额外的连接器来监听 HTTPS 连接),通过取消注释连接器的 XML 标签。我们还向标签中添加了新的属性,以便 Tomcat 知道我们的新 KeyStore 存储库在哪里,并且如何访问它以获取证书。
如果您希望将 HTTPS 运行在更常见的端口443
上,而不是默认的端口8443
,您还可以更改连接器的端口号,最终的 XML 片段可能如下所示:
<Connector port="443"
maxHttpHeaderSize="8192" SSLEnabled="true" maxThreads="150" minSpareThreads="25"
maxSpareThreads="75" enableLookups="false"
disableUploadTimeout="true" acceptCount="100"
scheme="https" secure="true" clientAuth="false"
sslProtocol="TLS" useBodyEncodingForURI="true"
keystoreFile="/opt/jira/jira.jks"
keystorePass="changeme"
keyAlias="jira" keystoreType="JKS"/>
还有更多内容...
此时,用户可以通过 HTTP 和 HTTPS 访问 Jira,您需要配置 Jira,以便自动将所有 HTTP 流量重定向到 HTTPS。Jira 附带了一个方便的配置工具,帮助您完成此配置。
在尝试本教程之前,您应先确保 HTTPS 配置正常工作。
执行以下步骤:
-
打开命令提示符并进入
JIRA_INSTALL/bin
目录。 -
根据您的操作系统,运行
config.bat
(Windows)或config.sh
(Linux / OS X)文件。 -
在 JIRA 配置工具窗口中选择Web Server选项卡。
-
为Profile选择HTTP 和 HTTPS(将 HTTP 重定向到 HTTPS)选项。
-
点击窗口底部的保存按钮,如以下截图所示。
-
重启 Jira 以应用更改:
如果无法使用 JIRA 配置工具,您可以按照以下步骤手动设置配置:
-
打开位于
JIRA_INSTALL/atlassian-jira/WEB-INF
目录下的web.xml
文件。 -
在文件末尾添加以下 XML 片段,紧接在
</webapp>
标签之前:
<security-constraint>
<display-name>HTTP to HTTPs Redirection</display-name>
<web-resource-collection>
<web-resource-name>all-except-
attachments</web-resource-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspa</url-pattern>
<url-pattern>/browse/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
- 重启 Jira 以应用更改。
另见
有关将 Jira 连接到运行在 SSL 上的其他应用程序的信息,请参考下一个教程。
安装来自其他应用程序的 SSL 证书
您可能需要将 Jira 连接到其他服务,如 LDAP、邮件服务器和其他网站。这些服务通常使用 SSL。在这种情况下,连接将失败,您将在 Jira 日志文件中看到以下错误:
javax.net.ssl.SSLHandshakeException:
sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification
path to requested target
准备工作
在本教程中,我们将使用 Java 的 keytool 工具,确保您已完成以下配置:
-
从目标系统获取所需的 SSL 证书。
-
确保
JAVA_HOME
环境变量已正确设置。 -
确保您知道 Jira 正在使用哪个 JDK/JRE。您可以在系统信息页面找到此信息,查找
java.home
属性。 -
确保将 JRE/JDK 的
bin
目录添加到PATH
环境变量中,keytool
命令将输出其用法。 -
获取 Jira 使用的 Java 信任库的密码。
如何操作...
在本教程中,假设我们希望将 Jira 连接到一个运行在 SSL 上的 LDAP 服务器。执行以下步骤,将其设置为 Jira 中的受信任站点:
-
打开命令提示符并进入存放证书文件的目录。
-
通过运行
keytool -import -alias tomcat -file file.cer $JAVA_HOME/jre/lib/security/cacertscommand
将证书导入信任库,其中file.cer
为证书文件。 -
重启 Jira 以应用更改。
它是如何工作的...
当 Jira 尝试连接到一个 SSL 保护的服务时,它会首先检查目标服务的证书是否可信。这是通过检查证书是否存在于所谓的 Java 信任存储中来完成的。如果证书不存在,连接将失败。
信任存储是一个特殊的 KeyStore 库,通常称为cacerts
,并位于服务器的$JAVA_HOME/lib/security
目录中。
我们使用了keytool
工具将证书导入到本地信任存储中,这样目标服务将被注册为受信任的服务,允许 Jira 成功连接到该服务。
重置 Jira 管理员密码
有时你可能会忘记或丢失 Jira 管理员或 Jira 系统管理员权限账户的密码,而且无法通过密码重置选项找回。例如,假设 Jira 没有配置 SMTP 服务器,或者你从数据备份恢复了 Jira 并不知道账户和/或密码。在这些情况下,你需要直接在数据库中重置管理员密码。
此方法仅适用于使用默认内部用户目录选项的 Jira 实例。外部用户管理(如 LDAP)将无法与此方法一起使用。
准备工作
由于我们将重置存储在 Jira 数据库中的密码,请确保你执行以下操作:
-
通过命令行或 GUI 连接到 Jira 数据库。
-
更新 Jira 数据库记录。
如何操作...
假设我们使用默认的mysql
命令行工具和 MySQL 作为 Jira 的后端数据库。如果你使用的是其他数据库,可能需要相应地更改以下 SQL 语句:
-
通过运行
mysql -u jirauser -p
命令使用客户端工具连接到 Jira 数据库,其中jirauser
是 Jira 用来访问 Jira 数据库的用户名。 -
你可以从
JIRA_HOME
中的dbconfig.xml
文件找到 Jira 的数据库详细信息。 -
通过运行
use jiradb
命令切换到 Jira 数据库,其中jiradb
是 Jira 数据库的名称。 -
使用以下 SQL 语句确定具有 Jira 系统管理员全局权限的组:
select perm_parameter from
schemepermissions where PERMISSION=44;
- 通过运行以下 SQL 语句查找属于前一步骤中返回的组的用户,其中
jira-administrators
是从前一步骤返回的组:
select child_name, directory_id
from cwd_membership where
parent_name='jira-administrators';
jira-administrators
组是管理员默认所属的组。如果你自定义了权限配置,可能会有不同的组。用户名的表列为child-name
。
- 使用以下 SQL 语句在数据库中重置用户的密码,其中
admin
是前一步骤中返回的用户:
update cwd_user set
credential='uQieO/1CGMUIXXftw3ynrsaYLShI+
GTcPS4LdUGWbIusFvHPfUzD7
CZvms6yMMvA8I7FViHVEqr6Mj4pCLKAFQ==' where
user_name='admin';
- 重启 Jira 以应用更改。
它是如何工作的...
使用 Jira 的内部用户目录时,所有用户和组数据都会存储在 Jira 数据库中。值44
是 Jira 系统管理员全局权限的 ID。
如果你不知道哪些组或用户被授予 Jira 系统管理员全局权限,你首先需要通过步骤 4 和 5 找到这些信息。否则,你可以跳到步骤 6 来重置密码。
Jira 的用户密码存储在cwd_user
表中。由于 Jira 只存储密码的哈希值,我们将用户的管理员密码哈希值更改为uQieO/1CGMUIXXftw3ynrsaYLShI+GTcPS4LdUGWbIusFvHPfUzD7CZvms6yMMvA8I7FViHVEqr6Mj4pCLKAFQ==
,这是sphere
的 UTF-8 编码哈希值。
从 CSV 导入数据
经常需要将其他系统的数据导入 Jira。例如,你可能想要迁移来自旧的缺陷跟踪系统的数据,或者如果你从其他系统中获得数据,可能希望使用这些输出填充你的项目。
由于系统通常有自己的数据结构,因此数据迁移通常不是这么简单。不过,好消息是,大多数系统都可以导出 CSV 格式的数据(或者是 Excel 格式,可以很容易地转换为 CSV 格式);我们将在这个步骤中使用 CSV 作为将数据导入 Jira 的方式。
准备工作
导入数据到 Jira 时,最重要的是准备好输入数据文件,并确保其格式正确且包含所有必要的信息。为了帮助导入器,记住以下几点:
-
删除任何与数据无关的内容,特别是如果你是从电子表格中创建了 CSV 文件,这有助于减小文件大小。
-
如果你的文件包含需要导入到字段中的用户(例如受指派人),确保使用他们的用户名或电子邮件地址,这些信息可以与 Jira 中的对应账户匹配。
-
如果你的文件包含需要导入到字段中的日期(例如
到期日期
),确保它们都使用相同的日期格式进行格式化。这是为了确保 Jira 能够一致地处理日期值。
如何操作...
要从其他系统导入数据,执行以下步骤:
-
以管理员身份登录 Jira。
-
从顶部选择项目菜单,然后选择导入外部项目选项。
-
选择CSV选项。然而,如果你在列表中看到了你的系统,可以选择该系统。使用特定系统的导入工具与 CSV 导入器的过程大致相同,只是会有一些小的差异。
-
选择 CSV 文件作为CSV 源文件字段。如果这是你第一次进行导入,请不要选择使用现有配置选项。我们将在导入结束时生成配置,并且你可以使用此配置来加快未来的导入。
-
如果你的文件使用不同的文件编码或使用除逗号(
,
)之外的字符作为分隔符,请展开高级选项。点击下一步按钮继续向导的第 2 步:
- 选择要将数据导入到的项目。如果没有项目,可以选择选择新建选项并即时创建一个项目。
一般来说,最好事先创建项目,以确保其配置了正确的配置方案,例如工作流和字段。
- 验证 CSV 文件中使用的新用户电子邮件后缀和日期格式值。这将确保诸如日期之类的数据在导入时能够正确解析,并保存在 Jira 的日期字段中,例如
到期日期
。
-
选择并映射 CSV 列到 Jira 字段。某些字段,例如摘要字段,必须在文件中有对应的列,否则 Jira 将不允许你继续。如果你不想映射某一列,可以选择不映射此字段选项。
-
选择映射字段值选项,用于任何映射到选定列表类型字段的列。这样,你可以将 CSV 文件列中的单个值映射到 Jira 中可用的选项。除非你确定文件内容可以精确映射到 Jira 字段选项,否则最好手动验证;否则,可能会由于例如大小写敏感问题导致重复值。
-
如果选择映射字段值,请检查所有列出的值,并将它们映射到 Jira 中相应的字段选项。如果某个值没有选项,你可以输入所需的选项,Jira 会创建该选项。
-
点击开始导入按钮开始将数据导入到 Jira 中:
- 导入过程完成后,检查结果。如果导入失败,你可以点击下载详细日志链接,获取完整的导入日志。你也可以点击保存配置链接,获取映射文件的副本,以便下次导入时,不必从头开始重新映射。
还有更多内容...
使用 CSV 文件将自定义数据导入到 Jira 是最灵活的方法,因为许多系统可以将其数据导出为 CSV 格式。然而,正如你已经注意到的,Jira 提供了多个为各种系统设计的专用导入工具。这些导入工具通常具有一些附加功能,有助于数据导入。Atlassian 市场网站也提供了许多第三方创建的导入工具。如果你在现成的导入工具中没有找到你的系统,确保在市场中进行搜索,看看是否有人已经为其创建了导入工具。
在 Jira 实例之间复制配置设置
如果您有一个受控的 IT 环境,其中更改需要通过开发、测试/暂存和生产过程,那么您无疑知道在不同环境之间推广 Jira 配置更改是多么痛苦。由于 Jira 未提供原生的配置导出功能,所有更改需要手动应用到每个环境,这既费时又容易出错。
在本教程中,我们将使用一个专业工具,帮助简化这一过程。
准备工作
对于本教程,我们需要在源 Jira 实例和目标 Jira 实例上都安装 Jira 配置管理器插件。您可以直接从通用插件管理器安装,或通过以下链接下载:marketplace.atlassian.com/plugins/com.botronsoft.jira.configurationmanager
。
如何操作...
Jira 配置管理器插件要求您首先创建一个快照。快照包含所有您希望复制到另一个 Jira 实例的配置设置。
您可以创建两种类型的快照:
-
系统:这包括 Jira 中的所有配置。
-
项目:这仅包括选定项目所需的配置。
按照以下步骤创建配置快照:
-
导航到管理 > 配置管理 > 快照。
-
点击“添加快照”按钮。
-
选择创建系统配置或项目配置快照。
-
输入快照的名称。
-
点击创建按钮。以下截图展示了我们创建的快照的详细信息:
创建了快照后,我们有几种方式可以将更改推广并部署到另一个 Jira 实例。我们可以下载快照 ZIP 文件并上传,或者通过应用链接将两个 Jira 实例连接起来并远程加载快照。在本教程中,我们将使用快照文件选项。请按照以下步骤部署快照:
-
以管理员身份登录到另一个 Jira 实例。
-
导航到管理 > 配置管理 > 部署。
-
选择从快照文件选项。
-
选择快照 ZIP 文件。
-
点击部署链接以开始部署。
插件将引导您完成一个部署向导,在此过程中它会分析快照的内容并确定当前的 Jira 系统是否满足所有必要的要求。例如,在以下截图中,它已经通知我们存在插件版本不匹配的问题:
在插件确定所有要求都已满足后,它将提供一个简要总结,列出所有将要应用的变更(如下图所示)。这是一个很好的时机,可以检查变更列表,确保我们不会不小心引入不必要的变更,如下图所示:
如果一切看起来正常,我们可以完成配置变更的迁移,并将其部署到目标实例。
第二章:为你的项目自定义 Jira
像 Atlassian Jira 这样的信息系统的价值取决于输入其中的数据,因此不难理解,Jira 在允许你自定义字段和屏幕时非常灵活。Jira 提供了一系列默认字段,帮助你快速启动,同时也允许你添加自己的字段,这些自定义字段可以满足你独特的需求。
在本章中,我们不仅会学习如何管理 Jira 中的这些自定义字段,还会了解如何通过脚本编写,创建具有自己业务逻辑的全新自定义字段类型。
在本章中,我们将讨论以下主题:
-
为项目设置不同的缺陷类型
-
使某个字段成为必填项
-
使指派字段成为必填项
-
隐藏字段
-
创建新的字段配置
-
为你的项目设置自定义屏幕
-
移除选择列表中的“无”选项
-
为自定义字段添加帮助提示
-
使用 JavaScript 与自定义字段
-
为字段设置默认值
-
为字段添加权限
-
创建你自己的自定义字段类型
为项目设置不同的缺陷类型
Jira 默认提供了许多专为软件项目管理设计的缺陷类型。然而,随着时间推移,你可能会发现这些缺陷类型并不适用于所有项目,而你已经添加了自己的缺陷类型。在本节中,我们将学习如何管理缺陷类型,以便每个项目可以有自己的缺陷类型集合。
如何操作...
按照以下步骤设置特定于项目的缺陷类型列表:
-
使用具有 Jira 管理员权限的用户登录 Jira。
-
导航到“管理”>“缺陷”>“缺陷类型方案”。
-
点击“添加缺陷类型方案”按钮。
-
输入新的缺陷类型方案的名称。
-
将缺陷类型从右侧拖动到左侧,以将其添加到方案中。
-
选择默认缺陷类型。
-
点击“保存”按钮以创建新的方案,如下图所示:
在你创建了新的缺陷类型方案后,你需要将其应用到那些你希望限制缺陷类型选择的项目中:
-
点击新的缺陷类型方案的关联链接。
-
选择你希望将该方案应用到的项目。
-
点击“关联”以更改所选项目的缺陷类型方案。
如果项目中存在一些缺陷类型不在新的缺陷类型方案中,Jira 会引导你完成迁移过程,你可以在此过程中更新所有受影响的缺陷类型。
使某个字段成为必填项
必填字段,如“概要”和“缺陷类型”,旁边会有一个红色小星号,这意味着在创建或更新缺陷时必须填写这些字段。这是确保用户不会遗漏填写重要信息的好方法。
在本教程中,我们将展示如何通过字段配置使你选择的任何字段成为必填字段。字段配置控制字段的行为;这包括字段的强制要求、可见性、渲染器和描述。
如何操作...
按照以下步骤操作以使字段在 Jira 中成为必填字段:
-
使用具有 Jira 管理员权限的用户登录 Jira。
-
导航到 Administration > Issues > Field Configurations。
-
点击项目和问题类型使用的字段配置的 Configurelink。
-
点击所需字段的 Requiredlink,以使其成为必填字段,例如 Due Date。
一旦你将字段标记为必填字段,例如我们这个案例中的 Due Date,在创建或编辑问题时,Jira 会确保该字段输入了一个值,如下图所示:
现在我们将看看这些步骤是如何工作的。
它是如何工作的...
当字段被标记为必填时,Jira 会检查在你更新问题(例如编辑或在工作流转换期间)时该字段是否有值。即使该字段未出现在屏幕上,验证仍会被应用,因此请确保不要在屏幕上设置不需要的字段;否则,用户将无法完成操作。
某些字段,例如 Assignee 和 Due Date,要求用户具有特定的权限才能进行更新。如果用户没有必要的权限,验证将失败,并阻止用户完成操作。
还有更多...
点击 Optional 链接将使该字段变为非必填字段。某些字段,例如 Summary 和 Issue Type,必须是必填的。
另请参见
请参考 Making the Assignee field required 教程,了解如何禁用未分配选项。
将 Assignee 字段设置为必填字段
默认情况下,Assignee 字段具有未分配选项,这相当于将该字段设置为可选。如果查看字段配置,你会发现你无法将 Assignee 字段设置为必填字段,因为没有可用的选项。
在本教程中,我们将展示如何禁用未分配选项,从而使 Assignee 成为必填字段。
准备工作
请注意,以下条件是禁用每个项目的未分配选项所必需的:
-
当前在 Assignee 字段使用该选项的问题—你需要将所有 Assignee 值为 Unassigned 的问题更改为其他值。
-
项目将 Unassigned 设置为默认 Assignee—你需要更改项目中“用户和角色”部分的默认 Assignee 设置。
如何操作...
按照以下步骤操作以禁用未分配选项:
-
使用具有 Jira 管理员权限的用户登录 Jira。
-
导航到 Administration > System。
-
点击 Edit Settings 按钮。
-
向下滚动并选择 OFFoption 以禁用 Allow unassigned issues。
-
点击 更新 来应用更改。
看一下下面的截图:
如你所见,一旦禁用该选项,问题将无法再被解除分配。
隐藏字段视图
有时候某个字段不再需要使用。遇到这种情况时,你可以选择隐藏该字段,而不是删除它,因为删除字段会同时删除所有数据。如果之后你需要再次使用该字段,你可以简单地取消隐藏它,并且保留所有数据。
在此方案中,我们将隐藏 优先级 和 到期日期 字段。
如何操作...
按照以下步骤在 Jira 中隐藏字段:
-
以具有 Jira 管理员权限的用户身份登录 Jira。
-
进入 管理 > 问题 > 字段配置。
-
点击该项目和问题类型使用的字段配置的 配置 链接。
-
点击 隐藏 链接来隐藏 优先级 和 到期日期 字段。
点击 显示 链接将展示该字段。你不应该隐藏必填字段。
还有更多...
使用字段配置是隐藏字段的一种方法。还有两种其他方法可以让字段在视图中隐藏:
-
从屏幕上移除字段。注意,对于查看屏幕,像摘要和描述这样的默认字段无论是否被放置在屏幕上,都会显示出来。
-
限制字段配置方案,使其不适用于项目/问题类型上下文。你可以通过点击自定义字段的配置并取消选择你不希望该字段可用的 项目/问题 类型来实现。
使用字段配置隐藏字段将使其在适用的项目和问题类型的所有屏幕中都被隐藏,因此,如果你只想在特定的屏幕上隐藏字段,不应使用字段配置,而应该简单地将字段从相应的屏幕中移除。例如,如果你想在问题创建后将字段设为只读,可以简单地将其从分配给编辑问题操作的屏幕中移除。移除字段时要格外小心;与字段配置不同,移除屏幕字段时没有任何安全措施来防止你移除必填字段。因此,如果该屏幕用于创建问题,那么用户将无法提供缺失字段的值,从而导致无法继续操作。
创建新的字段配置
你可以通过字段配置来设置字段的行为。Jira 不仅提供了一个默认的字段配置,默认应用于所有项目和问题类型,而且它还允许你创建自己的字段配置,这样你就可以选择将字段配置应用到特定的项目和/或问题类型。
在这个方案中,我们将使 描述 和 指派人 字段仅对 Bug 问题类型是必填的。
如何操作...
设置一个新的字段配置是一个三步过程。第一步是创建新的字段配置:
-
使用具有 Jira 管理员权限的用户登录 Jira。
-
导航至 管理 > 问题 > 字段配置。
-
点击 添加字段配置按钮,并命名为
HUM: Bug 字段配置
,点击 添加。 -
点击 描述 和 负责人 字段的必填链接。
第二步是将新的字段配置与新的字段配置方案关联:
-
导航至 管理 > 问题 > 字段配置方案。
-
点击 添加字段配置方案按钮 并将其命名为
HUM: Bug 字段配置方案
。点击 添加。 -
点击 将问题类型与字段配置关联 按钮。
-
选择Bug作为 问题类型,HUM: Bug 字段配置作为 字段配置,然后点击添加,如下图所示:
最后一步是将新的 字段配置 方案应用到我们的项目中:
-
导航至 管理 > 项目。
-
从列表中选择一个项目。
-
从左侧面板选择字段。
-
导航至 操作 > 使用不同方案。
-
选择新的
HUM: Bug 字段配置方案
选项,然后点击 关联。
为您的项目设置自定义屏幕
Jira 默认提供三个屏幕——默认屏幕、解决问题屏幕和工作流屏幕。
在本教程中,我们将学习如何从零开始创建一个新屏幕,然后在创建新任务问题时使其显示。
如何操作...
屏幕是 Jira 中最复杂的配置之一。要创建一个新屏幕并应用它,通常需要配置多个方案。因此,我们将这些步骤分为三个逻辑组。
首先,我们需要创建新的屏幕:
-
使用具有 Jira 管理员权限的用户登录 Jira。
-
导航至 管理 > 问题 > 屏幕。
-
点击 添加屏幕 按钮,并将新屏幕命名为
HUM: Scrum 任务创建屏幕
。点击 添加。 -
选择并添加 概要、问题类型、描述、负责人、描述和优先级字段,如下图所示:
第二步,我们需要将新的任务创建屏幕分配给创建问题操作:
-
导航至 管理 > 问题 > 屏幕方案。
-
点击 添加屏幕方案 按钮,命名新屏幕为
HUM: Scrum 任务屏幕方案
,选择 默认屏幕 作为 默认屏幕 选项,然后点击 添加。 -
点击 将问题操作与屏幕关联 按钮。
-
选择创建问题作为 问题操作,HUM: Scrum 任务创建屏幕作为 屏幕,然后点击 添加,如下图所示:
第三步,我们需要将新的 任务屏幕方案
分配给任务问题类型:
-
导航至 管理 > 问题 > 问题类型屏幕方案。
-
点击添加问题类型屏幕方案按钮,并将新屏幕命名为
HUM: Scrum Task Issue Type Screen Scheme
。 -
选择默认屏幕方案作为 屏幕方案 选项,然后点击添加。
-
点击将问题类型与屏幕方案关联按钮。
-
选择问题类型为 Task,屏幕方案为 HUM: Scrum Task Screen Scheme,然后点击添加,如下图所示:
最后,我们需要将新的 screen Task Issue Type Screen Scheme
应用于项目:
-
导航到 管理 > 项目。
-
从列表中选择一个项目。
-
从左侧窗格中选择 Screens。
-
导航到 操作 > 使用不同的方案。
-
选择新的任务问题类型屏幕方案,然后点击关联。
它是如何工作的...
屏幕是 Jira 配置中最复杂的部分之一。当我们创建一个新屏幕时,我们需要将它与三个问题操作之一(创建、编辑和查看)通过屏幕方案进行关联。在我们的方案中,我们将新的任务创建屏幕与“创建问题”操作进行了关联。
屏幕方案需要与问题类型关联,这样 Jira 才能根据选择的问题类型来确定使用哪个屏幕方案。
最后,我们将问题类型屏幕方案应用于项目,因此只有选定的项目会使用关联的屏幕。现在看看下面的示意图:
它提供了屏幕、字段及其各种方案之间关系的全面示例。
移除选择列表的 None 选项
自定义字段类型,如选择列表(单选和多选),都带有None选项,唯一移除它的方法是将该字段设为必填。虽然这有其道理,但追踪每个字段和配置可能会很麻烦。
在这个方案中,我们将从所有单选列表自定义字段中移除“None”选项。
正在准备中
由于我们将修改 Jira 中的物理文件,你可能需要对我们修改的文件进行备份。
如何操作...
Jira 使用 Velocity 模板来渲染自定义字段。这些模板大多是 HTML 格式,并包含一些特殊符号。你可以在 JIRA_INSTALL/atlassian-jira/WEB-INF/classes/templates/plugins/fields
目录下找到所有这些文件,编辑视图模板位于 edit
子目录中:
- 在文本编辑器中打开
edit-select.vm
文件(位于前述目录),并移除以下代码片段:
#if (!$fieldLayoutItem || $fieldLayoutItem.required == false)
<option value="-1">
$i18n.getText("common.words.none")
</option>
#else
#if ( !$configs.default )
<option value="">
$i18n.getText("common.words.none")
</option>
#end
#end
- 保存文件并重启 Jira。确保不要更改其他任何行。
你可以通过编辑相应的文件(例如,edit-multiselect.vm
)从其他自定义字段类型(如多选)中移除“None”选项。
它是如何工作的...
Velocity .vm
模板文件是 Jira 用来渲染自定义字段 HTML 的文件。我们移除的代码片段是用来显示“无”选项的。请注意,通过更改模板,我们会移除 Jira 中所有单选自定义字段的“无”选项。如果你只想为某个自定义字段或仅针对特定项目移除无选项,请参考使用 JavaScript 与自定义字段教程。
向自定义字段添加帮助提示
新用户在使用 Jira 时,填写字段,尤其是自定义字段,常常会感到困惑。因此,作为管理员,你需要提供有用的提示和描述,解释一些字段的用途。
在本教程中,我们将为一个名为团队的客户字段添加帮助图标。你可以将此教程应用于 Jira 中任何自定义字段。
如何操作...
按照以下步骤将帮助提示添加到自定义字段:
-
使用具有 Jira 管理员权限的用户登录 Jira。
-
导航到管理 > 问题 > 自定义字段。
-
点击自定义字段的编辑链接。
-
将以下 HTML 代码片段输入到描述文本框中,然后点击更新。你可能需要将
href
的值替换为包含帮助文本的实际页面:
Need help to work out assignment?
<a class="help-lnk" href="/secure/ShowConstantsHelp.jspa?decorator=popup#Teams"
data-helplink="local" target="_blank">
<span class="aui-icon aui-icon-small aui-iconfont-help"></span>
</a>
以下截图显示了我们新的帮助图标:
接下来,我们将逐步讲解这些步骤的工作原理。
工作原理...
Jira 允许我们使用任何有效的 HTML 来进行自定义字段描述,因此我们添加了一些简单的文本和一个anchor
标签,链接到包含帮助信息的 HTML 页面。我们还添加了一个带有适当样式类的span
标签,以便使用与问题类型和优先级字段相同的问号图标。
data-helplink="local"
属性用于anchor
标签,确保当用户点击帮助图标时,帮助页面将在单独的页面中打开,而不是重定向当前页面。
由于自定义字段的描述会按原样呈现,确保你验证 HTML 内容;例如,关闭所有 HTML 标签。
还有更多...
通常,我们将描述直接放入自定义字段的描述文本框中,如演示所示。你也可以将描述放入字段配置设置中,比如隐藏某个字段。这样做有以下优点:
-
你可以为不同的项目/问题类型上下文提供不同的帮助文本。
-
你可以为非自定义字段设置帮助文本,例如摘要和描述。
按照以下步骤在字段配置中设置字段描述:
-
导航到管理 > 问题 > 字段配置。
-
点击项目和问题类型使用的字段配置的配置链接。
-
点击字段的编辑链接。
-
将 HTML 代码片段输入到描述字段中,并点击更新。
另见
请参考 使用 JavaScript 与自定义字段 的教程,了解更多你可以在自定义字段描述中使用的技巧。
使用 JavaScript 与自定义字段
可以使用 JavaScript 来操作自定义字段的 HTML。通过在自定义字段的描述中添加 JavaScript 代码,并将代码包裹在 <script>
标签中,Jira 将在渲染自定义字段时执行这些代码。
在本教程中,我们将学习另一种方法,来从下拉列表类型的自定义字段中移除 None 选项。
准备工作
本教程使用了 jQuery JavaScript 库,Jira 中已捆绑此库。如果你不熟悉 jQuery,可以访问 jquery.com
查阅文档。
我们还需要在脚本中使用自定义字段的 ID,因此你需要准备好该 ID。你可以通过访问 自定义字段 页面,点击目标字段的 编辑 链接,并点击 URL 末尾的数字来找到该字段的 ID。例如,以下 URL 显示了一个 ID 为 10103
的自定义字段:
http://jira.localhost.com:8080/secure/admin/EditCustomField!default.jspa?id=10103
如何操作...
请按照以下步骤,将 JavaScript 添加到自定义字段描述中:
-
使用具有 Jira 管理员权限的用户登录 Jira。
-
导航到 管理 > 问题 > 自定义字段。
-
点击自定义字段的 编辑 链接。
-
将以下 JavaScript 代码片段输入到 描述 文本框中,并点击 更新。你需要将其替换为你自定义字段的 ID:
<script>
AJS.$('#customfield_10103 option[value="- 1"]').remove();
</script>
以下截图展示了 Team 自定义字段:
如你所见,None 选项不再可用。
它是如何工作的...
在我们的脚本中,我们使用 jQuery 根据元素 ID 选择 Team 自定义字段,并通过 #customfield_10103 option[value="-1"]
选择器删除值为 -1
(即 None 选项)的选项。
我们使用 Atlassian JavaScript (AJS) 命名空间(AJS.$
),这是在 Jira 中使用 jQuery 的推荐方法。
设置字段的默认值
随着你在屏幕上添加越来越多的字段,用户可能会感到不知所措,尤其是对于像描述这样的自由文本字段。用户往往会按照自己的方式输入数据。为了解决这个问题,一种方法是为某些字段设置默认值作为说明,帮助引导用户输入。对于那些使用过其他系统(如 GitHub)的人来说,这是一个常见的做法。
在本教程中,我们将学习如何为描述字段设置默认值,以便在创建 bug 报告时为用户提供操作说明。
准备工作
对于这个食谱,我们需要安装 ScriptRunner for Jira 插件。你可以从以下链接下载,或者直接从通用插件管理器安装它,链接为 marketplace.atlassian.com/plugins/com.onresolve.jira.groovy.groovyrunner
。
你可能还想了解一下 Groovy 脚本,相关资料可以参考 groovy-lang.org
.
如何做...
一旦你安装了 ScriptRunner for Jira 插件,我们首先需要创建一个所谓的行为:
-
使用具有 Jira 管理员权限的用户登录 Jira。
-
导航到 管理 > 管理应用 > 行为。
-
通过为其输入名称并点击 添加 按钮来创建一个新行为。
创建了新的行为后,我们需要首先创建一个映射,以便 Jira 知道该将该行为应用于什么:
-
点击我们创建的新行为的“添加映射”链接。
-
选择所有项目和 Bug 问题类型进行我们的映射。
-
点击 添加映射 按钮来保存设置。
创建了映射后,我们现在可以开始设置默认值:
-
点击我们创建的新行为的 字段 链接。
-
点击 创建初始化器 链接:
- 将以下代码输入到文本编辑器中:
1\. def desc = getFieldById("description")
2\. def defaultValue = ""
3\. h2\. Describe the problem
4\. Tell us in details what the problem you are having.
5.
6\. h2\. How to reproduce
7\. List out the steps to reproduce the problem.
8\. * step 1
9\. * step 2
10.
11\. h2\. Expected Result
12\. Tell us what you think the correct outcome should be after completing the steps 13\. listed above.
14.
15\. h2\. Actual Result
16\. Tell us what you actually see after completing the steps listed above."""
17.
18\. if (!underlyingIssue?.description) {
19\. desc.setFormValue(defaultValue)
20\. }
- 点击 保存 来保存我们的更改。
现在,如果你尝试创建一个新的 Bug 问题,你应该会看到描述字段已经预填充了我们的默认值,如下所示:
我们现在来看看这些步骤是如何工作的。
它是如何工作的...
我们的代码是用 Groovy 编写的,它与 Jira 使用的技术 Java 非常相似。我们首先尝试获取第 #1 行的 Description
字段,在第 #3 到第 #20 行之间,我们使用 wiki 标记语言,这是 Jira 内置编辑器使用的标记语言,用于以指令的形式创建默认值。在第 #18 行,我们检查该问题是否已经设置了描述值,例如用户输入的内容,如果没有,我们将在第 #19 行应用我们的默认值。
向字段添加权限
默认情况下,Jira 提供了多个权限级别,从系统级别到问题级别,可以控制谁应该访问问题。虽然这通常已经足够,但你会发现有时需要将权限应用于单个字段。例如,你可能希望某个字段如描述对所有人只读,但只有特定用户组可编辑。
一个选择是创建你自己的自定义字段类型,如后面食谱中描述的那样,并将权限要求作为字段的一部分进行编码,但这种方法需要编程,并且无法应用于不是由你创建的字段。
在本食谱中,我们将介绍一种将字段级权限应用于系统字段和自定义字段的选项。
准备工作
对于本教程,我们需要安装 ScriptRunner for Jira 插件。你可以从以下链接下载,或者直接通过marketplace.atlassian.com/plugins/com.onresolve.jira.groovy.groovyrunner
在 Universal Plugin Manager 中安装。
如何操作...
安装了 ScriptRunner for Jira 插件后,我们首先需要创建一个被称为行为的内容:
-
使用具有 Jira 管理员权限的用户登录 Jira。
-
进入管理 > 管理应用 > 行为。
-
通过输入名称并点击添加按钮创建一个新行为。
创建新行为后,我们需要首先创建一个映射,这样 Jira 才知道将行为应用到什么内容:
-
点击我们创建的新行为的添加映射链接。
-
选择你想应用行为的项目和问题类型。如果你希望此行为为全局性,可以选择“所有项目”和“所有问题类型”选项。
-
点击添加映射按钮以保存设置。
创建好映射后,我们可以开始设置字段级权限行为:
-
点击我们创建的新行为的字段链接。
-
选择要应用字段级权限的字段。
-
切换可用的行为选项,如下所示:
- 点击添加新条件链接,选择该权限应应用于哪些用户。在以下截图中,权限将应用于除
jira-administrators
组用户以外的所有人:
-
点击添加按钮以添加条件。
-
添加字段和条件后,点击保存按钮。
一旦我们创建并配置了字段级权限,所做的更改将根据我们配置的映射立即应用到目标问题。请查看下一张截图:
如你所见,当用户编辑问题时,描述字段(一个系统字段)和团队字段(一个自定义字段)处于只读模式。
创建自定义字段类型
Jira 自带的所有自定义字段都有预定义的用途,例如文本字段,允许用户输入一些简单文本。通常,拥有一个完全符合需求的专业自定义字段会非常有用。不幸的是,这通常需要自定义开发工作。
但是,有一个插件提供了一个自定义字段类型,允许您使用 Groovy 脚本来驱动其逻辑。
在这个教程中,我们将展示如何创建一个使用 Groovy 脚本来显示某个问题所有评论总数的自定义字段。
准备工作
对于此教程,我们需要安装Jira 的 ScriptRunner插件。你可以从以下链接下载它,或直接通过 Universal Plugin Manager 安装它:marketplace.atlassian.com/plugins/com.onresolve.jira.groovy.groovyrunner
。
你也可以了解一下 Groovy 脚本语言,访问groovy-lang.org
。
如何操作...
创建脚本化字段是一个两步过程。我们首先需要在 Jira 中创建自定义字段的实例,然后将脚本添加到该字段:
-
使用具有 Jira 管理员权限的用户登录 Jira。
-
导航到管理 > 问题 > 自定义字段。
-
点击“添加自定义字段”按钮,并从对话框中选择高级。
-
向下滚动并从列表中选择脚本化字段;点击下一步,如以下截图所示:
-
将我们的新自定义字段命名为
Total Comments
并将其添加到相应的界面。 -
导航到管理 > 管理应用 > 脚本字段。
-
选择
Total Comments
字段的编辑选项。 -
在脚本文本框中输入以下 Groovy 脚本:
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.comments.CommentManager
def commentManager = ComponentAccessor.getCommentManager()
def numberOfComments = commentManager.getComments(issue).size()
return numberOfComments ? numberOfComments as Double : null
- 选择数字字段作为模板,然后点击更新,如以下截图所示:
当自定义字段添加到问题中时,它将自动实时计算该问题的评论数量,如以下截图所示:
现在是时候了解具体步骤了。
它是如何工作的...
脚本化字段类型是所谓的计算自定义字段类型的示例。计算自定义字段类型是一种特殊的自定义字段,它根据一些预定义的逻辑(在本例中为我们的 Groovy 脚本)推导(计算)其值。每次显示该字段时,Jira 都会重新计算该字段的值,以确保始终保持最新状态。
第三章:Jira 工作流
工作流是 Jira 中最核心和最强大的功能之一。它们控制着 Jira 中问题如何从一个阶段流转到另一个阶段,同时可能会重新分配给其他用户,并在过程中捕获附加信息。因此,工作流可以被看作是问题的生命周期。
与许多其他系统不同,Jira 允许您创建自定义工作流,模拟您在组织中可能已有的工作流程。这是 Jira 如何适应您的需求,而不必改变工作方式的一个好例子。
在本章中,我们将不仅学习如何使用新的工作流设计器创建工作流,还将学习如何使用工作流组件,如条件和验证器,为工作流添加额外的行为。我们还将了解许多可用的应用程序,以扩展您在工作流中可以实现的功能。
本章将介绍以下几个配方:
-
为您的项目设置不同的工作流
-
在工作流转换中捕获附加信息
-
使用常见转换
-
使用全局转换
-
限制工作流转换的可用性
-
在工作流转换中验证用户输入
-
在转换执行后进行额外处理
-
响应来自 Jira 外部的事件
-
调整工作流转换栏的顺序
-
限制转换中的解决方案值
-
防止在选定状态下更新问题
-
在工作流转换过程中使字段变为必填
-
创建自定义工作流转换逻辑
为您的项目设置不同的工作流
工作流就像一个流程图,问题可以通过遵循状态之间的方向路径,从一个状态流转到另一个状态。在 Jira 的工作流术语中,状态被称为状态,而路径被称为转换。我们将使用这两个主要组件来定制工作流。
在这个配方中,我们将从头开始创建一个新的简单工作流。我们将学习如何使用现有状态,创建新状态,并通过转换将它们链接在一起。
如何操作...
第一步是创建一个新的骨架工作流:
-
使用具有 Jira 管理员权限的用户登录 Jira。
-
导航到管理 > 问题 > 工作流。
-
点击添加工作流按钮,并将工作流命名为
简单工作流
。 -
点击图表按钮以使用工作流设计器或图表模式。
以下截图解释了工作流设计器的一些关键元素:
现在我们已经创建了一个新的非激活工作流。下一步是为问题添加各种状态,问题将在这些状态之间流转。Jira 提供了一些现有的状态,例如“进行中”和“已解决”,供我们使用:
-
点击添加状态按钮。
-
从列表中选择进行中状态,然后点击添加。
-
重复步骤,添加关闭状态。
你可以在字段中输入状态名称,Jira 会自动为你找到该状态。
一旦你将状态添加到工作流中,你可以拖动它们以重新定位它们在画布上的位置。我们还可以创建新的状态,如下所示:
-
点击添加状态按钮。
-
将新状态命名为
Frozen
,勾选允许所有状态转换到此状态选项,然后点击添加,如以下截图所示:
如果你输入的状态是新的,Jira 会通过在状态名称旁边显示文本(新状态)来通知你。
现在我们已经添加了状态,我们需要通过转换来链接它们:
-
选择原始状态,本示例中是OPEN。
-
点击OPEN状态周围的小圆圈,将光标拖到IN PROGRESS状态。这将提示你提供新转换的详细信息,如下截图所示:
-
将新转换命名为
Start Progress
,并为屏幕选择无选项。 -
重复步骤,在IN PROGRESS和CLOSED状态之间创建一个名为
Close
的转换。
你应该完成一个如下所示的工作流:
此时,工作流是非活动的,这意味着它尚未被项目使用,你可以在没有任何限制的情况下进行编辑。工作流是基于项目和问题类型应用的。执行以下步骤,将新工作流应用到项目:
-
选择要应用工作流的项目。
-
点击管理标签,进入项目管理页面。
-
在页面左侧选择工作流。
-
从添加工作流菜单中点击添加现有。
-
从对话框中选择新的Simple Workflow,然后点击下一步。
-
选择要应用工作流的 issue 类型(例如,Bug),然后点击完成。
在将工作流应用到项目后,工作流会处于活动状态。因此,如果我们现在在选定问题类型的目标项目中创建新问题,新的简单工作流将会被使用。
在工作流转换过程中捕获额外信息
当用户执行工作流转换时,我们有一个选项可以显示一个中间的工作流屏幕。这是从用户那里收集额外信息的非常有用的方式。例如,默认的 Jira 工作流会在问题解决时显示一个屏幕,让用户选择分辨率值。
带有分辨率值的问题被认为是已完成的。你应该只将分辨率字段添加到表示问题关闭的工作流屏幕中。
准备工作
我们需要配置一个工作流,比如在前面的示例中创建的简单工作流。我们还需要有显示屏幕;Jira 的开箱即用工作流屏幕和结果问题屏幕就足够了,但如果你已经创建了自己的屏幕,也可以使用它们。
如何操作...
执行以下步骤,将屏幕添加到工作流过渡中:
-
选择要更新的工作流,比如我们的简单工作流。
-
如果工作流是激活状态,点击编辑按钮。这将为我们创建一个草稿工作流以供修改。
-
选择开始进展过渡,然后从右侧面板点击编辑链接。
-
选择你想要使用的屏幕,比如从屏幕下拉菜单中选择工作流屏幕,然后点击保存。
-
重复步骤 3和步骤 4,将解决问题屏幕添加到关闭过渡。
如果我们正在使用草稿工作流,我们必须点击发布草稿按钮,将更改应用到实时工作流中。
如果你没有看到更改生效,很可能是你忘记发布草稿工作流。
使用常见过渡
通常,你会有一些需要从工作流中的多个不同状态提供的过渡,比如解决和关闭过渡。换句话说,这些过渡具有相同的目标状态,但来源状态不同。
为了简化这些过渡的创建过程,Jira 允许你将现有的过渡重用为常见过渡,只要它们具有相同的目标状态。
常见过渡是指目标状态相同但来源状态不同的过渡。
常见过渡的一个额外优势是确保过渡屏幕和其他相关配置(如验证器)保持一致。否则,每次更改其中一个过渡时,你必须不断检查各种过渡。
如何操作...
执行以下步骤,在工作流中创建并使用常见过渡:
-
选择工作流,然后点击编辑链接以创建草稿。
-
选择图表模式。
-
在两个状态之间创建过渡,例如打开和关闭。
-
从不同的状态创建另一个过渡到相同的目标状态,并点击重用过渡选项卡,如下图所示:
-
从重用过渡下拉菜单中选择在步骤 3中创建的过渡,然后点击添加。
-
点击发布草稿以应用更改。
另见
请参阅使用全局过渡示例,这将帮助我们轻松创建复杂的工作流,通过允许问题随时过渡到某个状态。
使用全局过渡
虽然公共转换是共享工作流中的转换并减少管理工作量的好方法,但它的限制在于需要手动创建各个状态之间的转换。
随着工作流变得越来越复杂,显式地创建转换变得是一项繁琐的工作;这时全局转换就派上用场了。
全局转换类似于公共转换,因为它们都具有一个单一的目标状态。二者的区别在于,全局转换是一个可供工作流中所有状态使用的单一转换。
在本方案中,我们将展示如何使用全局转换,以便问题可以从工作流中的任何状态转换到冻结状态。
准备就绪
如常,你需要有一个可以编辑的工作流。由于我们将演示全局转换的工作原理,因此需要在工作流中拥有一个名为冻结的状态,并确保没有任何转换链接到它。
如何操作...
执行以下步骤以在工作流中创建并使用全局转换:
-
选择并编辑你将添加全局转换的工作流。
-
选择图示模式。
-
选择冻结状态。
-
勾选允许所有状态转换到此状态选项。
-
点击发布草稿以应用更改。
以下截图展示了之前的步骤:
- 一旦为某个状态创建了全局转换,它将被表示为全部转换,如下图所示:
在冻结状态添加全局转换后,无论问题当前处于何种状态,你都可以将其转换为冻结状态。
你只能在图示模式下添加全局转换。
另见
请参考限制工作流转换可用性的方案,其中解释了如何在问题已经处于冻结状态时移除转换。
限制工作流转换可用性
默认情况下,工作流转换对所有有权限访问问题的用户都可以使用。有时候,你可能希望限制某些转换的访问。例如,你可能希望限制冻结问题转换的访问,原因如下:
-
你希望该转换仅对特定组或项目角色中的用户可用。
-
由于该转换是全局转换,它对所有工作流状态都可用,但当问题已经处于冻结状态时,显示该转换没有意义。
要限制工作流转换的可用性,我们可以使用工作流条件。
准备就绪
对于这个教程,我们需要安装 JSU Automation Suite for Jira Workflows 应用程序。您可以通过以下链接下载该应用程序,或者直接通过通用插件管理器(UPM)安装:marketplace.atlassian.com/plugins/com.googlecode.jira-suite-utilities
。
如何操作……
我们需要向我们希望应用限制的过渡添加一个新的工作流条件:
-
选择并编辑工作流进行配置。
-
选择图表模式。
-
点击冻结全局工作流过渡。
-
点击右侧面板中的条件链接。
-
点击添加条件,从列表中选择 Value Field (JSU),然后点击添加。
-
使用以下参数配置条件:
-
Status
字段用于字段 -
不等于符号,
!=
,用于条件 -
Frozen
用于值 -
String
用于比较类型
-
这意味着,只有当问题的状态字段值不是冻结时,才会显示该过渡,如以下截图所示:
- 点击添加按钮以完成条件设置。
此时,我们已经添加了一个条件,确保当问题已经处于冻结状态时,不会显示冻结问题的过渡。下一步是添加另一个条件,限制该过渡仅对开发者角色的用户可用。
-
再次点击添加条件,并选择项目角色中的用户条件。
-
选择开发者项目角色并点击添加。
-
点击发布草稿以应用更改。
一旦应用了工作流条件,如果问题已经处于冻结状态,或者当前用户不在开发者项目角色中,则冻结过渡将不再可用。
它是如何工作的……
当工作流过渡选项在页面上呈现时,比如查看问题时,所有相关的条件都会被评估,以确定是否显示该选项。如果有多个条件,只有当一个或全部条件通过时,才会显示带有条件的过渡,具体取决于条件的逻辑设置(参见以下部分)。
还有更多……
使用 Value Field 条件(它随 JSU Automation Suite for Jira Workflows 应用程序提供)是根据问题的当前状态限制过渡可用性的多种方式之一。还有另一个名为Jira Misc Workflow Extensions的应用程序,提供了一个检查问题上一个状态的条件。您可以从marketplace.atlassian.com/plugins/com.innovalog.jmwe.jira-misc-workflow-extensions
下载它。
当对过渡应用多个工作流条件时,如我们的示例所示,默认行为是所有条件必须通过,过渡才会生效。
您可以更改此设置,使得仅需通过一个条件,过渡就会生效,方法是将条件组逻辑从所有以下条件更改为任何以下条件,如下所示:
在配置此项时,请务必仔细检查,确保不会将工作流过渡暴露给那些不应执行这些过渡的用户。
在工作流过渡中验证用户输入
对于具有过渡屏幕的工作流过渡,您可以添加验证逻辑,以确保用户输入的内容符合预期。这是确保数据完整性的好方法,我们可以通过工作流验证器来实现。
在此方案中,我们将添加一个验证器,以执行自定义字段与问题创建日期之间的日期比较,因此我们为自定义字段选择的日期值必须晚于问题的创建日期。
准备就绪
对于此方案,我们需要安装 JSU 自动化套件 for Jira Workflows 应用。您可以通过以下链接下载,或直接使用 UPM 安装:marketplace.atlassian.com/plugins/com.googlecode.jira-suite-utilities
。
由于我们也在进行日期比较,因此需要创建一个名为开始日期
的新日期自定义字段,并将其添加到工作流屏幕中。
如何操作...
执行以下步骤以在工作流过渡中添加验证规则:
-
选择并编辑工作流进行配置。
-
选择图表模式。
-
选择开始进度过渡,并点击右侧的验证器链接。
-
点击添加验证器链接,并从列表中选择日期比较(JSU)。
-
使用以下参数配置验证器:
-
开始日期
自定义字段为此日期。 -
大于号
>
用于条件 -
创建时间
用于进行比较 -
可选的自定义错误信息,或者如果验证失败,可以留空,系统将显示默认的错误信息。
-
-
点击添加以添加验证器:
- 点击发布草稿以应用更改。
添加验证器后,如果我们尝试选择一个早于问题创建日期的日期,Jira 会提示错误信息,并阻止过渡进行,如下图所示:
如我们所见,日期验证失败,且我们自定义的错误信息被显示。
如何操作...
验证器在工作流过渡执行之前运行。这样,如果任何验证逻辑失败,验证器可以拦截并阻止过渡的进行。
如果您有多个验证器,必须确保所有验证器都通过,转换才能继续进行。
另见
验证器可用于使字段在工作流转换过程中仅为必填项。有关详细信息,请参阅在工作流转换过程中使字段为必填项的方案。
在转换执行后执行额外的处理
Jira 允许您通过使用后置操作在工作流转换过程中执行额外的任务。Jira 在内部大量使用后置操作;例如,在开箱即用的工作流中,当您重新打开问题时,解决方案字段的值会自动清空。
在此方案中,我们将学习如何向工作流转换中添加后置操作。我们将添加一个后置操作,在我们将问题从冻结状态移除时自动清空冻结原因自定义字段中的值。
准备工作
由于我们要清除名为“冻结原因”的自定义字段的值,因此需要创建一个文本字段(多行)类型的自定义字段,并将其添加到项目使用的屏幕中。
默认情况下,Jira 带有一个后置操作,可以更改标准问题字段的值,但由于冻结原因将是一个自定义字段,我们需要安装 JSU 自动化套件 for Jira 工作流应用。
您可以通过以下链接下载,或使用 UPM 直接安装:marketplace.atlassian.com/plugins/com.googlecode.jira-suite-utilities
。
如何操作...
执行以下步骤,在工作流转换执行后添加处理逻辑:
-
选择并编辑工作流以进行配置。
-
选择图表模式。
-
创建一个新的工作流转换,将问题从冻结状态转换到另一个状态。
-
点击新创建的转换的后置操作链接。
-
点击添加后置操作功能,从列表中选择清空字段值(JSU),然后点击添加。
-
从字段中选择“冻结原因”字段,然后点击添加按钮。
-
点击发布草稿以应用更改。
在设置好后置操作后,执行转换后,冻结原因字段的值将被清空。您还可以从问题的变更历史记录中看到,作为转换执行的一部分,状态字段从冻结变更为打开,同时冻结原因字段的变更也被记录。
它是如何工作的...
后置操作会在转换执行后运行。当您添加新的后置操作时,您可能会注意到该转换已经预先添加了多个后置操作;这在接下来的截图中显示:
这些后置操作是系统后置操作,执行重要的内部功能,例如保持搜索索引的最新状态。这些后置操作的顺序非常重要。
总是将你自己的后置功能添加到列表的顶部。
例如,任何对问题字段值的更改,如我们刚刚添加的,更改应始终发生在重新索引后置功能之前,这样在过渡完成时,所有字段索引都会是最新的,并准备好被搜索:
对来自 Jira 外部事件的反应
当你将 Jira 与其他系统一起使用时,尤其是与 Atlassian 构建的应用程序(如 Bitbucket 和 Bamboo)一起使用时,你可以与它们一起获得更多的协同效应。一个协同效应的例子是,当其他应用程序发生某些操作时,自动执行工作流过渡。
在这个教程中,我们将讨论这样的一个使用案例:如果开发人员针对 Jira 问题提交了一些代码,我们将自动将问题过渡到进行中状态,而无需开发人员手动进入 Jira 并执行工作流过渡。
准备就绪
由于我们的使用案例是关于开发人员提交代码,你需要有一个支持的代码管理应用程序;Bitbucket 和 GitHub 都被支持。在这个教程中,我们将使用 Bitbucket。你可以从www.atlassian.com/software/bitbucket/download
获取该应用的试用版。
如何操作...
为了基于外部事件自动过渡问题,我们需要将适当的工作流触发器添加到过渡中:
-
选择并编辑工作流进行配置。
-
选择开始进度过渡。
-
点击触发器按钮。
-
点击添加触发器按钮。如果按钮被禁用,意味着你还没有将 Jira 与 Bitbucket 集成。
-
选择创建提交触发器并点击下一步:
-
点击添加触发器以将触发器应用到工作流过渡中。
-
点击发布草稿以应用更改。
应用触发器后,如果你在提交代码时将问题的关键字作为提交信息的一部分,问题将自动过渡到目标状态,在这种情况下是进行中状态。
重新排列工作流过渡条
默认情况下,工作流过渡会按工作流中定义的顺序显示(如文本模式中所列);前两个过渡将显示为按钮,其余过渡将被添加到工作流菜单中。
这个顺序由添加过渡的顺序决定,所以你不能更改它。但你可以通过使用opsbar-sequence
属性来重新排列它们。
在这个教程中,我们将把冻结过渡从工作流菜单中移出,并放到它自己的过渡按钮上,以便用户可以轻松访问它。
如何操作...
执行以下步骤以重新排列要显示在问题过渡条中的过渡顺序:
-
选择并编辑工作流进行配置。
-
选择冻结全局过渡。
-
点击属性按钮。
-
输入
opsbar-sequence
作为属性键,并在属性值中输入10
,然后点击添加。点击发布草稿以应用更改。
如下截图所示,通过增加工作流转换的顺序值,它会被移出工作流菜单,并单独成为一个按钮:
现在,让我们来了解一下工作原理部分。
它是如何工作的...
opsbar-sequence
属性按数字顺序排列工作流转换,从最小到最大。其值必须是正整数。数字越小,转换按钮越靠前。
还有更多内容...
Jira 只显示前两个转换作为按钮。您可以通过编辑位于JIRA_HOME
目录中的jira-config.properties
文件中的ops.bar.group.size.opsbar-transitions
属性来更改此设置。
你只需编辑文件,设置属性以显示所需数量的转换按钮,如所示(我们将转换按钮的数量设置为3
),然后重新启动 Jira:
ops.bar.group.size.opsbar-transitions=3
如果您没有看到jira-config.properties
文件,您可以简单地创建一个具有相同名称的新文件,并在其中添加您的属性。
请查看以下截图:
现在 Jira 显示了三个转换按钮,而不是两个。
限制转换中的解决方案值
通常,问题的解决方案值如已修复和不会修复是全局的,因此无论项目和问题类型如何,都会有相同的解决方案值可用。当您在 Jira 中实现不同的工作流时,可能会发现某些解决方案与某个特定项目或问题类型无关。
在这个实例中,我们将选择一个在使用简单工作流关闭问题时可用的全局解决方案子集。
如何操作...
执行以下步骤,以选择性地包含给定工作流转换的部分解决方案:
-
选择并编辑简单工作流。
-
选择关闭问题工作流转换。
-
点击属性选项。
-
在属性名称中输入
jira.field.resolution.include
,并将我们希望包含的解决方案的 ID(用逗号分隔)输入到属性值中。因此,如果我们只想包含已完成、不做和重复的解决方案,我们需要将10000
、10001
和10002
作为属性值指定,中间不留空格。
看一下下面的截图:
- 点击发布草稿以应用更改。
请注意,这三个解决方案的实际值可能与您的 Jira 实例不同。配置属性时,请再次确认它们的值。
还有更多内容...
除了选择解决方案的子集之外,还有一个jira.field.resolution.exclude
属性,可以让您从全局列表中排除某些解决方案。
防止在特定状态下更新问题
默认情况下,当问题处于已关闭状态时,无法进行更新。通常的做法是,当问题处于表示逻辑完成的状态时,将其设为只读。
在本食谱中,我们将确保,当问题被移动到冻结状态时,直到它被移回开放状态之前,将无法再进行更新。
如何操作...
执行以下步骤,在问题处于冻结状态时将其设为只读:
-
选择并编辑要更新的工作流。
-
选择冻结工作流状态。
-
点击右侧面板中的属性链接。
-
在属性键中输入
jira.issue.editable
,在属性值中输入false
,然后点击添加。 -
点击发布草稿以应用更改。
在工作流转换过程中将字段设置为必填
使用字段配置将字段设置为必填将使该字段始终处于必填状态。然而,有许多使用场景中,您可能只需要在某些工作流转换期间将字段设置为必填。
准备就绪
对于本食谱,您需要安装 JSU 自动化套件用于 Jira 工作流应用程序。您可以通过以下链接下载,或者直接使用 UPM 安装:marketplace.atlassian.com/plugins/com.googlecode.jira-suite-utilities
。
如何操作...
执行以下步骤,在冻结转换期间将“冻结原因”字段设置为必填:
-
选择并编辑简单工作流。
-
选择图表模式。
-
点击冻结全局工作流转换。
-
点击右侧面板中的验证器链接。
-
点击添加验证器,从列表中选择“字段必填(JSU)”,然后点击添加。
-
从可用字段中选择冻结原因字段,并点击添加 >>。这将把所选字段添加到必填字段列表中,如下图所示:
-
如果您希望显示自定义消息而非默认的错误消息,请输入可选的错误消息。
-
点击添加按钮以完成验证器设置。
-
点击发布草稿以应用更改。
添加验证器后,如果您尝试执行冻结转换而未为“冻结原因”字段指定值,Jira 将提示您出现错误消息,如下图所示:
创建自定义工作流转换逻辑
在之前的食谱中,我们已经查看了如何使用 Jira 内置的工作流条件、验证器和后置功能,以及其他第三方应用程序提供的功能。
在这个方案中,我们将看看如何使用脚本为工作流验证器定义自己的验证规则。我们将处理一个常见的用例,即仅当另一个字段设置为某个特定值时,在工作流过渡过程中使某个字段成为必填项。
所以,我们的验证逻辑将如下所示:
-
如果Resolution字段设置为Done,Solution Details字段将变为必填项。
-
如果Resolution字段设置为Fixed以外的值,Solution Details字段将不再是必填项。
准备开始
对于这个方案,我们需要安装 ScriptRunner for Jira 应用。你可以通过以下链接下载,或者直接使用 UPM 安装:marketplace.atlassian.com/plugins/com.onresolve.jira.groovy.groovyrunner
。
你可能还需要熟悉 Groovy 脚本语言(groovy.codehaus.org
)。
如何操作……
执行以下步骤设置带有自定义脚本逻辑的验证器:
-
选择并编辑简单工作流。
-
选择图表模式。
-
点击完成全局工作流过渡。
-
从右侧面板中点击验证器链接。
-
点击添加验证器,从列表中选择脚本验证器 [ScriptRunner],然后点击添加。
-
选择简单脚本验证器选项。
-
在条件文本框中输入以下脚本代码:
import com.opensymphony.workflow.InvalidInputException
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.CustomFieldManager
import org.apache.commons.lang3.StringUtils
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def solutionField = customFieldManager.getCustomFieldObjectByName("Solution Details")
def resolution = issue.getResolution().getName()
String solution = issue.getCustomFieldValue(solutionField)
if(resolution == "Done" && StringUtils.isBlank(solution)) {
false
} else {
true
}
-
在错误字段中输入
如果分辨率设置为 Done,则必须提供 Solution Details。
-
选择Solution Details作为字段。
-
点击添加按钮以完成验证器设置。
-
点击发布草稿以应用更改。
你的验证器配置应如下所示:
一旦我们添加了自定义验证器,Groovy 脚本将在每次执行解决问题的过渡时运行。如果 Resolution 字段设置为 Done 且 Solution Details 字段为空,我们将收到来自错误字段的消息,如下图所示:
现在我们来看一下这些步骤是如何工作的。
它是如何工作的……
脚本验证器的工作方式与其他验证器一样,只是我们可以使用 Groovy 脚本定义自己的验证逻辑。那么,让我们看看这个脚本,它的作用是什么。
我们首先通过字段名称获取 Solution Details 自定义字段,如下代码所示。如果你有多个同名的自定义字段,你需要使用它的 ID 而不是名称:
def solutionField = customFieldManager.getCustomFieldObjectByName("Solution Details")
然后我们选择分辨率值,并在过渡过程中获取输入的 Solution Details 值,如下所示:
def resolution = issue.getResolutionObject().getName()
String solution = issue.getCustomFieldValue(solutionField)
在我们的示例中,我们检查分辨率名称;我们也可以通过将 getName()
更改为 getId()
来检查分辨率的 ID。
如果你有多个同名的自定义字段,请使用 getId()
。
最后,我们检查Resolution值是否为Done,并且Solution Details值是否为空。如果是这种情况,我们返回false
,因此验证失败。所有其他情况将返回true
,所以验证通过。我们还使用StringUtils.isBlank(solution)
来检查空值,这样我们就可以捕获用户在Solution Details字段中输入空格的情况。
还有更多...
你不仅限于创建脚本验证器。通过使用 ScriptRunner for Jira 应用,你可以使用 Groovy 脚本创建脚本条件和后置函数。
第四章:用户管理
用户管理是任何系统中最繁琐但又最重要的方面之一。它为许多其他系统功能奠定基础,例如安全性和通知。
本章我们将探讨在 Jira 中创建用户账户的不同选项,并介绍如何通过使用组和项目角色来管理用户。我们还将讨论如何将 Jira 与外部用户管理系统(例如轻量级目录访问协议(LDAP))集成,以便进行身份验证和用户管理。最后,我们将介绍如何使 Jira 参与各种单点登录环境。
本章将涵盖以下主题:
-
创建和导入多个用户
-
启用公共用户注册
-
管理组和组成员关系
-
管理项目角色
-
管理默认项目角色成员关系
-
停用用户
-
从 LDAP 集成并导入用户
-
仅通过 LDAP 进行身份验证的集成
-
与 Atlassian Crowd 集成
-
设置与 Crowd 的单点登录
-
设置与 Google 的单点登录
-
设置 Windows 域单点登录
创建和导入多个用户
作为 Jira 管理员,通常你需要为新加入组织的用户设置账户。对于临时的用户,通常没问题,但有时你可能需要一次性导入大量用户。在这些情况下,你将需要一些额外的工具,帮助你高效地使所有这些用户能够及时访问系统。
准备工作
对于这个配方,我们需要使用 Jira 命令行界面(CLI)。你可以从marketplace.atlassian.com/plugins/org.swift.jira.cli/cloud/overview
获取它。
CLI 应用程序有两个组件。第一个组件是一个叫做 CLI Connector 的应用程序,你可以通过通用插件管理器(UPM)像其他 Jira 应用程序一样安装它。第二个组件是实际的 CLI 客户端,我们将用它来向 Jira 发出命令。你可以从bobswift.atlassian.net/wiki/spaces/info/pages/103022955/Downloads+-+CLI+Clients
下载最新的命令行工具(atlassian-cli-8.x.x-distribution.zip
)。
你还需要一个管理员账户,因为创建用户是一个管理员任务。
如何操作...
在我们开始使用命令行客户端将用户导入到 Jira 之前,我们首先需要准备用户数据。最简单的方式是创建一个包含以下信息的逗号分隔值(CSV)文件,并按指定的顺序排列。你可以使用如 Microsoft Excel 等电子表格应用程序来创建它:
用户名 | 密码 | 电子邮件 | 全名 | 组 A |
---|---|---|---|---|
tester1 |
xxxxx |
tester1@example.com |
测试用户 |
jira-softwareusers |
以下列表解释了 CSV 文件的每一列:
-
用户名:用户的用户名;请注意,Jira 中的用户名必须是唯一的。
-
密码:新用户的密码。你可以留空,Jira 会自动为你生成一个密码。
-
电子邮件:新用户的电子邮件地址。帐户创建后,可以向用户发送电子邮件,以便他/她重置密码。
-
全名:新用户的全名。
-
组:要将新用户添加到的组。如果你想将用户添加到多个组中,请将每个组放在一个单独的列中。请注意,指定的组名必须已经在 Jira 中存在。
现在你已经有了数据文件,请按照以下步骤导入并在 Jira 中创建用户账户:
-
将 CLI 客户端解压到你计算机上的某个目录(例如,
/opt/cli
)。 -
将用户的 CSV 文件复制到你计算机上的某个目录(例如,
/tmp/users.csv
)。 -
打开命令提示符并导航到包含 CLI 客户端的目录,即包含
jira.sh
或jira.bat
文件的目录。 -
确保
jira.sh
文件(Linux)或jira.bat
(Windows)是可执行的。 -
运行以下命令来导入用户;确保在 Jira URL 中替换管理员的用户名和密码:
./jira.sh --action addUserWithFile --server
http://localhost:8080 --password <password>
--user <username> --file /tmp/users.csv
上述命令假设你正在使用 Linux。如果你使用的是 Windows,请改用jira.bat
。
如果一切顺利,你将在控制台看到类似以下的输出:
如前面输出所示,命令的结果会显示每个根据 CSV 文件添加到 Jira 的新用户。由于我们没有为Tester Four
用户指定密码,因此该用户将被分配一个自动生成的密码。输出的最后一行还提供了成功添加的用户数量和失败的用户数量(如果有的话)。
它是如何工作的…
我们用于运行addUserWithFile
命令的命令行客户端使用 Jira 的远程 API 与 Jira 交互。Jira 通过这些 API 暴露了许多核心功能,例如创建新用户和问题的能力。
当我们运行addUserWithFile
命令时,我们传入一个包含新用户的 CSV 文件,文件格式符合命令行客户端的要求,使其能够理解并调用 Jira 的 API 来为我们创建这些用户。
但请注意,使用这些远程 API 时(无论是否使用命令行客户端),同样的安全规则适用。因此,在我们的案例中,由于创建新用户是一个管理任务,我们需要在命令中提供管理员账户。
Jira CLI 应用程序不仅可以创建用户。只需运行jira.sh
或jira.bat
,即可查看它支持的所有命令和功能。安装在 Jira 中的 CLI 连接器应用程序提供了许多额外的远程 API,这些 API 将被命令行客户端中的某些功能使用。
启用公共用户注册
在前面的教程中,我们学习了如何手动创建新的用户账户并从 CSV 文件导入用户。这是当你的 Jira 实例用于内部时,Jira 管理员可以选择的两个选项。
然而,如果你的 Jira 设置为公开使用,比如在支持系统中,你就需要让客户自由注册新账户,而不是让他们等待管理员手动创建每个账户。
如何操作...
按照以下步骤启用公共用户注册:
-
进入 管理 > 系统 > 常规配置。
-
点击 编辑设置 按钮。
-
将 模式 选项设置为 公开,然后点击 更新。
工作原理...
Jira 可以在两种模式下运行:公开模式和私有模式。在私有模式下,只有管理员可以创建新的用户账户。例如,你可以为内部工程团队使用的 Jira 实例启用私有模式,用于跟踪他们的项目。
公开模式允许任何人注册新账户。创建的新账户将拥有普通用户权限,因此他们可以立即开始使用 Jira:
如上图所示,你可以注册一个新账户。
更多信息...
为了帮助防止垃圾邮件发送者,Jira 提供了 CAPTCHA 挑战响应功能,确保注册新账户的是一个真实的人,而不是自动化机器人。要启用 CAPTCHA 功能,请按照以下步骤操作:
-
进入 管理 > 系统 > 常规配置。
-
点击 编辑设置 按钮。
-
将注册时的 CAPTCHA 选项设置为开启,并点击 更新。
一旦启用了 CAPTCHA,注册表单将包含一串随机生成的字母数字字符,必须正确输入这些字符,才能生成新的账户,如下图所示:
CAPTCHA 的示例如上图所示。
管理用户组和用户组成员
在任何信息系统中,管理用户的一种常见方式是通过使用用户组。用户组是基于组织内的职位和职责创建的;但是,重要的是要注意,用户组仅仅表示一组用户。在 Jira 中,用户组为应用配置设置(例如权限和通知)提供了一个有效的方式。
用户组在 Jira 中是全局性的——如果你属于jira-administrators
用户组,不管你访问哪个项目,你都将始终在该组中。
在本教程中,我们将了解如何创建一个新用户组并向其中添加用户。
如何操作...
按照以下步骤创建一个新的用户组:
-
进入 管理 > 用户管理 > 用户组。
-
在 添加用户组 部分输入新用户组的名称。
-
点击 添加用户组 按钮。
按照以下步骤将用户添加到用户组:
-
进入 管理 > 用户管理 > 用户组。
-
点击你想管理的组的 编辑成员 链接。
-
输入要添加到组中的用户的用户名。你可以点击选择用户图标并使用用户选择器查找你的用户。
-
点击 添加选定的用户 按钮,将用户添加到组中,如下图所示:
这样可以让你管理组中的用户。
还有更多...
通过直接编辑组的成员资格,你可以一次性添加或移除多个用户;然而,有时你只需要更新单个用户的组成员资格;在这种情况下,你可能会发现通过用户的组成员资格界面来管理编辑选项会更容易。按照以下步骤编辑用户组:
-
进入 管理 > 用户管理 > 用户。
-
从你想管理的用户的菜单中选择 编辑用户组 选项。
-
输入你要将用户添加到的组的名称。Jira 提供了一个自动完成功能,帮助你找到想要的组。
-
点击 加入选定的组 按钮,将用户添加到组中,如下图所示:
现在我们已经将用户添加到组中。
管理项目角色
使用组是 Jira 中管理多个用户的默认方法;然而,使用组也存在一些限制。第一个限制是,组在 Jira 中是全局的。这意味着,如果一个用户在某个组中,那么该用户会包含在该组的所有项目中。
在现实生活中,情况往往并非如此——例如,假设某个用户在一个项目中是经理,但在另一个项目中可能不是经理。这在配置权限和通知时会成为问题。
第二个限制是,如果使用 LDAP,组成员资格由 Jira 管理员或中央 IT 管理员控制。这意味着仅使用组来控制对项目的访问意味着它不由项目所有者管理,可能会导致瓶颈。
因此,为了解决这些限制,Jira 提供了项目角色。项目角色类似于组;唯一的区别是,项目角色的成员资格是在项目级别定义的。
如何操作...
Jira 默认提供三种项目角色——管理员、开发者和用户。我们将首先了解如何创建新项目角色。
按照以下步骤创建新项目角色:
-
进入 管理 > 系统 > 项目角色。
-
输入新项目角色的名称和描述。
-
点击 添加项目角色 按钮:
就像组一样,项目角色本身在 Jira 中是全局的,但它们的成员资格是针对每个项目本地定义的。
一旦创建了项目角色,我们就可以开始将用户和组添加到每个项目的相关角色中。要向项目角色添加新用户和/或组,请按照以下步骤操作:
-
导航到目标项目。
-
点击 管理 标签并选择 用户和角色。
-
点击 “添加用户到角色” 按钮。
-
选择用户和/或组,选择项目角色,然后点击 添加,如下图所示:
这将帮助你管理项目角色。
管理默认项目角色成员
项目角色成员是按项目定义的;然而,有些情况下,某些用户或组需要默认成为给定项目角色的成员。事实上,Jira 默认有以下成员:
-
管理员:所有属于
jira-administrators
组的成员 -
开发人员:所有属于
jira-developers
组的成员
使用这些默认成员时,当创建新项目时,用户会自动被添加到项目角色中;这大大减少了 Jira 管理员需要进行的手动工作量。
如何操作...
按照以下步骤定义项目角色的默认成员:
-
导航到 “管理” > “系统” > “项目角色”。
-
点击要配置的项目角色的 “管理默认成员” 链接。
-
点击 默认用户 列的 “编辑” 链接,将用户添加到项目角色中。
-
点击 默认组 列的 “编辑” 链接,将组添加到项目角色,如下图所示:
此截图展示了如何将组添加到项目角色中。
它是如何工作的...
一旦你将用户和组分配为项目角色的默认成员,任何新创建的项目都会将这些用户和组添加到该角色中。一个好的做法是使用组作为默认项目角色成员,因为用户的角色和责任随着时间的推移可能会发生变化。
需要注意的是,对默认成员的更改将不会 回溯应用于现有项目。
停用用户
一旦用户创建了问题或评论,Jira 将不允许你删除该用户。实际上,停用用户通常比完全删除用户更为合适。一旦 用户 被停用,该用户将无法登录 Jira,并且不会计入你的许可证数量。
如果你使用外部用户管理系统,如 LDAP 或 Jira 的 Crowd,你无法停用用户——你需要从源的用户管理系统中进行操作。
如何操作...
按照以下步骤停用用户:
-
导航到 “管理” > “用户管理” > “用户”。
-
点击要停用的用户的 “编辑” 链接。
-
取消勾选 “已激活” 选项。
-
点击 “更新” 按钮以停用用户。
被停用的用户将无法登录到 Jira,并且其名字旁边会显示“已停用”选项。
从 LDAP 集成和导入用户
默认情况下,Jira 在内部管理其用户和组。如今,大多数组织通常使用 LDAP,例如 Microsoft Active Directory (AD),进行集中式用户管理,你可以将 Jira 与 LDAP 集成。Jira 支持多种不同类型的 LDAP,包括 AD (docs.microsoft.com/en-us/windows-server/identity/ad-ds/get-started/virtual-dc/active-directory-domain-services-overview
)、OpenLDAP (www.openldap.org
) 等。
有两种将 Jira 与 LDAP 集成的选项。在本方案中,我们将探讨使用 LDAP 连接器 的第一种选项,它会定期同步 Jira 与 LDAP 之间的用户、其详细信息和组成员关系。在下一个方案中,我们将探讨第二种选项,仅用于身份验证的 LDAP 集成。
准备工作
对于这个方案,你需要确保有一个正在运行的 LDAP 服务器。你需要确保 Jira 服务器能够访问 LDAP 服务器,并且没有网络或访问问题。例如,确保 LDAP 连接没有被防火墙阻挡。最低要求是你还需要以下信息:
-
LDAP 服务器的主机名和端口号。
-
搜索用户和组的基本 区分名称 (DN)。
-
访问 LDAP 服务器的凭证。如果你希望 Jira 能够对 LDAP 进行更改,确保凭证具有写权限。
如何操作...
按照以下步骤将 Jira 与 LDAP 服务器集成:
-
导航到 管理 > 用户管理 > 用户目录。
-
点击 添加目录 按钮,选择 Microsoft Active Directory 或非 AD 目录的 LDAP。
-
输入 LDAP 服务器、架构和权限设置。有关更多详细信息,请参阅以下表格。
-
点击 快速测试 按钮,验证 Jira 与 LDAP 的连接性。
-
如果没有连接 LDAP 的问题,点击 保存并测试 按钮。
-
输入用户名和密码以运行快速测试。在此过程中,确保 Jira 能够连接到 LDAP,查找用户并检索用户的组信息,并通过 LDAP 进行身份验证。
以下表格列出了配置 LDAP 所有的配置参数。每个表格包括配置页面上每个部分的参数。让我们看一下以下表格:
服务器设置 | 描述 |
---|---|
名称 | 这是 LDAP 服务器的标识符。 |
目录类型 | 选择 LDAP 服务器的类型,例如 Microsoft Active Directory。Jira 会根据选择的类型自动填充用户和组架构的详细信息。 |
主机名 | 这是托管 LDAP 服务器的主机。 |
端口 | 这是 LDAP 服务器监听的端口,用于接收传入连接。 |
使用 SSL | 该选项检查是否在 LDAP 上使用了 SSL。 |
用户名 | 这是 Jira 用于访问 LDAP 的用户帐户。此帐户应为 Jira 专用帐户。 |
密码 | 这是帐户的密码。 |
以下表格列出了 LDAP 架构参数及其描述:
LDAP 架构 | 描述 |
---|---|
基本 DN | 这是 Jira 开始搜索用户和组的根节点。 |
附加用户 DN | 这是进一步限制用户搜索的附加 DN。 |
附加组 DN | 这是进一步限制组搜索的附加 DN。 |
以下表格列出了 LDAP 权限及其描述:
LDAP 权限 | 描述 |
---|---|
只读 | 如果您不希望 Jira 对 LDAP 进行任何更改,请选择此选项。如果所有内容(包括用户的组成员身份)都通过 LDAP 管理,这是理想的选项。 |
只读,带本地组 | 此选项类似于只读选项,但允许您在 Jira 中本地管理组成员身份。使用此选项时,您所做的组成员更改将仅保留在 Jira 中。当您只需要来自 LDAP 的用户信息并希望本地管理与 Jira 相关的组时,这是理想选项。 |
读/写 | 如果您希望 Jira 能够直接更改 LDAP(前提是 Jira 的 LDAP 帐户也具有写权限),请选择此选项。 |
以下截图展示了如何测试设置:
在您将 LDAP 服务器添加为用户目录后,Jira 会自动开始同步其用户和组数据。根据 LDAP 的大小,初始同步可能需要几分钟才能完成。您可以点击“返回目录列表”链接,查看同步过程的状态。
一旦过程完成,您将能够看到所有的 LDAP 用户和组,并使用您的 LDAP 凭据访问 Jira。
它是如何工作的...
我们刚刚在此配方中创建的内容被称为连接器。通过连接器,Jira 首先从 LDAP 拉取用户和组信息,然后创建本地副本。之后,它会定期同步任何变化。
所有身份验证将委托给 LDAP。因此,如果用户的密码在 LDAP 中更新,当用户尝试登录 Jira 时,它将立即反映出来。需要注意的是,使用 LDAP 时,用户仍然必须在必要的组中(例如,默认情况下为 jira-users
),才能访问 Jira。因此,您需要确保在 LDAP 中创建一个名为 jira-users
的组并将所有人添加到其中,或者授予应用程序对 LDAP 组的访问权限,例如名为 all-employees
的组。
此外,请注意,只有具有 Jira 访问权限的用户才会计入您的许可证数量。这包括已获得 Jira 应用访问权限的用户所在的组。
另请参见
如果你的 LDAP 中有大量用户,且你只希望使用 LDAP 进行身份验证,你可以参考下一个教程,仅用于身份验证的 LDAP 集成。
仅用于身份验证的 LDAP 集成
有时,你可能只需要使用 LDAP 进行身份验证,并希望将用户组成员关系与 LDAP 分开,以便于管理。在本教程中,我们将介绍如何仅将 Jira 与 LDAP 进行身份验证集成。
准备工作
对于本教程,你需要有一个运行中的 LDAP 服务器。你需要确保 Jira 服务器能够访问 LDAP 服务器。更多详情,请参考前一个教程,从 LDAP 集成和导入用户。
如何操作...
按照以下步骤将 Jira 与 LDAP 服务器仅用于身份验证进行集成:
-
转到管理 > 用户管理 > 用户目录。
-
点击添加目录按钮并选择“内部与 LDAP 身份验证”选项。
-
输入 LDAP 服务器和架构设置。大多数参数与创建普通 LDAP 连接时使用的相同,但也有少数例外。请参阅下表获取详细信息。
-
点击快速测试按钮以验证 Jira 与 LDAP 的连接性。
-
如果与 LDAP 连接没有问题,点击保存并测试按钮。
下表列出了专门针对“内部与 LDAP 身份验证”选项的配置参数:
服务器设置 | 描述 |
---|---|
登录时复制用户 | 该选项会在用户首次成功登录 Jira 时自动将用户从 LDAP 复制到 Jira 中。 |
默认组成员关系 | 该选项会在用户首次成功登录 Jira 时自动将用户添加到此处指定的组中。此设置不会回溯到现有用户。这个功能可以确保每个能够登录 Jira 的用户都会被添加到必要的组中,例如jira-users 。 |
同步组成员关系 | 该选项会在用户成功登录时自动将用户的组成员关系复制到 Jira。 |
工作原理...
这个身份验证选项与前一个教程类似,但有一些关键区别:
-
LDAP 仅用于身份验证
-
Jira 在用户首次登录后不会定期同步来自 LDAP 的用户和组信息
-
Jira 对 LDAP 具有只读访问权限
-
组成员关系在 Jira 内部管理
通过此设置,每当用户首次成功登录 Jira 时,用户会从 LDAP 复制到 Jira 的本地用户库,并附带组成员关系(如果已配置)。由于 LDAP 仅在身份验证时使用,且没有同步所有用户信息的初始开销,因此对于需要在 LDAP 中同步大量用户的组织而言,此选项能提供更好的性能。
与 Atlassian Crowd 集成
在之前的配方中,仅用于身份验证的 LDAP 集成,我们探讨了如何将 Jira 与 LDAP 服务器集成以获取用户和组信息。除了使用 LDAP,另一个流行的选项是使用Crowd,可在www.atlassian.com/software/crowd/overview
获取。
Crowd 是 Atlassian 的用户身份管理解决方案,Jira 原生支持与 Crowd 的集成。使用 Crowd,你还可以与其他支持 Crowd 的应用程序设置单点登录选项。
准备开始
对于本配方,你需要确保 Crowd 服务器已经启动并运行。你需要确保 Jira 服务器能够顺利访问 Crowd 服务器——例如,确保没有被防火墙阻塞。
至少,你还需要以下信息:
-
Crowd 服务器 URL
-
Crowd 中为 Jira 注册的应用程序的凭证
如何操作...
按照以下步骤将 Jira 与 Crowd 集成进行用户管理:
-
转到 管理 > 用户管理 > 用户目录。
-
点击 添加目录 按钮并选择 Atlassian Crowd 选项。
-
输入 Crowd 服务器设置。有关详细信息,请参考下表。
-
点击 测试设置 按钮以验证 Jira 与 Crowd 的连接。
-
如果与 Crowd 连接没有问题,点击 保存并测试 按钮。
下表列出了设置与 Crowd 集成的配置参数:
服务器设置 | 描述 |
---|---|
名称 | 这是 Crowd 服务器的标识符。 |
服务器 URL | 这是 Crowd 的服务器 URL。 |
应用程序名称 | 这是 Jira 在 Crowd 中的注册应用程序名称。 |
应用程序密码 | 这是注册应用程序的密码。 |
Crowd 权限 | 这是列标题。 |
只读 | 如果不希望 Jira 对 Crowd 进行任何更改,请选择此选项。如果一切,包括用户的组成员身份,都是由 Crowd 管理的,这个选项是理想的。 |
读/写 | 选择此选项以允许 Jira 将任何更改同步回 Crowd。 |
高级设置列在下表中:
高级设置 | 描述 |
---|---|
启用嵌套组 | 这允许组包含其他组作为成员。 |
启用增量同步 | 这将只同步增量数据。启用此选项可以帮助提高性能。 |
同步间隔 | 这决定了 Jira 与 Crowd 同步更改的频率(单位:分钟)。较短的间隔可能会导致性能问题。 |
另见
请参阅 如何设置与 Crowd 的单点登录 配方,了解如何利用 Crowd 的单点登录功能,集成 Jira 和其他支持 Crowd 的应用程序。
设置与 Crowd 的单点登录功能
在之前的教程中,我们已经查看了 Jira 使用外部集中式用户存储库(包括 Crowd)的不同选项。将 Jira 与 Crowd 集成的一个优势是其 单点登录 (SSO) 功能。
与 Crowd 集成的基于 Web 的应用程序能够参与 SSO 环境,因此当用户登录到一个应用程序时,他/她将自动登录到所有其他应用程序。
如果你正在寻找 Windows 环境中的单点登录功能,在该环境中用户将自动登录到应用程序并与工作站同步,请阅读下一个教程,设置 Windows 域单点登录。
准备工作
在你可以通过 Crowd 设置 SSO 之前,你首先需要将 Jira 与 Crowd 集成以进行用户管理。详细信息请参阅 与 Atlassian Crowd 集成 的教程。
如果你已经将 Jira 与 Crowd 集成,你需要拥有以下信息:
-
分配给 Jira 在 Crowd 中的应用程序名称
-
Jira 访问 Crowd 的密码
-
从
CROWD_INSTALL/client/conf
目录复制一份crowd.properties
文件
如何操作...
按照以下步骤启用与 Crowd 的 SSO:
-
如果 Jira 正在运行,请先关闭它。
-
在文本编辑器中打开位于
JIRA_INSTALL/atlassian-jira/WEB-INF/classes
目录中的seraph-config.xml
文件。 -
找到包含
com.atlassian.jira.security.login.JiraSeraphAuthenticator
的行。将其注释掉,使其看起来如下所示:
<!--
<authenticator class="com.atlassian.jira
.security.login.JiraSeraphAuthenticator"/>
-->
- 找到包含
com.atlassian.jira.security.login.SSOSeraphAuthenticator
的行。取消注释它,使其看起来如下所示:
<authenticator class="com.atlassian.jira
.security.login.SSOSeraphAuthenticator"/>
-
将
crowd.properties
文件复制到JIRA_INSTALL/atlassian-jira/WEB-INF/classes
目录。 -
在文本编辑器中打开
crowd.properties
文件并更新下表中列出的属性。 -
重新启动 Jira。
下表列出了 crowd.properties
文件中的配置参数:
参数 | 值 |
---|---|
application.name |
这是在 Crowd for Jira 中配置的应用程序名称。 |
application.password |
这是应用程序的密码。 |
application.login.url |
这是 Jira 的基础 URL(你可以从 Jira 的常规配置中获得该 URL)。 |
crowd.base.url |
这是 Crowd 的基础 URL。 |
session.validationinterval |
这是 Crowd SSO 会话保持有效的时间(以分钟为单位)。将此设置为 0 将立即使会话失效,并且会产生性能负担。建议将此值设置为更高的值。 |
一旦 Jira 重新启动,它将参与所有启用 Crowd SSO 的应用程序中的 SSO 会话——例如,如果你有多个与 Crowd 集成的 Jira 实例用于 SSO,你只需要登录其中一个 Jira 实例。
在进行任何更改之前,请确保你已经备份了该文件。
设置与 Google 的单点登录
如果您的组织使用 Google 来管理用户信息,或者您仅仅希望允许拥有有效 Google 账户的人能够登录到您的 Jira 实例(特别是如果它是一个公共实例),您可以将 Jira 与 Google 集成,让用户可以通过点击一次按钮,使用他们的 Google 账户详细信息登录 Jira。
准备工作
对于本教程,我们需要 Jira CLI。您可以在docs.appfusions.com/display/GAPPSAUTHJ/Downloads+and+Notes
下载。
如何操作...
配置与 Google 的 SSO 的第一步是通过以下步骤创建一组 Google API 凭据:
-
访问 Google API 控制台:
console.developers.google.com/apis/credentials
。 -
点击“创建凭据”下拉菜单。
-
选择 OAuth 客户端 ID,然后选择 Web 应用程序。
-
输入 API 凭据的名称,并输入 Jira 的 URL 作为授权的 JavaScript 来源。
-
创建新的 API 凭据并记下客户端 ID 和客户端密钥:稍后我们会用到它们。
创建好 Google API 凭据后,我们可以配置 SSO 集成:
-
进入 管理 > 管理应用 > Google SSO。
-
点击页面底部的“编辑此配置…”链接。
-
输入之前记下的客户端 ID 和客户端密钥。
-
选择您希望 Google 登录按钮显示在登录页面的位置。
-
点击“保存”以应用更改:
由于我们将通过 Google 登录 Jira,建议禁用 web sudo
,因为 Jira 无法识别 Google 用户账户的密码。
配置好 Google API 凭据后,Jira 登录页面将显示一个新的“使用 Google 登录”按钮,如下图所示:
点击该按钮后,如果您尚未登录 Google,它将带您到 Google 的登录页面,或者如果您已经登录 Google,则直接通过,之后您就可以登录 Jira 了。
配置 Windows 域单点登录
如果您的组织运行 Windows 域,您可以配置 Jira,使得用户在使用工作站登录域时能够自动登录。
准备工作
对于本教程,我们需要为 Jira 配置 Kerberos SSO 验证器。您可以在www.appfusions.com/display/KBRSCJ/Home
下载。
您还需要进行以下设置:
-
在 AD 中为 Jira 创建的服务账户
-
Jira 的 服务主体名称 (SPN)
如何操作...
配置 Windows 域 SSO 并不是一项简单的任务,因为它涉及到网络配置的多个方面。强烈建议您与产品供应商和熟悉您的 AD 环境的人员合作,以确保顺利实施。
按照以下步骤设置 Windows 域 SSO:
-
如果 Jira 正在运行,请关闭它。
-
将
login.conf
、krb5.conf
和spnego-exclusion.properties
复制到JIRA_INSTALL/atlassian-jira/WEB-INF/classes
目录中。 -
将
appfusions-jira-seraph-4.0.0.jar
和appfusions-spnego-r7_3.jar
复制到JIRA_INSTALL/atlassian-jira/WEB-INF/lib
目录中。 -
使用文本编辑器打开位于
JIRA_INSTALL/atlassian-jira/WEB-INF
目录中的web.xml
文件。 -
在
THIS MUST BE THE LAST FILTER IN THE DEFINED CHAIN
条目之前添加以下 XML 片段。确保你更新以下参数的值:-
对于
spnego.krb5.conf
,使用spnego.krb5.conf
文件的完整路径。 -
对于
spnego.login.conf
,使用spnego.login.conf
文件的完整路径。 -
对于
spnego.preauth.username
,使用服务账户的用户名。 -
对于
spnego.preauth.password
,使用服务账户的密码:
-
<filter>
<filter-name>SpnegoHttpFilter</filter-name>
<filter-class>net.sourceforge.spnego
.SpnegoHttpFilter</filter-class>
<init-param>
<param-name>spnego.allow.basic</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>spnego.allow.localhost
</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>spnego.allow.unsecure.basic
</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>spnego.login.client.module
</param-name>
<param-value>spnego-client</param-value>
</init-param>
<init-param>
<param-name>spnego.krb5.conf</param-name>
<param-value>FULL_PATH/krb5.conf
</param-value>
</init-param>
<init-param>
<param-name>spnego.login.conf</param-name>
<param-value>FULL_PATH/login.conf
</param-value>
</init-param>
<init-param>
<param-name>spnego.preauth.username
</param-name>
<param-value>SPN_USERNAME</param-value>
</init-param>
<init-param>
<param-name>spnego.preauth.password
</param-name>
<param-value>SPN_PASSWORD</param-value>
</init-param>
<init-param>
<param-name>spnego.login.server.module
</param-name>
<param-value>spnego-server</param-value>
</init-param>
<init-param>
<param-name>spnego.prompt.ntlm</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>spnego.logger.level</param-name>
<param-value>1</param-value>
</init-param>
<init-param>
<param-name>spnego.skip.client.internet
</param-name>
<param-value>false</param-value>
</init-param>
</filter>
- 在
login
条目之前添加以下 XML 片段:
<filter-mapping>
<filter-name>SpnegoHttpFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
-
使用文本编辑器打开位于
JIRA_INSTALL/atlassian-jira/WEB-INF/classes
目录中的seraph-config.xml
文件。 -
找到包含
com.atlassian.jira.security.login.JiraSeraphAuthenticator
的行。将其注释掉,使其如下所示:
<!--
<authenticator class=
"com.atlassian.jira.security
.login.JiraSeraphAuthenticator"/>
-->
- 在被注释掉的那一行下方添加以下 XML 片段:
<authenticator
class="com.appfusions.jira.SeraphAuthenticator"
/>
-
重启 Jira。
-
将你的 Jira 网址添加到浏览器的本地内网区域。
一旦 Jira 重启后,每次你登录 Windows 域时应该会自动登录。确保在进行任何更改之前,也有该文件的备份副本。
第五章:Jira 安全性
安全性是任何信息系统中最重要的方面之一。在 Jira 中,这包括管理不同级别的访问权限,并确保信息仅对授权用户可访问。
在本章中,我们将涵盖 Jira 中不同级别的访问控制。我们还将涵盖其他与安全相关的话题,包括强制执行密码强度以及捕获和审计 Jira 中的变更以符合监管要求。
在本章中,我们将涵盖以下内容:
-
授予 Jira 访问权限
-
授予 Jira 系统管理员访问权限
-
控制对项目的访问
-
控制对 Jira 问题操作的访问
-
允许用户控制权限
-
委派管理员权限
-
基于报告者权限限制对项目的访问
-
设置密码策略
-
捕获变更的电子签名
-
更改“记住我”cookie 的持续时间
-
更改默认会话超时时间
授予 Jira 访问权限
由于 Jira 现在是一个平台,包含 Jira Core、Jira Software、Jira Service Desk 和其他第三方应用程序,您可以在同一平台实例上运行多个应用程序。这是因为用户访问权限是按应用程序级别授予的。在此食谱中,我们将查看如何管理对 Jira 中应用程序的访问。
如何操作...
要授予组对 Jira 的访问权限,请执行以下步骤:
-
以 Jira 管理员身份登录 Jira。
-
导航到 管理> 应用程序 > 应用程序访问。
-
选择并添加组以获取对应用程序的访问权限:
现在是时候查看这些步骤是如何工作的了。
它是如何工作的...
从 JIRA 7 开始,Atlassian 引入了应用程序的新概念。这使得 Jira 成为一个平台,主要功能,如 JIRA Agile(现称 Jira Software)和 Jira Service Desk,现在是分别运行在 Jira 平台上的独立应用程序。这些变化意味着现在您可以单独控制用户对每个应用程序的访问权限。您不再使用权限控制谁可以访问 Jira,而是可以根据应用程序分配访问权限。
在授予应用程序访问权限时,您只能通过 组来进行。所以,您需要确保您已经适当地设计了组,以便用户能够访问正确的应用程序。
如果您在具有 Jira 管理员全局权限的组中(参见下一条食谱),如 jira-administrators
,但该组没有访问 Jira Software 应用程序的权限,那么您仍然可以登录 Jira 并执行管理任务,但无法访问任何项目和问题。
还有更多...
如果你已经在应用访问页面为某个应用分配了多个组,可以选择一个或多个组作为默认组。这意味着,当新用户添加到系统时,他们将自动添加到默认组,从而可以立即开始使用 Jira。
授予 Jira 系统管理员权限
在之前的教程中,我们展示了如何授予用户对 Jira 应用的访问权限。在本教程中,我们将探讨如何授予用户管理员权限。与授予用户访问权限的方式相同,您只能向一组用户授予管理员权限。
如何操作...
要向 Jira 中的某个组授予管理员权限,请执行以下步骤:
-
导航到 Administration > System > Global permissions。
-
从 Permissions 列表中选择 Jira System Administrators 选项,并选择要授予访问权限的组,如下图所示:
现在我们来理解这个过程。
它是如何工作的...
Jira 中有两种级别的管理员访问权限:Jira Administrator 和 Jira System Administrator。在大多数情况下,这两者在 Jira 配置方面的功能是相同的,例如自定义字段和工作流。Jira 系统管理员拥有额外的系统级应用配置访问权限,例如 SMTP 邮件服务器配置、安装应用和更新 Jira 许可证。
默认情况下,jira-administrators
组具有 Jira 管理员和 Jira 系统管理员的全局权限。如果您想区分这两种不同级别的管理员权限,可以创建两个独立的组并授予他们不同的权限。
控制项目访问权限
在之前的教程中,我们介绍了如何使用全局权限来控制 Jira 访问权限和管理员级别的访问权限。在本教程中,我们将展示如何控制项目级别的权限,首先从项目访问权限开始。
准备工作
要控制项目级别的访问权限,我们使用权限方案。Jira 自带一个默认的权限方案,所有项目会自动应用此方案。你可以使用此方案并直接更新其权限设置。对于本教程,我们将从创建一个新的权限方案开始,以演示整个过程。如果你想直接使用默认方案,可以跳过前三个步骤。
如何操作...
首先,我们需要创建一个新的权限方案,可以通过以下步骤来完成:
-
导航到 Administration > Issues > Permission schemes。
-
点击 Add Permission Scheme 按钮。
-
输入新方案的名称并点击 Add。
-
创建了权限方案后,我们需要向用户和组授予权限,具体来说,就是Browse Projects权限,该权限控制对项目的访问。
-
点击新权限方案的 Permissions 链接。
-
点击 Browse Projects 权限的 Edit 链接。
-
选择授予权限的对象。例如,如果你只想限制某个组的成员访问,你可以选择组选项,选择目标组,然后点击授予:
我们可以将权限授予多个用户和组,完成后可以将权限方案应用到我们想要的项目中:
-
转到你想要应用权限方案的项目,然后点击管理标签。
-
在左侧选择权限选项,并从操作菜单中点击使用不同的方案选项:
- 选择新的权限方案并点击关联。
它是如何工作的...
权限方案定义了项目级别的权限。与只能授予给组的全局权限不同,这些权限可以授予特定的用户、组、项目角色等。你在这里选择的选项将取决于你的使用场景。一般来说,选择组会是最直接的方式,因为用户通常属于一个或多个组,你可以根据组来轻松建模你的权限需求。其他选项适用于当你有特殊或边缘情况,需要容纳不符合组设置的用户时。一旦权限方案配置完成,你可以将该方案应用到各个项目。通过这种方式,不同的项目可以根据其需求拥有不同的权限方案。
控制对 Jira 问题操作的访问
在本教程中,我们将查看控制问题操作的权限。这些是你的最终用户每天会执行的操作,包括创建、编辑、删除、评论等。
准备工作
正如我们在前面的教程中看到的,你可以使用现有的权限方案或创建一个新的权限方案。对于这个教程,我们将继续使用之前创建的权限方案。
如何操作...
要设置问题操作的权限方案,请执行以下步骤:
-
转到你想要应用权限方案的项目,然后点击管理标签。
-
在左侧选择权限选项,并从操作菜单中点击编辑权限选项:
-
点击你想更新的权限的编辑链接,例如创建问题和编辑问题。请注意,问题相关的权限会归类在问题权限标题下。
-
选择要授予权限的目标,然后点击授予。
还有更多...
如果存在疑问,或者用户报告与权限相关的问题,您可以随时使用权限助手工具(如下图所示)来检查您的配置。您只需输入用户的用户名,选择项目中的问题,选择权限类型,然后点击[提交]。工具将审查您的权限配置,并显示一个报告,解释所选权限所需的条件,以便您了解用户为何具有或不具有所选权限:
当您使用权限助手工具时,即使您想检查项目级权限(例如管理项目),系统始终会要求您选择一个问题。在这种情况下,只需选择属于该项目的问题,工具将为您验证权限。
允许用户控制权限
当在同一个 Jira 项目中有一组混合用户(例如内部员工和外部顾问)时,会出现只有内部员工才能查看的敏感信息的情况。在这些情况下,您将希望将这些实例标记为仅内部可见,以防其他人看到。
在本篇示例中,我们将演示如何使用问题安全方案设置权限以控制问题级别的访问。
如何操作...
设置问题级权限的步骤如下:
-
因为 Jira 不提供任何默认的问题安全方案,所以第一步是从头开始创建一个新的安全方案:
-
点击添加问题安全方案链接。
-
输入新方案的名称,然后点击[添加]。
-
第二步是设置您可以选择的安全级别,例如仅内部用户:
-
点击安全级别链接以查看我们的新问题安全方案。
-
输入每个安全级别的名称,然后点击[添加安全级别]按钮。
-
您还可以点击[默认]链接,将安全级别设为默认选项。这样,在使用问题安全方案创建新问题的项目中,将预先选择默认安全级别。
以下截图显示了三个现有的安全级别:
-
设置了安全级别之后,第三步是授予用户访问您定义的每个安全级别的权限:
-
点击[添加]链接以设置您希望为其设置用户访问权限的安全级别。
-
选择权限选项,然后点击[添加]按钮。
-
以下截图显示了在授予安全级别时您拥有的不同选项:
-
现在,我们已经设置了所有安全级别,最后一步是将问题安全方案应用到我们的项目中:
-
转到您要应用问题安全方案的项目,并点击[管理]选项卡。
-
在左侧选择问题安全选项,并点击操作菜单中的选择方案选项。
-
选择新的问题安全方案并点击下一步。
-
如果项目不为空,Jira 会要求您为所有问题选择一个默认的安全级别。您可以选择无选项,使所有问题保持原样,或者选择一个安全级别,将其应用于所有问题。
-
点击关联按钮:
-
如上图所示,问题安全方案已应用于该项目。
它是如何工作的...
问题安全方案允许您作为终端用户,根据设置的安全级别控制谁可以访问单个问题。具有安全级别的问题只能由符合条件的用户查看。请注意,子任务会继承其父任务的安全级别。
一旦我们将问题安全方案应用于项目,具有设置问题安全权限的用户在创建和编辑问题时,将能够选择一个安全级别,如下图所示:
如果您没有看到安全级别字段,请确保该字段已添加到屏幕中,并且您拥有设置问题安全的权限。您可以使用上一节中介绍的权限帮助功能来验证这一点。
还值得一提的是,您只能选择自己所属的安全级别。例如,如果有两个安全级别,A和B,则安全级别A分配给jira-administrators
组,而安全级别B分配给jira-users
组。那么,作为jira-users
组的成员,您只能选择安全级别B。这样做是为了防止用户因选择错误的安全级别而不小心将自己锁定在某个问题之外。
符合所选安全级别标准的用户能够正常查看该问题。然而,如果不符合标准的用户尝试查看该问题,他们会遇到权限违规错误,如下图所示:
此消息还会通知用户,问题可能已被删除。
委派管理员权限
大多数自定义和配置选项,如工作流和屏幕,都是由 Jira 管理员管理的。虽然这种模式对于小型组织来说可能运作良好,但在大型组织中常常会造成瓶颈,因为需要对这些核心 Jira 功能进行大量的自定义,而真正能够进行这些必要更改的 Jira 管理员数量有限。
在本节中,我们将探讨如何使项目管理员能够在无需完全依赖 Jira 管理员的情况下,自己进行部分自定义操作。
如何操作...
要允许项目管理员进行自定义更改,请执行以下步骤:
-
转到管理 > 问题 > 权限方案。
-
点击项目使用的权限方案下的权限链接。如果该项目没有专用的权限方案,可以通过点击复制链接克隆当前使用的权限方案来创建一个新的权限方案。
-
在管理员项目权限下选中扩展项目管理选项:
一旦权限方案启用了扩展项目管理选项,使用该权限方案的项目管理员将被允许更改项目的工作流和屏幕。
工作原理...
扩展项目管理选项允许项目管理员在某些限制下对工作流和屏幕进行更改:
-
工作流不能被其他项目使用。
-
只能将 Jira 中已存在的状态添加到工作流中。项目管理员不能创建新的状态。
-
如果项目中没有任何问题处于该状态,则可以删除工作流中的现有状态。
-
可以从工作流中删除工作流转换,但不能更改诸如属性、验证器、条件、后置功能和屏幕等详细信息。
-
只能更新非系统屏幕,即 Jira 管理员创建的屏幕。
-
屏幕不能被其他项目使用。
-
只能将现有字段(包括自定义字段和系统字段)添加到屏幕中。
根据报告者权限限制对项目的访问
如前面某些操作中所见,Browse Projects
权限控制谁可以访问 Jira 中的项目。在本操作中,我们将设置权限,使用户只能看到他们能够创建问题的项目,而无法看到他们无法创建问题的项目。
准备工作
由于我们将直接修改 Jira 系统文件,请确保为任何修改过的文件创建备份。此操作还需要重启 Jira,因此请在不会影响用户的时间段内进行。
操作方法...
要根据谁可以或不能报告的标准限制对项目的访问,首先需要启用一个特殊的权限类型,如下所示:
-
使用文本编辑器打开
permission-types.xml
文件,该文件位于JIRA_INSTALL/atlassian-jira/WEB-INF/classes
目录下。 -
找到以下行,并取消注释
reportercreate
权限类型,如下所示:
<!-- Uncomment & use this permission to show only projects
where the user has create permission and issues
within that where they are the reporter. -->
<!-- This permission type should only ever be assigned to
the "Browse Projects" permission. -->
<!-- Other permissions can use the "reporter" or "create"
permission type as appropriate. -->
<!-- <type id="reportercreate" enterprise="true">
<class>com.atlassian.jira.security.type
.CurrentReporterHasCreatePermission</class>
</type>
-->
- 重启 Jira 以使更改生效。
一旦启用reportercreate
权限类型,在权限方案设置中将显示一个新的 Reporter 选项(该选项只显示具有创建权限的项目),如下图所示:
使用此选项为Browse Projects
权限配置的权限方案中的项目,仅对那些可以在项目中创建问题的用户可见。
工作原理...
reportercreate
权限类型检查当前用户是否有权限在给定项目中创建问题。这与默认的 reporter 权限或当前 reporter 权限类型不同,后者使项目对所有用户可见。
此外,请注意,此权限应仅应用于 Browse Projects 权限。如果应用于其他权限,特别是 Create Issues 权限,会导致 Jira 进入无限循环,这也是该权限类型默认禁用的原因。
还有更多……
还有一个类似的 Assignee 权限类型(仅显示具有分配权限的项目),可以在 permission-types.xml
文件中启用。与 reporter 等效的权限类型类似,该权限类型检查用户是否可以在项目中被分配问题。与 reporter 权限类型一样,该权限类型应仅应用于 Browse Projects 权限:
<!-- Uncomment & use this permission to show only projects where the user has the assignable permission and issues within that where they are the assignee -->
<!-- This permission type should only ever be assigned to the "Browse Projects" permission. -->
<!-- Other permissions can use the "reporter" or "create" permission type as appropriate. -->
<!--
<type id="assigneeassignable" enterprise="true">
<class>com.atlassian.jira.security.type
.CurrentAssigneeHasAssignablePermission</class>
</type>
-->
设置密码策略
默认情况下,Jira 允许创建任何组合和长度的密码。出于安全考虑,组织通常需要有密码策略,如密码长度和复杂性要求,以加强密码安全性并使其难以猜测。
在本教程中,我们将演示如何在 Jira 中设置密码策略,以定义密码的强度。
如何操作……
要启用并配置密码策略设置,请执行以下步骤:
-
导航至 Administration > System > Password Policy。
-
从预定义的策略设置中选择;或者,选择 Custom 选项并自行配置设置。
-
点击 Update 按钮启用密码策略,如下图所示:
通常,最好使用自定义选项并设置自己的密码策略,而不是使用预定义选项,因为它可以让您更好地控制并强制为用户提供更安全的密码。
它是如何工作的……
配置了密码策略后,每次有人尝试创建新密码时,Jira 将确保新密码符合策略规则。如果不符合,系统会显示错误消息,并提供关于要求的详细信息,如下图所示:
错误消息显示某些规则未满足。
还有更多……
除了内置的密码策略功能外,还有一个名为 Enterprise Password Policy for Jira 的第三方应用,它提供如密码年龄和用户帐户锁定等功能,使您的 Jira 符合 ISO/IEC 27002 标准。您可以在 marketplace.atlassian.com/plugins/com.intenso.jira.plugins.password-policy
获取该应用。
在你安装完该应用后,Jira 中的“管理应用”下的“管理”部分会出现一个新的“密码策略”栏目。点击“配置”选项,然后点击“密码复杂度”,你就可以设置密码策略,如下图所示:
你需要禁用默认的密码策略功能才能使用该应用。
如前面截图所示,相比 Jira 的开箱即用功能,你有更多选项和控制来定义你的密码策略。
捕捉变更的电子签名
有严格监管要求的组织通常需要在问题流转过程中捕捉电子签名(或电子签名),以便将来审计使用。这通常是 CFR Part 11 合规性的一部分。
在本教程中,我们将探讨如何在有人尝试通过工作流过渡问题时强制执行并捕捉电子签名。
准备工作
对于这个教程,我们需要安装 CFR Part 11 电子签名应用。你可以在docs.appfusions.com/display/PRT11J/Home
下载该应用,然后在管理控制台的“管理应用”中安装它。
如何操作...
要开始捕捉电子签名,首先我们需要创建一个电子签名自定义字段:
-
转到“管理”>“问题”>“自定义字段”。
-
点击“添加自定义字段”按钮并选择“高级”标签。
-
选择“电子签名”自定义字段类型并点击“下一步”。
-
为自定义字段命名为
E-Signatures
并点击“下一步”。 -
选择一个屏幕以放置自定义字段。例如,如果你想在用户解决问题时捕捉签名,你需要选择用于解决问题过渡的屏幕。
-
点击更新按钮:
你需要为你想要捕捉电子签名的操作创建一个屏幕。
操作方式...
一旦你创建了一个电子签名自定义字段并将其添加到一个屏幕上,比如“解决问题”屏幕,它将显示为两个文本字段:一个用于用户名,一个用于密码。
只有当用户通过输入用户名和密码签署该操作时,工作流过渡才能完成,如下图所示:
如果签名验证成功且过渡完成,电子签名将被存储,你可以通过点击网页底部新出现的电子签名问题标签来查看报告:
电子签名应用还提供了一个“限制模式”选项(默认关闭)。此模式要求用户在提供电子签名时使用自己的凭证。你可以通过以下步骤启用此限制模式:
-
导航到 管理 > 管理应用 > 电子签名字段。
-
勾选“受限模式”选项并点击“保存”。
启用后,用户名字段将自动设置为当前用户的用户名,因此您只能使用自己的密码进行签名。
更改“记住我”cookies 的持续时间
当用户选中“在此计算机上记住我的登录”复选框时,用户无需在同一浏览器中重新输入凭据,除非他们显式登出。此外,默认情况下,该功能持续两周。
在本篇教程中,我们将介绍如何更改持续时间,将其扩展到最大可能值,或者将其缩短以符合您的安全要求。
准备工作
由于我们将直接修改 Jira 系统文件,请确保对所有修改的文件进行备份。此操作还需要重新启动 Jira,因此请在不会影响用户的时间段进行计划。
如何操作…
要更改“记住我”cookie 的持续时间,请执行以下步骤:
-
打开
seraph-config.xml
文件,该文件位于JIRA_INSTALL/atlassian-jira/WEB-INF/classes
目录中,使用文本编辑器编辑。 -
定位到
autologin.cookie.age
行,并将param-value
的值更改为所需的秒数:
<init-param>
<param-name>autologin.cookie.age</param-name>
<param-value>1209600</param-value>
</init-param>
- 重新启动 Jira 以使更改生效。
它是如何工作的…
Jira 使用 Seraph 框架(docs.atlassian.com/atlassian-seraph/latest
)来管理其 HTTP 会话 cookie。当选中“记住我”选项时,它会创建 seraph.rememberme.cookie
。
seraph-config.xml
文件用于配置 Seraph 框架,而 autologin.cookie.age
参数用于设置 cookie 的最大年龄。
参见
- 您可以参考更改默认会话超时教程,了解有关如何更改默认会话超时设置的更多详细信息。
更改默认会话超时
默认情况下,每个活跃的用户会话在空闲状态下持续五小时(或 300 分钟)。这意味着用户可以登录并离开计算机最多五小时,他们的浏览器会话仍会保持活跃。
在本篇教程中,我们将介绍如何更改默认的会话超时设置。
准备工作
由于我们将直接修改 Jira 文件,请确保对所有修改的文件进行备份。此操作还需要重新启动 Jira,因此请在不会影响用户的时间段进行计划。
如何操作…
要更改 Jira 中的会话超时设置,请执行以下步骤:
-
打开
web.xml
文件,该文件位于JIRA_INSTALL/atlassian-jira/WEB-INF
目录中,使用文本编辑器编辑。 -
定位到
<session-config>
行,并将session-timeout
的值更改为所需的分钟数:
<session-config>
<session-timeout>300</session-timeout>
</session-config>
- 重新启动 Jira 以使更改生效。
它是如何工作的…
Jira 使用标准的 Java 会话配置文件web.xml
,该文件定义了会话超时时间(以分钟为单位)。你可以参考此链接:http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp/web_xml.html#1017275。
第六章:电子邮件和通知
电子邮件是世界上最重要的通信工具之一。它是一项人们熟悉且对其采纳阻力最小的技术。因此,电子邮件集成如今已成为任何系统的关键功能之一。帮助台系统、客户关系管理系统(CRM)甚至文档管理系统都需要能够发送和接收电子邮件。因此,Jira 自带一整套电子邮件集成功能也就不足为奇了。
在本章中,我们将学习如何配置 Jira,使其在每次有人更改问题时发送电子邮件通知,设置通知规则来管理电子邮件接收者,并创建邮件模板来自定义电子邮件内容。我们还将探讨 Jira 如何处理电子邮件并自动创建问题,从而节省手动输入数据的工作。
在本章中,我们将涵盖以下内容:
-
设置外发邮件服务器
-
从 Jira 发送电子邮件给用户
-
发送问题更新的通知
-
使用自定义模板发送通知
-
禁用外发通知
-
创建邮件处理程序以处理传入电子邮件
-
使用电子邮件更新 Jira 问题
-
设置项目特定的发件人电子邮件地址
设置外发邮件服务器
在本章中,我们将学习如何在 Jira 中设置一个外发邮件服务器,用于直接发送电子邮件给用户或在问题更新时发送自动通知。
准备工作
Jira 需要一个有效的邮件服务器来发送电子邮件,它使用SMTP(即简单邮件传输协议)与邮件服务器通信。因此,您需要以下内容:
-
一个工作中的邮件服务器,要么与 Jira 位于同一服务器上,要么可以通过网络访问
-
连接详细信息,包括邮件服务器的主机、端口、协议(SMTP 或安全 SMTP),以及如果使用自签名证书,则需要 SSL 证书
-
Jira 登录邮件服务器的认证信息
如何操作…
按照以下步骤设置一个外发邮件服务器:
-
以 Jira 管理员身份登录 Jira。
-
导航到管理 > 系统 > 外发邮件。
-
点击配置新的 SMTP 邮件服务器按钮。
-
设置邮件服务器的名称。例如,您可以使用邮件服务器的主机名。
-
设置“发件人”地址字段,用户收到 Jira 发送的电子邮件时将使用此地址。
-
提供一个电子邮件前缀值,该值将添加到每封邮件的主题中。例如,您可以使用
[Jira]
来让用户知道邮件来自 Jira。 -
选择是使用自定义 SMTP 服务器,还是使用 Gmail 或 Yahoo!邮件的服务器。如果使用 Gmail 或 Yahoo!,请确保选择相应的选项并提供访问凭据。如果使用自定义 SMTP 服务器,您需要提供其主机名、端口号以及必要时的凭据。
-
点击测试连接按钮,使用提供的凭据确保 Jira 能够连接到邮件服务器。如果测试成功,点击添加按钮,如下图所示:
你只能设置一个外发邮件服务器。
一旦我们在 Jira 中配置了外发邮件服务器,我们可以发送测试邮件以确保一切正常工作:
-
点击发送测试邮件链接。
-
验证To字段中的电子邮件地址是否是你可以访问的地址。Jira 会自动填充当前登录用户的电子邮件地址。
-
点击发送按钮发送测试邮件。
Jira 会立即向To字段中的地址发送测试邮件(普通通知邮件会排队等待发送),邮件主题和正文内容将按所指定的方式显示,如下图所示。如果出现错误,你可以勾选 SMTP 日志复选框以获取更多错误细节:
我们现在已经成功设置了外发邮件服务器。
从 Jira 向用户发送电子邮件
设置好外发邮件服务器后,我们现在可以直接从 Jira 发送电子邮件了。一个常见的使用场景是发送提醒邮件,比如系统维护通知,发送给 Jira 中的所有人,或者向项目成员发送重要更新。在这个教程中,我们将展示如何使用 Jira 执行这些任务。
准备工作
你必须首先为 Jira 配置一个外发邮件服务器。有关更多详细信息,请参阅前面的教程,设置外发邮件服务器。
如何操作...
按照以下步骤将邮件直接发送给 Jira 中的用户:
-
转到管理 > 系统 > 发送邮件。
-
选择电子邮件的收件人。你可以选择通过项目角色或群组发送电子邮件。例如,要向所有使用 Jira 的用户发送电子邮件,你可以选择jira-software-users群组(如果它是所有用户所在的群组)。
-
输入你的电子邮件主题和正文。
-
如果你不希望收件人看到其他收件人的电子邮件地址,请勾选Bcc复选框。
-
点击发送按钮以发送电子邮件,如下图所示:
这些步骤完成了向用户发送电子邮件的操作。
发送问题更新通知
另一项外发邮件的主要用途是让 Jira 自动发送关于问题变更的通知。例如,如果某个问题被更新,你希望该问题的报告人和处理人收到变更通知。
在本教程中,我们将展示如何设置通知规则,以便相关方能够接收到其问题变更的通知。
准备工作
你必须首先为 Jira 配置一个外发邮件服务器。有关更多详细信息,请参阅设置外发邮件服务器教程。
如何操作...
Jira 使用通知方案来控制在问题发生任何变化时,谁应该接收通知。Jira 自带一个默认的通知方案,默认应用于所有项目。你可以通过点击其通知链接来更新此默认方案的通知设置。然而,在本教程中,我们将创建一个新的通知方案并将其应用到项目。如果你想使用默认通知方案,可以跳过创建新方案的步骤,直接进入第 2 步:
-
按照以下步骤创建一个新的通知方案:
-
导航到管理 > 问题 > 通知方案。
-
点击添加通知方案链接。
-
输入新方案的名称,然后点击添加来创建它。
-
创建新的通知方案后,系统将带你进入该方案的通知设置页面。默认情况下,任何事件都没有设置通知。
-
要将通知接收者添加到事件,请按照以下步骤进行:
-
点击事件的添加链接。
-
选择通知接收者的类型(例如,
组
选项,如下图所示),然后点击添加。
-
你可以通过使用多选事件字段,将一个通知接收者添加到多个事件中。下图展示了添加通知页面的内容:
你可以为每个事件添加尽可能多的通知接收者,Jira 不会向同一用户发送重复的邮件。例如,如果你设置了报告人和指派人都接收某个事件的通知,并且他们恰好是同一个用户,Jira 只会发送一封邮件,而不是两封。另外,请注意,Jira 在发送通知时会考虑权限。如果某个用户没有访问权限,Jira 将不会向该用户发送通知。
-
最后一步是将我们新的通知方案应用到项目中:
-
浏览到你想要应用通知方案的项目。
-
点击项目设置选项。
-
从左侧面板中选择通知选项。
-
从操作菜单中选择使用不同的方案。
-
选择新的通知方案,然后点击关联。
-
它是如何工作的...
Jira 使用一个事件系统,其中每个问题操作,如创建新问题或工作流转换,都将触发一个相应的事件。正如我们所看到的,通知方案将事件映射到通知接收者。通过这种方式,我们能够设置灵活的通知规则,通知不同的人不同的事件。
Jira 提供了许多不同的通知接收人类型。有些接收人类型,如当前指派人和报告人,非常简单——它们分别仅使用当前问题的指派人和报告人字段的值。其他选项,例如用户自定义字段值,可以非常灵活。例如,你可以创建一个多用户选择自定义字段,并为每个问题指定不同的用户列表作为接收人,而无需修改实际的通知方案。
事件也会映射到邮件模板,以便 Jira 知道使用哪个模板来设置主题和正文。系统事件的映射无法更改,但正如我们在下一步中看到的,我们可以创建自定义事件并选择使用哪些模板。
还有更多...
自动接收 Jira 中发生的任何更改的通知非常方便,但如果你有一个繁忙的 Jira,你可能会因为更新太多而陷入大量邮件中。为了解决这个问题,你可以启用新的邮件批量处理功能。启用批量处理后,Jira 不会为每个更新单独发送邮件,而是将一个问题的所有更新进行分组,并发送一封汇总邮件给你。要启用邮件批量处理,请按以下步骤操作:
-
进入“管理” > “系统” > “批量邮件通知”。
-
勾选“批量邮件通知”选项以启用该功能。
使用自定义模板发送通知
在之前的教程《发送问题更新通知》中,我们查看了如何通过将事件映射到通知接收人来设置通知方案。
在本教程中,我们将进一步探讨如何创建自定义事件和模板用于通知。这有两个优势:
-
我们可以自定义通知邮件的内容和外观。
-
我们可以精确指定每个工作流转换将触发的事件,并相应地设置通知规则。
我们将创建一个新事件,表示管理层已批准的请求。此事件将在批准的工作流转换中触发,并应用自定义模板。
如何操作...
第一步是创建我们的自定义邮件模板。所有邮件模板都存储在JIRA_INSTALL/atlassian-jira/WEB-INF/classes/templates/email
目录下,通常,对于 Jira 中的每个事件,有三个模板文件:
-
主题模板:这是邮件主题行的模板文件,存储在
subject
子目录中。 -
文本模板:这是发送文本格式邮件的模板文件,存储在
text
子目录中。 -
HTML 模板:这是发送 HTML 格式邮件的模板文件,存储在
html
子目录中。
要开始创建我们自己的电子邮件模板,首先需要创建前面提到的三个模板文件,并将它们放置在各自的目录中。特别注意,所有三个文件需要具有相同的文件名并且扩展名为 .vm
。
我们将从主题模板开始,如下所示:
- 在
subject
子目录下创建一个名为issueapproved.vm
的新文件,并添加以下代码片段:
#disable_html_escaping()
$eventTypeName - ($issue.key) $issue.summary
- 现在我们需要创建电子邮件的正文,记住要创建两个版本——一个是文本版本,一个是 HTML 版本。以下代码片段显示了 HTML 版本;对于文本版本,只需删除 HTML 标记即可。注意,HTML 和文本模板文件需要是相同的——即
issueapproved.vm
:
#disable_html_escaping()
Hello $issue.reporterUser.displayName,
<p>
Your request <a href="">$issue.key</a> has been approved, with the comment below:
</p>
<blockquote>
<p>
#if($comment.body)
$comment.body
#else
<i>No comment</i>
#end
</p>
</blockquote>
<br/>
Internal IT team
-
在创建完所有三个模板文件后,我们需要在 Jira 中注册它们,以便在创建自定义事件时可以选择这些模板。要注册新的电子邮件模板,打开
email-template-id-mappings.xml
文件,可以在JIRA_INSTALL/atlassian-jira/WEB-INF/classes
目录下找到该文件。 -
email-template-id-mappings.xml
文件列出了 Jira 中所有的电子邮件模板,因此我们需要在文件末尾添加一个新条目,如下所示:
<templatemapping id="10002">
<name>Issue Approved</name>
<template>issueapproved.vm</template>
<templatetype>issueevent</templatetype>
</templatemapping>
这里有几个要注意的要点:
-
<templatemapping>
的id
值需要是唯一的。 -
你可以为
<name>
元素赋予任意值,它将在 Jira 中显示。遵循标准的 Jira 事件命名规范是一个良好的实践。 -
<template>
元素应为我们创建的自定义模板文件的名称。所有三个文件需要具有相同的文件名,因为我们只能有一个<template>
元素。 -
<templatetype>
元素需要设置为issueevent
。
添加条目并保存文件后,你需要重启 Jira 才能应用这些更改。
现在我们已经准备好了自定义电子邮件模板,可以创建将使用这些新模板的自定义事件。按照以下步骤在 Jira 中创建自定义事件:
-
导航到 管理 > 系统 > 事件。
-
为新事件的名称输入
Issue Approved
。 -
选择我们刚刚创建的 Issue Approved 模板。
-
点击 添加 按钮以创建新事件:
创建完事件后,它将出现在通知方案中,我们可以通过配置通知方案来选择接收电子邮件通知的人——如下图所示。每当问题被批准时,报告人和用户 Christine 都会收到通知:
最后一步是确保当用户触发操作时,我们的自定义事件被触发:
-
导航到 管理 > 问题 > 工作流。
-
点击工作流的编辑链接,工作流中包含触发自定义事件的过渡。在这个例子中,我们将使用一个简单的审批工作流,其中包含一个名为Approve的过渡:
-
点击工作流过渡,选择后置功能标签。通常,你会看到列表中最后一个后置功能触发通用事件。
-
将鼠标悬停在后置功能上,点击编辑图标(看起来像铅笔)。
-
选择新的
Issue Approved
事件并点击更新,如以下截图所示。这样会使过渡触发我们的自定义事件,而不是默认的通用事件:
让我们看看这些步骤是如何工作的。
它是如何工作的...
Jira 的电子邮件模板使用 Apache Velocity(velocity.apache.org
)模板语言来展示动态数据。每个模板都是静态文本(有或没有 HTML 标记)和一些 Velocity 代码的混合。如果你不需要动态内容,那么你的模板中就可以只有静态文本。
在我们之前的示例中,每次看到美元符号($
)时,比如在短语$issue.key
中,它表示一段 Velocity 代码。$
符号是从 Velocity 上下文中获取变量的指令,而变量名是紧跟在$
符号后面的单词,因此在这种情况下,变量名是issue
。句点字符(.
)是获取指定值的指令。所以,$issue.key
可以理解为从变量 issue 中获取 key 的值,或者换句话说,给我 issue 的 key。
Jira 在其 Velocity 上下文中暴露了多个变量供电子邮件模板使用;你可以在confluence.atlassian.com/display/JIRA041/Velocity+Context+for+Email+Templates
找到完整的列表。
所以,如果我们看看我们的模板,对于主题模板,($issue.key) $issue.summary
的 Velocity 代码将被转换为类似IT-10 Request for Jira administrator access
的内容,其中IT-10
替换了$issue.key
,Request for Jira administrator access
替换了$issue.summary
。
你还可以在 Velocity 模板中使用条件逻辑。在我们的示例中,我们有一个if/else
条件。我们检查是否有评论伴随批准的过渡,如果有,我们将显示该评论。如果没有评论,我们将简单地以斜体字体显示“无评论”。
以下截图展示了我们创建的自定义模板生成的示例电子邮件,显示在 Gmail 中:
现在,进入自定义问题批准事件。与系统事件不同,自定义事件只能通过工作流过渡(或自定义脚本代码)触发,因此我们必须更新工作流。每个工作流过渡都会触发一个事件,默认情况下,触发的是通用事件。这意味着大多数工作流过渡将使用相同的通知接收者和电子邮件模板。
通过配置工作流来触发我们自己的自定义事件,我们可以更精细地控制谁接收通知以及使用哪些模板。
禁用外发通知
本教程展示了如何完全阻止 Jira 发送电子邮件。如果你正在进行测试、数据迁移或克隆一个新的开发实例,并且不想让用户收到数百条测试通知,你可能需要这样做。
操作步骤...
按照以下步骤禁用 Jira 中的外发通知:
-
导航到管理 > 系统 > 外发邮件。
-
点击禁用外发邮件按钮。
一旦禁用外发邮件,Jira 将不再发送通知。如果你想重新启用外发邮件,只需点击“启用外发邮件”按钮,Jira 将重新开始发送邮件。
创建邮件处理器以处理传入的电子邮件
Jira 不仅能够向用户发送电子邮件,还能够轮询和处理电子邮件。它还可以创建问题或向现有问题添加评论。当配置正确时,这可以是一个强大的方式,让用户与 Jira 进行交互。
在本教程中,我们将设置 Jira 轮询传入的电子邮件,以便它可以创建新问题并向现有问题添加评论。这在帮助台场景中非常有用,客户可以向公司支持电子邮件地址发送电子邮件,Jira 会自动从中创建问题。
准备就绪
由于 Jira 将从邮箱中轮询电子邮件,你需要获取其连接详情,包括以下内容:
-
它支持的协议(例如,POP或IMAP)
-
身份验证详情
操作步骤...
配置 Jira 处理来邮件的第一步是设置 Jira 用来轮询电子邮件的邮箱:
-
导航到管理 > 系统 > 传入邮件。
-
点击“添加 POP/IMAP 邮件服务器”按钮。
-
输入新邮件服务器的名称。稍后我们在添加邮件处理器时将使用这个名称。
-
提供凭证并点击“测试连接”按钮,确保 Jira 能够连接到邮件服务器。如果测试成功,点击“添加”按钮。设置好邮箱后,我们可以在 Jira 中设置所谓的邮件处理器来轮询和处理电子邮件。在本教程中,我们将使用最常见的处理器根据电子邮件内容创建和/或评论问题。
-
点击“添加传入邮件处理器”按钮。
-
输入邮件处理器的名称。
-
从“服务器”下拉列表中选择刚刚添加的邮件服务器。
你可以使用本地文件选项来测试你的配置。这允许你将测试邮件放在文件系统中,这样你就不必每次都发送测试邮件。
-
设置延迟计时器,以确定处理器多久轮询一次新邮件。通常,你不应将时间设置得太短:
5
分钟通常是一个合适的延迟时间。 -
选择
创建一个新问题或向现有问题添加评论
处理器。 -
点击 Next 按钮以配置邮件处理器,如下图所示:
-
输入邮件处理器的配置细节。最重要的配置如下:
-
项目:你只能选择一个项目。所有来自收件箱的邮件将进入所选项目。
-
问题类型:这是将用来创建新问题的类型。
-
创建用户:如果你希望根据电子邮件地址自动创建新账户,请勾选此项。请注意,这将计入你的许可证席位。
-
默认报告人:如果你不想创建新账户,可以选择一个现有的 用户 作为所有通过邮件创建的新问题的报告人。
-
-
点击添加按钮以创建邮件处理器。
下表解释了你需要设置的各种参数:
参数 | 描述 |
---|---|
项目 | 这是新问题将被创建的项目。请注意,这仅用于创建新问题。当添加评论时,忽略此项,因为评论将添加到主题中指定的问题键。 |
问题类型 | 这是所有新创建问题的默认问题类型。 |
去除引号 | 如果选中此选项,括在引号中的文本将不会作为问题描述或评论使用。 |
捕获邮件地址 | 如果选择此选项,带有指定地址的邮件将会被处理。 |
批量处理 | 该选项决定如何处理自动生成的邮件,如来自 Jira 的邮件。此选项旨在防止创建循环,其中 Jira 向其正在轮询的相同收件箱发送邮件。 |
转发邮件 | 该选项设置一个地址,Jira 会将其无法处理的所有邮件转发到该地址。 |
创建用户 | 如果无法找到发件人的邮件地址,选中此选项将创建一个新用户。 |
默认报告人 | 该选项设置在无法找到发件人邮件地址时使用的报告人。 |
通知用户 | 如果你不希望 Jira 发送与账户相关的邮件,请取消选中此选项。 |
抄送负责人 | 如果希望抄送列表中的第一个用户成为问题的负责人,且能找到匹配的账户,请勾选此选项。 |
抄送观察者 | 如果你希望将抄送列表中的用户作为观察者添加到问题中,且可以找到匹配的账户,请勾选此选项。 |
以下截图显示了这些参数:
是时候查看工作信息了。
它是如何工作的...
邮件处理器会定期从所选的传入邮件服务器轮询新邮件,并根据所使用的处理器进行处理。创建新问题或向现有问题添加评论的处理器会在 Jira 中创建一个新问题,其中电子邮件的主题将成为问题摘要,电子邮件的正文将成为问题描述。如果电子邮件主题包含现有问题的关键字,则电子邮件正文将作为评论添加到该问题中。
-
从未引用的电子邮件正文中添加评论:这会将没有用
>
或|
符号引用的电子邮件正文作为评论添加到现有问题中。 -
将整个电子邮件正文添加为评论:这会将整个电子邮件正文作为评论添加到现有问题中。
-
从每封电子邮件创建一个新问题:这会始终从电子邮件创建一个新问题。
-
在电子邮件正文中的指定标记或分隔符前添加注释:这将在指定为正则表达式的标记行之前添加电子邮件正文内容。标记之后的内容将被忽略。当你不想包含转发邮件中的旧内容时,这个功能非常有用。根据所使用的电子邮件客户端,你需要使用正则表达式(regex)来处理需要排除的文本。对于大多数情况,以下正则表达式会有效:
/From: *|___.*|On .*wrote:|----Orig.*|On
.*(JIRA).*/
使用电子邮件更新 Jira 问题
Jira 开箱即用的邮件处理器主要侧重于根据特定的匹配标准从电子邮件创建新问题或向现有问题添加评论。在本教程中,我们将看看如何通过电子邮件更新现有问题。
准备工作
对于这个教程,我们需要安装 Jira 的企业邮件处理器(JEMH) 应用。你可以从 marketplace.atlassian.com/plugins/com.javahollic.jira.jemh-ui
下载该应用。
如何操作...
一旦安装了应用程序,第一步是创建一个配置文件。你可以将配置文件看作是 Jira 中的配置方案,例如工作流方案。该配置文件包含了处理传入电子邮件所需的所有配置设置。要创建一个新的配置文件,请按照以下步骤操作:
-
导航到 管理 > 管理应用 > 配置 JEMH。
-
在左侧导航面板中选择 配置文件 选项。
-
点击创建配置文件按钮。
-
输入配置文件的名称,在 准备状态 字段中选择
DEVELOPMENT
,然后点击 创建配置文件:
创建好配置文件后,我们需要对其进行配置,使得 JEMH 应用能够知道如何处理传入的电子邮件。第一步是通过以下步骤创建一个传入邮件处理器:
-
导航到 管理 > 系统 > 传入邮件。
-
点击添加传入邮件处理器按钮。
-
输入新邮件处理器的名称。
-
选择 Jira 的企业邮件处理器(JEMH) 作为 处理器 选项,然后点击 下一步。
-
选择我们刚刚创建的 JEMH 配置文件并点击提交:
现在我们已经有了一个与 JEMH 配置文件关联的接收邮件处理程序,下一步是配置它来处理我们的电子邮件内容:
-
点击配置链接,进入我们的 JEMH 配置文件。
-
选择字段处理器选项。
-
启用冒号后缀(Mailform)选项。
-
点击保存按钮。
你可以选择任何格式或格式组合作为字段处理器,通常建议启用多个处理器,这样 Jira 可以理解并处理多种格式。这里的重要一点是,无论你选择哪个选项,都需要与最终用户进行沟通,以便他们理解如何编写电子邮件,使其能够被 Jira 成功处理。
查看以下截图:
这是设置接收邮件处理程序所需的最小配置,这样你就可以通过电子邮件更新问题了。所有配置完成后,测试的最简单方法是使用应用提供的测试用例功能,这样就不需要将真实的邮件发送给所有相关用户。我们可以通过以下步骤来设置:
-
从左侧导航面板中选择测试用例选项。
-
点击创建按钮。
-
在内容文本框中将主题替换为现有问题的关键字。
-
在内容文本框下添加以下内容:
summary: This is a new updated summary
description: This issue is updated via an email.
- 点击更新并运行按钮。
现在你应该能够看到运行测试用例的结果:
如前一张截图所示,测试用例中引用的问题将会其摘要和描述值更改为之前的内容。
它是如何工作的...
JEMH 配置文件包含了应用处理电子邮件所需的所有配置。通过创建一个接收邮件处理程序并选择 Jira 的企业邮件处理程序(JEMH)作为处理程序,Jira 就可以将处理任务交给 JEMH 应用。
我们方案中的一个关键配置是字段处理器。字段处理器决定了电子邮件内容应该如何处理,这直接决定了我们希望电子邮件正确处理时的格式。JEMH 提供了多个处理器,我们选择使用带有 key:value
格式的冒号后缀处理器。因此,在我们的测试用例电子邮件中,我们将要更新的字段名称作为关键字,将要分配给该字段的新值作为值——例如,summary: 这是一个新的总结
。
设置项目特定的发件人电子邮件地址
默认情况下,从 Jira 发送的所有通知将使用相同的发件人地址,该地址作为外发邮件服务器的一部分进行配置;然而,你也可以在项目级别覆盖此设置,从而使每个项目拥有自己的发件人地址。如果你希望用户能够直接回复通知并将回复作为评论添加,这将非常有用。
如何操作...
按照以下步骤设置项目专用的发件人地址:
-
浏览到你希望设置特定发件人地址的项目。
-
点击 项目设置 选项。
-
点击电子邮件通知部分中的铅笔(编辑)图标,如下图所示:
-
输入专门用于该项目的电子邮件地址。
-
点击 更新 以应用更改。
你可以通过留空该字段来恢复默认值。
第七章:与 Jira 的集成
组织越来越多地采用本地部署和基于云的应用程序,以支持其各种业务功能。随着今天的世界变得越来越互联,这些应用程序需要类似地相互关联。业务功能经常需要共同协作,以更有效地实现期望的结果。因此,将 Jira 与其他应用程序集成的能力变得越来越重要。
您可以以多种方式将应用程序集成到 Jira 中,既可以从其他系统获取数据,也可以允许其他系统访问 Jira 的数据。Jira 提供支持与其他 Atlassian 应用程序以及许多其他流行的云应用程序(如 GitHub)集成。除了开箱即用的集成外,还有许多第三方应用程序可以提供与 Google Drive、Slack 等应用程序和平台的集成。最后,还有一种相对较新的方法叫做 webhook,允许任何其他应用程序在发生特定事件时注册 Jira 进行回调。
在本章中,我们将涵盖以下步骤:
-
集成 Jira 与 Confluence
-
将 Jira 与其他 Jira 实例集成
-
集成 Jira 与 Bamboo 用于构建管理
-
集成 Jira 与 Bitbucket Server
-
集成 Jira 与 Bitbucket Cloud 和 GitHub
-
集成 Jira 与 Slack
-
集成 Jira 与 Google Drive
-
使用 Jira webhook
-
使用 Jira REST API
集成 Jira 与 Confluence
您经常会使用 Jira 跟踪工程项目的进展,使用另一个应用程序来管理这些项目的文档。在本步骤中,我们将探讨如何将 Jira 与 Confluence 集成,Confluence 是 Atlassian 的另一个流行应用程序,通常用于文档编制。
准备工作
由于我们将在本步骤中使用 Confluence,您需要在系统上运行 Confluence 的实例。如果没有,您可以从www.atlassian.com/software/confluence
下载免费的 Confluence 试用版。
如何操作...
第一步是建立 Jira 和 Confluence 之间的链接:
-
在 Jira 中导航到 管理 > 应用程序 > 应用链接。
-
将您的 Confluence URL 输入到 应用程序 文本框中,然后点击 创建新链接 按钮。Jira 应自动检测到目标应用程序为 Confluence。如果因某些原因未能检测到,请确保在提示时选择 应用程序 类型为 Confluence,如下图所示:
我们还需要在 Confluence 中启用远程访问 API(默认情况下未启用):
-
作为 Confluence 管理员登录 Confluence。
-
导航到 管理 > 进一步配置。
-
点击 编辑,向下滚动,并勾选 远程 API(XML-RPC & SOAP) 选项。
-
点击 保存 以应用更改:
远程访问 API 现在已启用。
如何工作...
一旦我们将 Jira 与 Confluence 链接,就会出现一个名为 Confluence 页面 的新选项,在你选择 更多问题 菜单中的 链接 选项时会显示,如下图所示:
如果你知道 Confluence 页面的确切 URL,可以将其输入到 页面 URL 字段中,或者点击 搜索页面 链接并搜索你想要链接的页面:
一旦你找到你想要的页面,点击它,然后点击 链接 按钮。你会看到一个类似于下图的页面:
如你所见,链接的页面会显示在 Wiki 页面 类别下的 问题链接 部分。
将 Jira 与其他 Jira 实例集成
如果你的组织中有多个 Jira 实例,有时将它们互联是非常有用的,特别是当不同项目的团队需要协作和共同工作时。在本教程中,我们将集成两个 Jira 实例,以便跨系统链接问题。
如何操作...
按照以下步骤将两个 Jira 实例连接在一起:
-
导航至 管理 > 应用 > 应用链接。
-
输入另一个 Jira 实例的 URL,并创建应用链接。Jira 应该会自动检测到目标应用是 Jira,如下图所示:
如果由于某种原因 Jira 没有自动检测到此项,确保在提示时选择 Jira 作为应用类型。
如何工作...
一旦你通过应用链接将两个 Jira 实例互联,你将能够搜索并将远程 Jira 实例中的问题链接到本地 Jira 实例中的问题。请看下面的截图:
如你所见,当你使用链接功能时,Jira 会提示你选择你想要搜索问题并进行链接的 Jira 实例。
将 Jira 与 Bamboo 集成进行构建管理
Bamboo 是 Atlassian 的持续集成和构建服务器。如果你的开发团队使用 Jira,那么使用 Bamboo 并将两者集成在一起是非常有意义的。
准备工作
由于我们将在本教程中使用 Bamboo,你需要确保 Bamboo 实例正在运行。如果你没有 Bamboo 实例,可以从 www.atlassian.com/software/bamboo
下载免费的 Bamboo 试用版。
如何操作...
由于我们在这里连接的是另一个 Atlassian 应用,我们应该利用应用链接:
-
导航至 管理 > 应用 > 应用链接。
-
输入你的 Bamboo URL 并创建应用链接。Jira 应该会自动将目标应用识别为 Bamboo,如下图所示:
如果由于某种原因,Jira 未能检测到此项,请确保在提示时选择 Bamboo 作为应用类型。
它是如何工作的……
一旦你将 Jira 与 Bamboo 集成,你将能够直接从 Jira 运行和发布构建计划。你只需要选择要发布的版本并选择新的构建与发布选项,如下图所示:
从以下截图中的发布对话框中,你可以选择使用哪个构建计划,并通过点击发布按钮运行构建。如果构建成功,Jira 将在构建完成后自动将版本标记为已发布:
通过集成,另一个功能是你可以在开发问题面板中看到与给定 Jira 问题相关的构建列表:
如你所见,所有的构建现在都已列出。
还有更多……
除了 Bamboo,Jira 还通过第三方应用支持其他构建服务器系统,如 Jenkins 和 Hudson。你可以从marketplace.atlassian.com/plugins/com.marvelution.jira.plugins.jenkins
获取 Jenkins 和 Hudson 的应用。
安装应用后,创建新应用链接时将会有两个新的应用类型可以选择——Jenkins 和 Hudson。
将 Jira 与 Bitbucket Server 集成
Bitbucket 是一个本地部署的企业级 Git 源代码管理工具。它是 Atlassian 的另一个应用,提供所有出色的分布式版本控制系统(DVCS)功能和优势。如果你正在使用 Jira 进行软件开发项目,那么你应该考虑使用 Bitbucket 作为版本控制工具。
在这个教程中,我们将 Jira 与 Bitbucket Server 进行集成,这样开发人员就可以查看给定问题所做的更改。
准备工作
由于我们将在此教程中使用 Bitbucket Server,因此你需要在系统上运行 Bitbucket Server 实例。如果你没有,可以从www.atlassian.com/software/bitbucket
下载免费的 Bitbucket Server 试用版。
如何操作……
按照以下步骤将 Jira 与 Bitbucket Server 集成:
-
导航到管理 > 应用程序 > 应用链接。
-
输入你的 Bitbucket Server URL 并创建应用链接。Jira 应该会自动将目标应用识别为 Bitbucket,如下图所示:
如果由于某些原因,Jira 未能检测到它,请确保在提示时选择 Bitbucket Server 作为应用程序类型。
它是如何工作的...
Jira 与 Bitbucket Server 的集成通过查看您的提交日志来工作,查找以任何问题密钥开头或包含问题密钥的评论。请参见下图:
如果提交评论包含问题密钥,提交将显示在问题的开发面板中。
还有更多内容...
如果您使用的是 Bitbucket Cloud 而不是本地运行的 Bitbucket,请参考下一个教程,了解如何进行集成。
将 Jira 与 Bitbucket Cloud 和 GitHub 集成
Bitbucket Cloud 是 Atlassian 的基于云的代码仓库服务。它提供公共和私人代码仓库,支持 Git 和 Mercurial。它是希望迁移到 DVCS 的组织的一个极佳选择,但不想处理基础设施开销。
在这个教程中,我们将学习如何将我们本地托管的 Jira 与云端的 Bitbucket 进行集成。
准备工作
由于本教程中我们将使用 Bitbucket Cloud,因此您需要拥有一个 Bitbucket 帐户(Git 和 Mercurial 仓库都可以使用)。如果没有帐户,您可以在bitbucket.org
注册一个免费帐户。
如何操作...
第一步是为 Jira 在 Bitbucket Cloud 中创建一个新的消费者,这将生成消费者密钥和密钥:
-
登录到您的 Bitbucket 帐户。
-
导航到 Bitbucket 设置 > OAuth。
-
点击“添加消费者”按钮,位于 OAuth 消费者下方。
-
输入新的 OAuth 消费者名称。您在这里输入的名称将在 Jira 请求访问授权时显示,因此您应该使用一个易于理解的名称,例如
Atlassian Jira
。 -
点击“保存”。这将生成我们在下一步中需要的消费者详细信息:
一旦我们创建了新的消费者,下一步是将消费者密钥和密钥详细信息输入 Jira,如下所示:
-
导航到管理 > 应用程序 > DVCS 帐户。
-
点击“链接 Bitbucket Cloud 或 GitHub 帐户”按钮。
-
选择 Bitbucket Cloud 作为主机选项。
-
输入 Bitbucket 帐户名称、OAuth 密钥和从刚创建的消费者中生成的 OAuth 密钥:
- 点击“添加”以将 Jira 与 Bitbucket Cloud 链接。
一旦 Jira 与 Bitbucket Cloud 建立连接,您将被提示授予 Jira 访问您的 Bitbucket Cloud 帐户的权限。确保消费者名称(加粗)与我们创建的消费者相同,然后点击“授予访问权限”:
让我们理解这些步骤是如何工作的。
它是如何工作的...
Jira 使用 OAuth 作为授权机制从 Bitbucket 获取数据。使用 OAuth 时,获取数据的应用程序称为 消费者,而提供数据的应用程序称为 提供者。
每个消费者都需要在提供者处注册,以生成一对密钥或机密。在第一步中,我们通过在 Bitbucket 中添加新消费者完成了注册:
如果你没有看到 开发问题面板,请确保你拥有查看开发工具项目权限。
默认情况下,开发者项目角色的成员拥有查看开发工具的权限。
还有更多...
正如你在设置过程中可能已经看到的,Jira 也支持 GitHub,包括标准的云版本和企业版本地版本。要与 GitHub 集成,你需要按照相同的步骤操作;但是,在设置 DVCS 账户时,你需要选择 GitHub 而不是 Bitbucket。
使用 GitHub 时,你还需要消费者密钥和机密,这些是注册新应用时在 GitHub 中生成的。你可以按照以下步骤注册应用:
-
登录到你的 GitHub 账户。
-
转到 账户设置 > 开发者设置。
-
选择 OAuth 应用选项卡:
-
点击 新建 OAuth 应用并输入名称。
-
输入 Jira 的 URL,作为 主页 URL 和 授权回调 URL。
-
点击 注册应用程序。
注册应用后,将为 Jira 生成新的客户端密钥和机密对。然后你只需转到 Jira 的 DVCS 账户部分,在将新 DVCS 账户链接到 Jira 时选择 GitHub 作为主机。
集成 Jira 与 Slack
Slack 是全球最受欢迎的基于云的协作工具。它提供持久化聊天室、文件共享、直接消息等功能,支持 Web、桌面和移动设备。Atlassian 与 Slack 形成了战略合作伙伴关系,致力于更好地集成两家公司产品和服务。
在本教程中,我们将把 Jira 与 Slack 集成,这样每次在 Jira 中创建或更新问题时,通知将发送到相应的 Slack 渠道。
准备就绪
由于我们将在此操作中使用 Slack,你需要拥有一个 Slack 账户。如果没有账户,你可以在 slack.com
注册一个免费账户。
集成需要使用 Jira Server for Slack (官方) 应用,这是 Atlassian 官方的应用。你可以从 marketplace.atlassian.com/apps/1220099/jira-server-for-slack-official
获取该应用。
如何操作...
按照以下步骤将 Jira 与 Slack 集成:
-
转到 管理 > 应用 > Slack。
-
点击 Connect Slack teambutton。
-
选择推荐的基本选项,并点击“前往 Slack”按钮,这将把你带到 Slack:
-
登录 Slack(如果尚未登录)并安装 Jira Server Slack 应用。
-
当出现提示时授权访问:
-
返回 Jira,检查凭证文本框是否自动填充了你 Slack 的详细信息。
-
点击保存按钮,集成将会在 Jira 和 Slack 之间建立。
一旦你完成了集成设置,你可以将 Jira 项目与 Slack 频道连接,如下图所示,在该图中,我们已启用通知,并将所有关于 Project Hummingbirds
项目中问题的活动发送到 #hummingbird
频道:
在你将 Jira 项目与 Slack 频道链接之后,问题的更改将出现在 Slack 中。该集成还包括你可以在 Slack 中运行的一些命令;只需在 Slack 中输入 /jira
,它会提示你一系列选项:
除了来自 Atlassian 的官方 Slack 集成应用外,Atlassian 市场上还有其他具有不同功能的第三方应用,你可以尝试。这是 Jira 的一个优势:如果默认选项不适合你的需求,总是可以找到其他选项,如果都不合适,你还可以选择自己创建。
集成 Jira 与 Google Drive
如今,组织普遍使用某种文档管理系统——无论是本地的还是云端的——例如 Google Drive、Box 和 Dropbox。
在本配方中,我们将 Jira 与 Google Drive 集成,以便用户能够从 Jira 中搜索、链接、预览和下载存储在 Google Drive 中的文件。
准备工作
对于此配方,我们需要在 Atlassian Jira 应用中安装 Google Drive。你可以从 www.appfusions.com/display/GDOCSJ/Home
下载并使用 UPM 安装它。
如何操作…
按照以下步骤设置 Jira 和 Google Drive 之间的集成:
-
前往
console.developers.google.com/project
,并按照developers.google.com/identity/protocols/OAuth2
中的说明创建一个新的 OAuth 客户端。 -
从生成的 OAuth 客户端中复制 Google OAuth 客户端 ID 和密钥。
-
导航到 管理 > 管理应用 > Google 配置。
-
将 Google OAuth 客户端 ID 和密钥分别输入到客户端 ID 和客户端密钥字段中。
-
点击保存按钮以完成设置。
下表显示了 Google 配置页面上的字段:
字段 | 描述 |
---|---|
客户端 ID | Google OAuth2 客户端 ID |
客户端密钥 | Google OAuth2 客户端密钥 |
以下是 Google 配置页面的截图:
让我们看看这些步骤是如何工作的。
如何操作...
Google Drive 与 Jira 的集成使用 OAuth,其中每个用户需要首先授权 Jira 代表他们访问 Google Drive。这个过程被称为 OAuth 跳舞。
一旦应用程序安装并配置完成,在查看问题时,可以在 更多 菜单下看到一个新的 链接 Google 文档 字段。点击该选项将弹出一个对话框,您可以浏览或搜索存储在 Google Drive 中的文件。然后,您可以通过勾选相应的复选框来选择要链接的文件:
在选择并链接了所需的文件后,所选文件将列在 问题链接 部分:
根据文件类型,如果您从 Google Drive 获得了必要的权限,您将能够查看、编辑和下载本地的 Google Drive 文件。
还有更多...
有许多其他支持流行云供应商的第三方集成应用程序可用,包括以下:
-
Salesforce:URL 如下:
marketplace.atlassian.com/plugins/com.atlassian.jira.plugin.customfield.crm
。 -
Box:URL 如下:
www.appfusions.com/display/BOXJIRA/Home
。
使用 Jira webhook
在之前的配方中,我们探讨了如何将 Jira 与特定应用程序和平台集成。在这个配方中,我们将探讨 webhook,它是另一种实现与 Jira 集成的方式。
如何操作...
按照以下步骤设置 webhook:
-
导航到 管理 > 系统 > Webhooks。
-
点击 创建 webhook 按钮。
-
输入新 webhook 的名称。此名称应清晰地解释 webhook 的用途和/或目标系统,例如
WebHook for Slack #support channel
。 -
输入目标系统的 URL,以便 webhook 调用。URL 应由目标系统提供。
-
如果向
POST
添加数据会导致错误,请勾选 排除详细信息 复选框。 -
输入 JQL 来定义将触发 webhook 的问题,或为空以适用于所有问题。建议使用 JQL 限制范围。
-
选择将触发 webhook 的问题事件。
-
点击 创建 注册 webhook:
这完成了本配方的步骤。
如何操作...
Webhook 使用基于事件的机制,其中源系统(在此案例中为 Jira)将在注册的事件发生时,通过 HTTP POST
调用所有注册的 webhook。这与 Jira 内部的通知系统非常相似,后者会根据事件发送电子邮件。
使用基于事件的方法,不需要远程应用程序不断轮询 Jira 检查变更,这既低效,又无法满足实时处理变更的需求。远程应用程序可以在 Jira 中注册 Webhook,当事件发生时,Jira 会调用该应用程序。
还有更多...
你还可以通过工作流中的POST
功能触发 Webhook,使用Trigger a Webhook
POST
功能。你只需选择将作为触发器的过渡,添加POST
功能,并选择要触发的 Webhook:
这特别有用,因为 Webhook 配置面板仅列出了某些基本事件类型,而没有列出在工作流中使用的任何自定义事件类型。
使用 Jira REST API
Jira 通过一组 REST API 暴露了许多功能,使其他应用程序能够与其交互。通过这些 API,你可以执行诸如搜索、创建和删除问题等操作。事实上,本书中使用的多个应用程序都利用这些 REST API 来执行其功能。
作为一种基于 Web 的标准,Jira 的 REST API 允许你使用任何技术与之配合。这意味着你可以用 Java、.NET、JavaScript,甚至简单的 bash 脚本来编写代码。
在本食谱中,我们将使用 RESTClient Firefox 插件对 Jira 执行搜索查询,获取当前登录用户分配的问题列表。你还可以使用许多其他工具,例如 cURL 和 Chrome 的 Postman。
如何操作...
按照以下步骤使用 Jira 的 REST API 运行搜索查询:
-
在 Firefox 浏览器中打开 RESTClient。
-
将方法设置为 GET。
-
在 URL 文本框中输入
http://localhost:8080/rest/api/2/search?jql=assignee=currentUser()
。确保将 URL 更改为你的 Jira 实例。 -
选择基本身份验证,并输入你的用户名和密码。
-
点击 SEND 按钮。
你应该在响应部分看到 API 调用的结果。选择 Preview 选项卡,以查看格式化后的 JSON 结果,如下图所示:
现在可以看到 API 调用的结果。
它是如何工作的...
Jira 的 REST API 始终遵循 URI 结构http://host:port/context/rest/api-name/api-version/resource-name
。因此,在我们的示例中,我们正在使用版本 2 的搜索 API。jql
参数包含我们正在运行的实际 JQL 查询。大多数 API 要求你先登录,所以我们配置设置以使用基本身份验证作为 API 调用的一部分。
还有更多...
有一个名为Atlassian REST API Browser (RAB)的应用程序,可以在 Jira 中安装,允许您直接在浏览器中与您的 Jira REST API 进行交互。您可以从marketplace.atlassian.com/plugins/com.atlassian.labs.rest-api-browser/server/overview
获取此应用。
安装完应用程序后,您可以打开浏览器并转到 http://your_jira_instance/plugins/servlet/restbrowser
。您应该会看到一个类似于以下截图的 API 浏览器界面。在左侧,您将看到您的 Jira 实例中所有可用 REST API 的完整列表(基于其版本):
当您单击任何 API 时,浏览器将为您显示所有可用的参数和选项,因此您不再需要手动查找它们。这使您能够快速测试和实验 API,而无需预先编写任何代码或使用任何额外的工具。
第八章:Jira 故障排除与管理
在前几章中,我们已经探讨了 Jira 的不同自定义选项。正如我们所看到的,Jira 是一个复杂的系统,特别是随着自定义项的增多。对于管理员来说,当用户遇到问题并需要支持时,这可能成为一个头疼的问题。
在本章中,我们将学习如何使用工具来排查 Jira 配置问题,这些工具能轻松找出问题的根源。我们还将介绍其他能帮助你作为管理员提高效率的工具,帮助诊断和修复问题,并为用户提供支持。
本章将涵盖以下内容:
-
故障排除通知
-
故障排除权限
-
故障排除字段配置
-
在安全模式下运行 Jira
-
从其他问题跟踪系统导入数据
-
在 Jira 中自动化任务
-
在 Jira 中运行脚本
-
在 Jira 中切换用户会话
-
使用命令行操作 Jira
-
在线查看 Jira 日志
-
管理共享筛选器和仪表板
故障排除通知
本节将介绍如何排查与通知相关的问题,例如确定用户是否收到某个问题的通知,以及确定用户未收到通知的原因。
如何操作...
按照以下步骤排查 Jira 中的通知问题:
-
导航至 管理 > 系统 > 通知助手。
-
选择未按预期接收到通知的用户。
-
选择用户应接收通知的问题。
-
选择应触发通知的通知事件。
-
点击“提交”以开始故障排除。
你也可以在查看问题时,从管理员菜单运行 通知助手 工具。
工作原理...
通知助手工具通过查看所选问题的项目所使用的通知方案设置来工作,并验证所选用户是否符合其中一项通知。
让我们看看下面的截图:
用户 Christine Johnson 不应接收到有关 HUM-14 问题的通知,因为她既不是报告人,也不是指派人,也不是该问题的观察者。
还有更多内容...
当然,除了你的通知方案设置外,你还需要检查 Jira 是否能够成功发送外发邮件(参见 第六章中的 设置外发邮件服务器 章节,电子邮件和通知),并且确保通知邮件没有被过滤到用户的垃圾邮件文件夹。
故障排除权限
本节将介绍如何排查由于权限设置导致的问题,例如用户无法查看问题。
如何操作...
按照以下步骤排查 Jira 中的权限问题:
-
导航至 管理 > 系统 > 权限助手。
-
选择受影响的用户。
-
选择用户预期有权限的相关问题。
-
选择用户应当访问的权限类型。
-
点击提交以开始排查问题。
你还可以在查看问题时,从权限助手工具中通过管理菜单运行它。
它是如何工作的...
权限助手工具通过查看选定问题的权限方案和安全方案设置来工作。它验证所选用户是否具备执行必要操作所需的权限。
如下图所示,用户 Eric Lin 没有权限删除 HUM-10 问题,因为他在该项目中没有管理员角色:
这完成了我们的教程。
排查字段配置问题
在本教程中,我们将确定为什么在查看问题时某个字段没有显示,并且查看如何排查问题。
如何操作...
按照以下步骤排查字段未显示的原因:
-
导航到缺失字段的相关问题。
-
从管理菜单中选择“我的字段在哪里?”选项:
- 选择缺失的字段开始排查问题。
它是如何工作的...
字段助手工具检查与字段相关的配置,包括以下内容:
-
字段上下文:这会检查该字段是否为自定义字段。然后,工具会检查该字段是否有与当前项目和问题类型组合匹配的上下文。
-
字段配置:这会验证该字段是否设置为“隐藏”。
-
屏幕:这会验证字段是否根据屏幕方案和问题类型屏幕方案放置在当前屏幕上。
-
字段数据:这会验证当前问题是否为字段提供了值,因为没有值的自定义字段通常不会显示。
让我们看一下以下截图:
“总评论”是一个自定义字段,未显示的原因是它没有被添加到屏幕上。
在安全模式下运行 Jira
当你在 Jira 中有不同的人安装应用时,有时会遇到问题,但你可能不确定哪个应用程序导致了某个特定问题。在这种情况下,你可以通过逐一禁用所有应用并重新启用它们的过程来进行排除。
准备工作
启用安全模式会影响到你的用户,因此在操作之前,请确保做好相应的计划。
如何操作...
按照以下步骤启用安全模式:
-
导航到 管理 > 系统 > 管理应用程序。
-
点击页面底部的“进入安全模式”链接。
-
当系统提示时,点击进入安全模式以确认操作。
窗口看起来像下图所示:
这完成了我们教程的步骤。
它是如何工作的...
通用插件管理器(UPM)是 Jira 用来管理所有应用的工具。除了作为允许你上传和安装第三方应用的界面(除非另有指示),它还提供了其他一些有用的管理功能。
启用安全模式时,UPM 将禁用所有用户安装的应用,从而使 Jira 恢复到默认状态。你可以逐个启用每个应用,通过排除法找出有问题的应用。
还有更多...
UPM 还提供了审计功能,能够跟踪与应用相关的所有更改。你可以点击页面底部的“Audit log”链接,UPM 将显示过去 90 天内的所有更改列表。
从其他问题跟踪系统导入数据
如果你有其他问题跟踪系统,并且考虑迁移到 Jira,你通常可以通过其内置的导入工具轻松地将现有数据迁移到 Jira。
在这个食谱中,我们将介绍如何从 Bitbucket 的问题跟踪系统导入数据。Jira 支持从其他问题跟踪系统(如 Bugzilla 和 GitHub)以及 CSV 文件导入数据。正如我们所看到的,整个过程几乎相同,因此这个方法也适用于这些其他系统。
如何操作...
按照以下步骤将数据从其他问题跟踪系统(如 Bitbucket)导入到 Jira:
-
导航至“Administration > System > External System Import”。
-
选择源系统的 issue tracker。我们将在这个食谱中选择 Bitbucket。
-
点击“Next”按钮,授权 Jira 导入工具访问 Bitbucket 数据,并在提示时点击“Authorize”:
-
将 Bitbucket 项目映射到 Jira 项目。对于不想导入到 Jira 的项目,勾选“Don't import this project”选项。点击“Next”继续,如下图所示。
-
点击“Next”后,Jira 将查询 Bitbucket,获取设置的导出数据,如字段和值,以便映射到 Jira 对应项。这一过程可能需要几分钟,具体取决于 Bitbucket 项目的大小:
- 选择你希望手动映射到 Jira 字段值的 Bitbucket 字段。点击“Next”继续:
- 将 Bitbucket 的字段值映射到 Jira 字段的对应值,如下图所示。点击“Next”继续:
- 将 Bitbucket 的链接类型映射到 Jira 的问题链接类型。点击“Begin Import”开始将数据导入到 Jira,如下图所示:
- 查看导入结果。如果导入失败,您可以点击下载详细日志链接,以获取完整的过程日志。您还可以点击保存配置链接,获取映射文件的副本,以便下次无需重新映射一切:
接下来,我们将看看这些步骤是如何工作的。
其工作原理...
Jira 为所有不同的任务跟踪器导入器提供了统一的向导界面。虽然每个导入器都有其独特之处,但它们都遵循相同的基本步骤,如下所述:
-
配置目标数据源:此步骤是从目标问题跟踪器中检索数据的过程。在 Bugzilla 的情况下,它可以是直接的数据库访问,在 Bitbucket 的情况下,则是通过互联网进行访问。
-
选择要导入的项目:在这里,我们需要选择要导入到现有项目还是新项目的任务。
-
将目标系统的字段映射到 Jira 字段:在这里,目标问题跟踪器将其字段映射到相应的 Jira 字段。自定义字段可以作为过程的一部分自动创建。
-
将目标系统的字段值映射到 Jira 字段值:根据之前的字段映射进行字段数据映射。通常在选择基于列表的字段时需要此步骤,如优先级、任务状态和自定义字段。
-
映射问题链接类型:这一步是可选的,取决于目标问题跟踪器是否支持链接。如果支持,必须将这些链接类型映射到 Jira 问题链接类型。
虽然 Jira 导入器能够处理大多数数据映射简单的情况,但对于数据映射要求较复杂的大型实例,如项目合并和条件映射,建议您聘请一位 Atlassian 专家(www.atlassian.com/resources/experts
)来处理迁移,而不是仅依赖导入器。
还有更多...
如果您的问题跟踪器没有可用的导入选项,您也可以尝试将数据导出为 CSV 格式,然后使用内置的 CSV 导入器导入数据。
在 Jira 中自动化任务
作为管理员,能够自动化任务通常是您工作中非常重要的一部分。您通常需要具备一些编程技能,以便利用 Jira 提供的自动化功能,如监听器和服务。幸运的是,现在有一些工具可以帮助您进行自动化,而无需您了解编程。
在这个操作步骤中,我们将设置一个自动化任务,让 Jira 定期检查 7 天内未更新的任务,关闭它们并添加评论。
准备工作
对于这个示例,我们需要安装Automation for Jira应用。您可以从marketplace.atlassian.com/apps/1215460/automation-for-jira
下载并使用 UPM 安装它。
如何操作...
按照以下步骤设置自动化任务:
-
转到 Administration > System > Automation rules。
-
点击“创建规则”按钮。
-
选择新自动化规则的
Scheduled
触发器。 -
输入自动化任务应运行的频率。我们希望任务每天运行一次,因此输入
1
。 -
输入
project = "Support Desk" and updated <= 7d
JQL 查询,以便自动化任务知道它应该影响哪些问题:
-
点击“保存”按钮以保存触发器配置。
-
配置好触发器后,我们现在需要选择一个动作。由于我们想要关闭问题,因此我们将选择“新建动作”选项。
-
选择“转换问题”操作类型。
-
选择目标状态,以便在自动化任务运行时转换受影响的问题。我们想关闭问题,所以选择“完成”状态。如果您的工作流使用的是不同的状态,请选择该状态:
-
如果您的工作流需要设置额外的字段,您也可以通过从“选择要设置的字段”下拉菜单中选择字段来在这里进行设置。
-
点击“保存”按钮以保存我们的更改。
-
为我们的新自动化任务输入名称,例如“关闭旧问题”,然后点击“开启”按钮。
您完成的自动化任务应该像下面这样:
现在是时候了解这些步骤是如何工作的了。
它是如何工作的...
在其最基本的形式下,一个自动化规则由两个组件组成:触发器和动作。触发器将决定自动化任务何时运行。共有三种内置的触发器类型:
-
Issue triggers(问题触发器):这些触发器会在相应问题触发事件时运行,通常是在问题以某种方式更新时,例如在问题更新和工作流转换时。
-
Scheduled:此触发器类型将在预定的时间框架内自动运行。您可以像我们在本例中那样使用简单的形式来指定频率,或者您可以使用cron表达式来指定确切的小时、分钟和秒。
-
Integrations(集成):此触发器类型会创建一个 Webhook URL。当外部系统向该 URL 发出 HTTP
POST
请求时,触发器将被触发。
Action(动作)是在触发器运行时会发生的事情。一个触发器可以运行多个动作。动作可以执行各种操作,包括更改问题数据、发送电子邮件通知和发送外部 HTTP POST
请求。
您可以向自动化规则中添加更多高级组件,以实现条件分支和执行。例如,当触发器运行时,您可以为 Bug 类型的任务执行一个操作,为 Story 类型的任务执行另一个操作。您还可以将自动化规则串联起来,使一个规则基于 webhook 触发,然后您可以设置另一个规则,其中包含一个操作,该操作向该 webhook URL 发送 HTTP POST
请求以触发它。
使用我们的自动化规则,我们设置了一个触发器,使其每天运行一次。然后,我们使用 JQL 查询选择了在过去 7 天内自任务执行以来未更新的所有 Support Desk 项目中的任务。接着,我们为触发器添加了一个操作,将所有从 JQL 查询返回的任务转换为 Done 状态。
在 Jira 中运行脚本
Jira 为具有编程技能的人提供了一个应用框架,可以创建应用以扩展其功能或执行那些否则不可能或繁琐的任务;然而,即便具备了这个功能,有时创建一个完整的应用来完成看似简单的任务也是一种过度的做法。好消息是,您可以编写或编程脚本,利用 API 提供的功能,而不必承担开发完整应用的负担。
在这个食谱中,我们将创建一个 Groovy 脚本,通过将搜索过滤器作为收藏项添加给 Jira 中的每个人来共享多个搜索过滤器——这个任务如果手动完成会花费大量时间。
准备工作
对于这个食谱,我们需要安装 ScriptRunner for Jira 应用。您可以从 marketplace.atlassian.com/plugins/com.onresolve.jira.groovy.groovyrunner
下载并通过 UPM 进行安装。
如何操作……
按照以下步骤在 Jira 中运行自定义的 Groovy 脚本(请注意,您需要根据情况更新过滤器 ID):
-
进入 Administration > Manage apps > Script Console。
-
将以下脚本复制到 Script 文本框中:
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.favourites.FavouritesManager
import com.atlassian.jira.issue.search.SearchRequest
import com.atlassian.jira.issue.search.SearchRequestManager
import com.atlassian.jira.user.util.UserManager
import com.atlassian.jira.security.groups.GroupManager
import com.atlassian.jira.exception.PermissionException
//Set the filter ID and group to share with here
Long[] searchRequestIds = [10302,10303,10304]
String shareWith = "jira-software-users"
FavouritesManager favouritesManager = ComponentAccessor.getComponent(FavouritesManager.class)
SearchRequestManager searchRequestManager = ComponentAccessor.getComponent(SearchRequestManager.class)
UserManager userManager = ComponentAccessor.getComponent(UserManager.class)
GroupManager groupManager = ComponentAccessor.getComponent(GroupManager.class)
for(Long searchRequestId in searchRequestIds) {
SearchRequest searchRequest = searchRequestManager.getSharedEntity(searchRequestId)
for (String userName in groupManager.getUserNamesInGroup(shareWith)) {
try {
favouritesManager.addFavourite(userManager.getUserByName(userName), searchRequest)
} catch (PermissionException e) {
// the user does not have permission to view this filter
}
}
}
-
根据您的数据,切换过滤器 ID(
searchRequestIds
)和组名(shareWith
)。您可以通过运行您的过滤器来获取过滤器 ID,ID 会显示在浏览器的地址栏中。 -
点击 Run 来执行脚本。
以下截图显示了 Script Console 窗口:
您可以在控制台中看到正在显示的信息。
它是如何工作的……
ScriptRunner for Jira 应用允许您在 Jira 中运行 Groovy 脚本。由于 Jira 是用 Java 编写的,而 Groovy 也可以在 JVM 上运行,因此您将能够访问 Jira 向开发者公开的所有组件和 API。
在脚本中,我们通过 ID 列出多个搜索过滤器(这些过滤器需要共享,以便其他用户可以将其添加为收藏),循环遍历它们,并将每个 ID 作为收藏项添加到jira-software-users
组中的用户,所有这些都通过 Jira 的公共 API 完成。
在 Jira 中切换用户会话
您经常会遇到仅发生在特定用户身上的问题。在这种情况下,您需要坐在该用户旁边以便查看和理解问题,或者重置该用户的密码并以该用户身份登录。
在这个教程中,我们将学习如何在不重置或获取用户密码的情况下,将您的当前会话切换到任何其他用户的会话。
准备工作
对于这个教程,我们需要安装 SU(即 switch user)for Jira 应用。您可以从 marketplace.atlassian.com/plugins/com.dolby.atlassian.jira.jirasu
下载并通过 UPM 安装它。
如何操作...
要切换(SU)到其他用户,请按照以下步骤操作:
-
导航至 管理 > 用户管理 > 用户
-
点击您想切换到的用户的 SU 链接:
在您选择了用户后,当前用户会话将切换到该用户,并应用相同的配置和权限。完成后,您可以通过从顶部导航栏的 SU 菜单项中选择 SU 退出选项来切换回来。
工作原理...
SU for Jira 应用通过将当前用户会话切换到您选择的用户来工作,然后从 Jira 的角度来看,您实际上是以所选用户身份登录(无需提供该用户的密码)。
既然您了解了这一点,应该很明显,这种技术可能在错误的手中被滥用。您可以通过访问 UPM 并点击 SU for Jira 应用的配置按钮来限制对 SU 功能的访问。这将允许您限制对特定组的访问。
一个有用的功能是审计日志。每当有人使用 SU 功能时,系统会记录下来,因此管理员可以随时检查是否有人在滥用该功能。您可以通过导航至 管理 > 系统 > SU 审计日志 来访问 SU 审计日志。
从命令行使用 Jira
我们通常通过浏览器与 Jira 交互,但有时能够使用命令行也很有用,尤其是对于管理任务或编写 shell 脚本时。
在这个教程中,我们将使用命令行在 Jira 中创建新用户。
准备工作
对于这个教程,您需要在工作站上安装 Atlassian 命令行界面(CLI)工具。您可以从 marketplace.atlassian.com/plugins/org.swift.atlassian.cli
下载。
如何操作...
要使用 Atlassian CLI 工具,我们首先需要将其解压到工作站的一个便捷位置。接下来,更新 jira.sh
(适用于 Unix)或 jira.bat
(适用于 Windows)文件,以添加 Jira 的详细信息。
例如,如下命令所示,Jira 运行在 http://localhost:8080
上,管理员凭证为 admin_user
,密码为 admin_password
:
java -jar 'dirname $0'/lib/jira-cli-3.8.0.jar
-server http://localhost:8080 --user admin_user
--password admin_password "$@"
- 现在,既然我们已做好一切准备,可以运行以下命令在 Jira 中创建新用户:
./jira.sh --action addUser --userId tester
-userEmail tester@company.com --userFullName
Tester
- 您应该得到以下响应:
User: tester added with password:
89u66p3mik5q. Full name is: Tester. Email is:
tester@company.com.
它是如何工作的……
Atlassian CLI 工具通过其远程 SOAP 和 REST API 访问 Jira 的功能和特性。
我们更新了 Jira 脚本文件中的 Jira 详情,因此每次都不需要指定这些信息;如果我们想在脚本中使用该工具,这将非常有用。当我们运行 Jira 脚本时,它将包含所有必要的连接信息。
Atlassian CLI 附带了一系列命令操作,例如我们用来在 Jira 中创建用户的 addUser
操作。您可以从 bobswift.atlassian.net/wiki/display/JCLI/Documentation
获取完整的操作列表。
在线查看 Jira 日志
通常,当发生错误时,作为管理员,您需要检查 Jira 日志文件以确定问题的根源。通常,您需要通过 SSH 登录服务器或使用 FTP 客户端下载文件才能访问日志。在一个封闭的环境中,您将需要通过 IT 团队请求,这可能会导致较长的响应时间。
在这个食谱中,我们将看看如何通过浏览器访问和搜索您的 Jira 日志文件。
准备工作
对于这个食谱,我们需要安装 Last Log for Jira 应用。您可以从 marketplace.atlassian.com/apps/1211604/last-log-for-jira?hosting=server&tab=overview
下载并通过 UPM 安装它。
如何操作……
请按照以下步骤通过浏览器访问 Jira 日志文件:
-
导航至 管理 > 管理应用 > 查看日志。
-
从日志文件下拉菜单中选择要查看的日志文件。
-
输入要搜索的文本字符串。如果找到匹配项,它们将被高亮显示,如下截图所示:
通过这个步骤,我们已经完成了这个食谱的步骤。
它是如何工作的……
Jira 将日志写入 JIRA_HOME/log
目录下的 atlassian-jira.log
文件。一些 Jira 组件,如 Jira 服务台,以及第三方应用,会将日志写入各自的日志文件。由于 Last Log for Jira 应用允许您访问 JIRA_HOME/log
目录中的所有文件,您将能够访问所有日志文件。
管理共享的筛选器和仪表盘
Jira 允许最终用户创建自己的搜索筛选器和仪表盘,并与其他用户共享。当共享筛选器和仪表盘的所有者离开组织或请假时,其他人将无法对此进行更改。在这些情况下,作为 Jira 管理员,你可以临时(或永久)将共享筛选器和仪表盘的所有者更改为新用户。
如何操作...
按照以下步骤将共享筛选器或仪表盘重新分配给另一个用户:
-
导航到 管理 > 系统 > 共享筛选器 (或仪表盘)。
-
搜索共享筛选器。
-
选择 更改所有者 选项来更改筛选器的所有者。
-
输入筛选器的新所有者—例如,你自己—然后点击 更改所有者 按钮:
这完成了本操作步骤。
还有更多...
通常,你只需要更改共享筛选器或仪表盘的所有者,因为其他用户在使用它们;然而,在少数情况下,如果你需要更改非共享筛选器或仪表盘的所有者,你可以首先将用户会话切换到筛选器或仪表盘的所有者,如 Jira 中切换用户会话 食谱中所述,然后再将所有者更改为其他人。请注意,这要求用户在 Jira 中处于活动状态,因此你可能需要首先重新激活该帐户。
第九章:Jira Service Desk
在前几章中,我们集中讲解了 Atlassian 的 Jira 平台,它主要用于问题跟踪。我们涵盖了诸如通过屏幕和字段定制项目以及将 Jira 与其他第三方服务集成的主题。
本章将介绍另一个密切相关的 Jira 产品,名为 Jira Service Desk。它允许您运行一个强大的支持系统,既可以与您的工程项目一起使用,也可以独立作为一个全方位的支持解决方案。我们将探讨如何定制 Jira Service Desk,以便为终端用户提供独特的体验。由于 Jira Service Desk 是建立在 Jira 之上的,它的安装过程几乎与 Jira 相同,您可以参考第一章的食谱,Jira 服务器管理,了解更多细节。
本章将涵盖以下内容:
-
定制您的支持门户的外观和体验
-
捕获来自客户的服务请求的正确信息
-
为您的客户设置知识库
-
与您的内部团队合作处理服务请求
-
使用服务级别协议(SLA)来跟踪和评估绩效
定制您的支持门户的外观和体验
Jira Service Desk 有两个主要界面——一个供客户提交请求,另一个供代理提供解决方案。在本食谱中,我们将探讨如何定制服务台门户,它是客户使用的前端用户界面。
如何操作...
要完全定制您的服务台门户,请执行以下步骤:
-
以管理员身份登录到 Jira Service Desk。
-
浏览到管理 > 应用程序 > 配置(在 Jira Service Desk 下)。
-
点击查看和定制链接,位于帮助中心下方。
在此,您可以配置一系列定制选项,以决定客户访问服务台门户时其外观。您可以添加徽标、横幅、配色方案和公告消息。在公告消息中,您可以使用 wiki 标记,因此您可以使用粗体、斜体等样式并创建超链接。例如,以下公告消息使用了其中的一些标记:
Welcome to the newly launched Global Support Center!
If you have any issues or questions, please contact us at help@support.company.com. We are here to help!
_your friendly support team_
一旦您进行更改,您的定制就会立即生效。满意结果后,点击屏幕底部的保存更改按钮:
在您定制了服务台门户的外观和体验后,您需要定制客户可以提交的请求类型。通过合理规划请求类型,您可以帮助客户更好地理解应该在哪里提交请求,以便将请求路由到相关团队成员,以便更快地解决问题。请求类型在每个服务台(Jira 项目)中管理:
-
浏览到您希望为其设置请求类型的服务台。
-
点击屏幕左下角的项目设置选项。
-
从左侧面板中选择请求类型选项。
-
通过输入请求的名称、类型和所属组来添加新的请求类型。同一组中的请求将在门户中一起显示。请注意,一个请求可以属于多个组。
在选择和创建请求组时,尽量根据所有属于该组的请求类型共享的共同主题来命名它们:
我们现在来看一下它是如何工作的。
它是如何工作的...
Jira Service Desk 利用了 Jira 的许多内置功能,其请求类型是建立在问题类型功能之上的。在服务台中,请求类型映射到 Jira 中的问题类型。主要区别在于,请求类型是客户看到的内容,因此它允许您赋予它更具描述性的名称,以帮助客户更好地理解每个请求类型背后的目的。例如,一个名为bug的问题类型可以有一个名为报告的请求类型,并映射到应用程序缺陷。虽然对支持代理或工程师来说,它们的意思相同,但在客户眼中,请求类型将显得更加友好。
因此,在管理请求类型时,您需要确保服务台项目中存在相应的缺陷类型,才能将其映射到请求类型。有关详细信息,请参阅第二章中的为项目设置不同的问题类型,为您的项目自定义 Jira:
到此,我们已经完成了本教程。
捕捉来自客户的服务请求所需的正确信息。
在本教程中,我们将探讨如何为不同的请求类型自定义屏幕和字段布局,以便从客户那里收集必要的信息,并帮助您的代理快速解决问题。我们还将研究为代理设置不同的屏幕和字段,以便他们可以独立于客户视图收集额外的信息。
如何操作...
要为客户门户配置字段布局,请执行以下步骤:
-
浏览到服务台以自定义字段布局。
-
点击左下角的项目设置选项。
-
从左侧面板选择请求类型选项。
-
点击编辑字段链接以配置请求类型。
-
点击添加字段按钮将字段添加到门户。如果您没有看到想要添加的字段,请确保该字段已添加到项目使用的相应屏幕:
要自定义代理的字段布局,您需要配置用于服务台项目的屏幕。您可以参考第二章中为您的项目设置自定义屏幕的食谱,了解详细信息。最简单的方法如下:
-
从左侧面板中选择屏幕选项。
-
展开问题(请求)类型的屏幕方案。
-
点击查看问题操作的屏幕。
-
搜索并将您想要的字段添加到屏幕中。您以这种方式添加的字段,除非您特别将其添加到请求类型中,否则不会显示给客户,正如前面所述:
如果您的服务台对“编辑问题”和“查看问题”使用不同的屏幕,请确保您对“编辑问题”屏幕进行相同的更改,以便您的代理可以修改这些字段。
它是如何工作的...
Jira Service Desk 项目的字段布局由 Jira 的屏幕配置驱动,其中包括屏幕、屏幕方案和问题类型屏幕方案。对于客户门户,Jira Service Desk 提供了一个简化版本的屏幕,用于“创建问题”操作,以保持流畅的用户体验。因此,为了让您能够在请求类型中添加字段,字段必须首先添加到“创建问题”操作的屏幕中:
对于代理的视图,Jira Service Desk 充分利用了 Jira 的屏幕和字段管理功能,因此您可以为“编辑问题”和“查看问题”操作设置不同的屏幕。
为您的客户设置知识库
随着时间的推移,您应开始积累客户常见问题的知识库。建议您收集这些知识,并通过搜索引擎(如 Google)使其可搜索和可索引,以便客户能够快速找到这些常见问题的解决方案。
在本食谱中,我们将使用Atlassian Confluence产品来设置知识库。通过与 Confluence 的集成,您的服务台代理将能够创建文章,基于一组预定义的模板记录问题症状和解决方案,并使其在服务台中可搜索。
如何操作...
第一步是创建 Jira 和 Confluence 之间的应用链接。您可以参考第七章中Jira 与 Confluence 集成的食谱,了解详细信息。如果您已经完成了 Jira 和 Confluence 的集成,您可以跳过这些步骤:
-
浏览到您要为其设置知识库的服务台。
-
点击屏幕左下角的项目设置选项。
-
从左侧面板中选择知识库选项。
-
点击设置与 Confluence 链接。如果您没有看到以下屏幕截图,那么您已经将 Jira 与 Confluence 集成,可以跳过此部分:
-
输入您 Confluence 实例的完整 URL,并点击创建新链接按钮。
-
按照屏幕向导完成设置过程。
有了应用链接后,我们现在可以返回到服务台。此时,您应该能看到将服务台链接到 Confluence 空间的选项。
在创建应用链接后,您可能需要刷新页面才能看到这些选项。
要将 Confluence 空间设置为您的服务台知识库,请执行以下步骤:
-
选择“链接到 Confluence 空间”选项。
-
从“应用”下拉列表中选择要链接的 Confluence 应用。
-
选择将成为您服务台知识库的空间。如果此时没有指定空间,您可以点击创建知识库空间链接,以便即时创建一个新空间:
- 在选择或创建您的知识库 Confluence 空间后,点击“链接”按钮。
最后一步是配置知识库访问控制,以便自动搜索门户时能够返回结果。如果 Jira 服务台和 Confluence 连接到相同的用户存储库,例如 LDAP,那么它们应该拥有相同的用户账户。确保您授予终端用户对知识库空间的读取权限,并为您的客服代理提供页面访问权限。
一旦您设置了知识库,代理视图中将会新增一个名为“相关知识库文章”的部分。代理可以通过执行以下步骤创建新知识库文章:
- 点击创建文章链接:
-
输入新文章的标题,选择标签,然后选择用于文章内容的模板。
-
点击创建按钮。这将把您带到 Confluence 中的文章,该文章会根据所选模板预先填充。您可以编辑内容并在准备好后发布:
现在是时候看看这些步骤是如何工作的了。
它是如何工作的...
通过通过应用链接集成 Jira 和 Confluence,我们创建了 Jira 服务台和 Confluence 空间的一一映射。每当一个客服代理从请求中点击创建文章链接时,他们将在映射的 Confluence 空间中基于所选模板创建一个新页面。
Confluence 提供了两个默认模板供知识库使用:如何操作和故障排除。您可以将更多模板添加到 Confluence,它们将在代理需要创建新文章时可用。
通过为服务台设置知识库,当客户从门户进行搜索时,搜索结果将包括知识库文章。下图也显示了这一点:
Jira Service Desk 在用户提交新请求时,还会根据客户输入自动推荐文章,帮助他们更快速地找到解决方案,同时避免请求重复和团队的重复劳动。
与内部团队在服务请求上的协作
传统的服务台工作流程通常涉及客户提交请求,客服代表与客户合作以找到解决方案。这种方式通常适用于问题简单且容易解决的情况。然而,在许多实际情况中,问题可能很复杂,可能需要来自不同团队的多个人协作才能解决。
在本节中,我们将探讨如何与标准支持团队之外的人进行协作。通常,您会为服务台和工程项目运行同一个 Jira 实例,因此在同一系统中协作非常简单。在本节中,我们将讨论一个更复杂的场景,支持团队使用 Jira Service Desk 实例,而工程团队使用独立的 Jira 软件实例,两者共同协作解决客户的请求。
如何操作...
第一步是创建一个应用链接,将您的 Jira Service Desk 实例与 Jira 软件实例连接起来。您可以参考第七章中的与其他 Jira 实例集成一节,了解详细信息。如果您已经集成了这两个 Jira 实例,可以跳过这些步骤。
-
导航至管理 > 应用 > 应用链接。
-
输入 Jira 软件实例的 URL,并创建应用链接。Jira 应该会自动将目标应用识别为 Jira。如果由于某些原因没有自动识别,请确保在提示时选择 Jira 作为应用类型:
一旦您将两个 Jira 实例链接起来,代理和/或协作者将能够将您的服务台请求与工程项目中的问题进行关联:
-
浏览到服务台中的请求。
-
在更多菜单下选择链接选项。
-
从服务器下拉列表中选择 Jira 软件实例。
-
选择请求与问题之间的关系。通常,您应该选择由...引起选项。
-
选择要关联到请求的问题。如果您知道问题的键,可以直接输入;否则,您可以点击搜索问题链接进行搜索。
-
确保选中创建互惠链接选项,这样问题也会创建一个链接。这样可以让工程师知道在解决问题时有客户请求待处理,并帮助工程团队优先处理任务。
-
如果你想向正在处理请求的代理添加额外的细节,可以选择内部评论标签。以这种方式添加的评论将不会对客户可见。
-
点击链接按钮以创建链接。
屏幕显示如下截图:
现在让我们看看这些步骤是如何工作的。
它是如何工作的...
Jira 平台提供了一项开箱即用的功能,称为应用链接,允许你将多个 Atlassian 产品实例集成在一起——在本例中,是 Jira 服务台和 Jira 软件。通过在两者之间创建应用链接,我们的 Jira 服务台能够识别 Jira 软件实例,并访问其拥有的数据,特别是任何问题。
一旦我们在客户请求和工程问题之间创建了问题链接,两个系统都能够查询并显示对方的状态。这意味着当代理查看请求时,他们也能看到链接的工程问题的状态,即使它来自不同的系统。请看下面的截图:
一旦工程师完成问题,代理将会从请求中自动看到状态更新。
使用 SLA 进行性能跟踪与评估
SLA 帮助你衡量团队的服务表现水平,并提供关于可以改进的地方的洞察。
在这个流程中,我们将为服务台设置一个新的 SLA 度量,衡量团队解决客户请求所需的时间。然而,我们不会考虑等待客户提供更多信息的时间。
如何操作...
要设置 SLA,请执行以下步骤:
-
浏览到你希望为其设置 SLA 的服务台。
-
点击屏幕左下角的项目设置选项。
-
从左侧面板中选择服务水平协议(SLA)选项。
-
点击创建 SLA选项。
-
为新的 SLA 输入一个新名称:
在你点击创建按钮创建新的 SLA 度量之前,你需要首先定义如何测量时间:
-
从“开始”列中选择问题已创建选项。
-
从暂停在列中选择等待客户状态选项。
-
从“停止”列中选择已解决状态选项:
在配置完时间计数规则后,我们需要设置 SLA 目标,以便我们能够衡量团队的表现:
-
在问题(JQL)文本框中输入
priority = High
。 -
设置目标为
12 小时
,即 12 小时。 -
如果你希望 SLA 计算时包括非工作时间,选择默认 24/7 日历;如果只想包括工作时间,则选择样本 9-5 日历。然后,点击添加按钮。
你可以重复前三个步骤来添加更多目标,准备好后,点击创建按钮来创建新的 SLA 度量:
这完成了本示例的步骤。让我们来看看这些步骤实际是如何工作的。
它是如何工作的...
Jira Service Desk 的 SLA 由两部分组成:如何计算时间以及在给定标准下要实现的目标。目标设置部分相当直接:
-
定义规则的 JQL 查询:例如,
priority = High
表示所有在该项目中优先级设置为高的请求将有此 SLA 目标。 -
指定时间内需要实现的目标:例如,8 小时意味着该 SLA 目标为 8 小时。
-
使用的日历:这定义了在计算 SLA 目标是否已达成时,使用的时间和日期。
实际的 SLA 计算部分稍微复杂一些。在计算 SLA 时,我们需要定义以下内容:
-
何时开始计时:这是定义在开始列中。在我们的示例中,我们选择了问题已创建选项,这意味着一旦客户创建请求,SLA 将开始计时。
-
何时停止计时:这个定义在停止列中。在我们的示例中,我们选择了已进入状态:已解决选项,这意味着一旦代理将请求放入“已解决”工作流状态,SLA 将停止计时。
-
何时暂停计时:这是可选的,定义在暂停于列中。在我们的示例中,我们选择了状态:等待客户选项;这意味着一旦代理请求客户提供额外信息,SLA 将暂停。客户提供所需信息后,SLA 将恢复计时。