问题描述
想知道是否有一种已知的解决方案,可以通过使用CI/CD来更新JIRA或类似工具中的工作记录时间,根据首次提交和最终CD之间的时间差来跟踪工作时间。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
你可以使用丰富的JIRA REST API来实现这种自动化工作。JIRA API提供了一种机制,可以使用PUT /rest/api/2/issue/{issueIdOrKey}/worklog/{id}
来更新已记录的工时。
你可以使用这个REST API端点,根据首次提交的时间戳和首次成功CD之间的差异,更新相应的问题。
以下是一个示例代码,展示了如何使用JIRA REST API来更新工作记录时间:
import requests
import datetime
# 定义JIRA API的URL和认证信息
url = "https://your-jira-instance/rest/api/2/issue/{issueIdOrKey}/worklog/{id}"
auth = ("your-username", "your-password")
# 计算首次提交和首次成功CD之间的时间差
first_commit_time = datetime.datetime(2021, 1, 1, 10, 0, 0) # 替换为实际的首次提交时间
first_cd_time = datetime.datetime(2021, 1, 1, 12, 0, 0) # 替换为实际的首次成功CD时间
time_difference = first_cd_time - first_commit_time
# 更新工作记录时间
issue_id_or_key = "your-issue-id-or-key" # 替换为实际的问题ID或关键字
worklog_id = "your-worklog-id" # 替换为实际的工作记录ID
update_url = url.format(issueIdOrKey=issue_id_or_key, id=worklog_id)
payload = {
"timeSpentSeconds": time_difference.total_seconds()
}
response = requests.put(update_url, auth=auth, json=payload)
# 检查更新是否成功
if response.status_code == 200:
print("工作记录时间已成功更新!")
else:
print("更新工作记录时间时出现错误:", response.text)
在上面的示例中,我们首先定义了JIRA API的URL和认证信息。然后,我们计算了首次提交和首次成功CD之间的时间差。接下来,我们使用JIRA REST API的PUT /rest/api/2/issue/{issueIdOrKey}/worklog/{id}
端点来更新工作记录时间。我们将首次提交和首次成功CD之间的时间差作为timeSpentSeconds
参数传递给API。
请注意,你需要将示例代码中的URL、认证信息、问题ID或关键字以及工作记录ID替换为实际的值。
方案2
使用脚本或工具来自动更新JIRA或类似工具中的工作记录时间可能会增加复杂性,并且需要确保首次提交和首次成功CD之间的时间差准确无误。
另一种方法是编写脚本或使用工具来自动更新JIRA或类似工具中的工作记录时间。你可以使用一些脚本语言(如Python)或第三方工具来实现这个目标。
以下是一个示例脚本,展示了如何使用Python和JIRA Python库来更新工作记录时间:
from jira import JIRA
import datetime
# 连接到JIRA实例
jira = JIRA(server="https://your-jira-instance", basic_auth=("your-username", "your-password"))
# 获取问题对象
issue = jira.issue("your-issue-id-or-key") # 替换为实际的问题ID或关键字
# 计算首次提交和首次成功CD之间的时间差
first_commit_time = datetime.datetime(2021, 1, 1, 10, 0, 0) # 替换为实际的首次提交时间
first_cd_time = datetime.datetime(2021, 1, 1, 12, 0, 0) # 替换为实际的首次成功CD时间
time_difference = first_cd_time - first_commit_time
# 更新工作记录时间
worklog = issue.fields.worklog
worklog.update(timeSpentSeconds=time_difference.total_seconds())
# 提交更新
issue.update()
print("工作记录时间已成功更新!")
在上面的示例中,我们首先使用JIRA Python库连接到JIRA实例,并获取要更新的问题对象。然后,我们计算了首次提交和首次成功CD之间的时间差。接下来,我们使用问题对象的fields.worklog
属性来获取工作记录对象,并使用update
方法更新工作记录时间。最后,我们使用update
方法提交更新。
请注意,你需要将示例代码中的JIRA实例URL、认证信息以及问题ID或关键字替换为实际的值。
以上是两种使用CI/CD来跟踪开发时间的解决方案。你可以根据自己的需求选择适合你的方法来实现工作时间的跟踪和记录。