Вопрос или проблема
Я использую ScriptRunner для соединения с BitBucket, и мой BitBucket – это Data center.
Я написал слушателя для автоматического действия, когда pull-запрос объединяется, вот так
PullRequestMergedEvent pullRequestMergedEvent = event
def pullRequest = pullRequestMergedEvent.getPullRequest()
for (int i = 0 ; i < pullRequest.getReviewers().size() ; i++) {
def getReviewers = pullRequest.getReviewers()
log.warn("getReviewers=${getReviewers}")
def getUser = pullRequest.getReviewers().getAt(i).getUser()
log.warn("getUser=${getUser}")
def commitDate = pullRequest.getReviewers().getAt(i).getLastReviewedCommit()
log.warn("commitDate=${commitDate}")
}
И в логах мне показывается:
pullRequest.getReviewers().size() : 1
getReviewers=[InternalPullRequestParticipant{lastReviewedCommit=a52b5014247ae31d7b10ebc962315d630bb20dfe, role=REVIEWER, status=APPROVED, user=InternalNormalUser{id=3, username=admin}}]
getUser=InternalNormalUser{id=3, username=admin}
lastReviewedCommit=a52b5014247ae31d7b10ebc962315d630bb20dfe
Как я могу получить дату создания этого коммита (lastReviewedCommit
) в формате "yyyy-MM-dd'T'HH:mm:ss'Z'"
?
Мы можем использовать метод форматирования с необходимым форматом
Добавьте следующие 2 строки
def formattedDate = commitDate.format("yyyy-MM-dd'T'HH:mm:ss'Z'")
log.warn("formattedDate=${formattedDate}")
Правка Если вышеуказанное решение не работает, как предложил один из участников в комментарии ниже, тогда мы можем вызвать команду, чтобы получить детали коммита в формате ISO
git show -s --format=%ci ${commitHash}
для этого мы можем создать вспомогательную функцию
def getCommitDate(String commitHash) {
def command = "git show -s --format=%ci ${commitHash}"
def process = command.execute()
process.waitFor()
if (process.exitValue() == 0) {
def commitDate = process.in.text.trim()
return commitDate
} else {
log.warn("Ошибка при выполнении git команды: ${process.err.text}")
return null
}
}
и вызвать этот метод, чтобы получить commitDate
def commitDate = getCommitDate(lastReviewedCommit)
Ответ или решение
Для получения времени одобрения пул-реквеста в Bitbucket Data Center с использованием ScriptRunner, можно использовать два основных подхода: извлечение информации о дате коммита непосредственно из API Bitbucket и выполнение команды Git для получения информации о дате коммита. Ниже приведено пошаговое описание каждого подхода.
1. Извлечение даты через API Bitbucket
Для начала следует правильно обработать объект commitDate
, получаемый от рецензента. Следующий код позволит вам извлечь и отформатировать дату одобрения в нужном формате "yyyy-MM-dd’T’HH:mm:ss’Z’":
PullRequestMergedEvent pullRequestMergedEvent = event;
def pullRequest = pullRequestMergedEvent.getPullRequest();
for (int i = 0; i < pullRequest.getReviewers().size(); i++) {
def getReviewers = pullRequest.getReviewers();
log.warn("getReviewers=${getReviewers}");
def getUser = pullRequest.getReviewers().getAt(i).getUser();
log.warn("getUser=${getUser}");
def commitDate = pullRequest.getReviewers().getAt(i).getLastReviewedCommit();
// Форматирование даты
def formattedDate = commitDate.format("yyyy-MM-dd'T'HH:mm:ss'Z'");
log.warn("formattedDate=${formattedDate}");
}
Если метод форматирования не сработает, вы можете попробовать другой подход.
2. Выполнение команды Git для получения информации о дате коммита
Если API не предоставляет необходимую информацию о дате, можно использовать команду Git для извлечения данных. Для этого создайте вспомогательную функцию, которая будет выполнять команду git show
:
def getCommitDate(String commitHash) {
def command = "git show -s --format=%ci ${commitHash}";
def process = command.execute();
process.waitFor();
if (process.exitValue() == 0) {
def commitDate = process.in.text.trim();
return commitDate;
} else {
log.warn("Ошибка при выполнении git-команды: ${process.err.text}");
return null;
}
}
После этого можно вызвать данную функцию, передав хеш коммита, чтобы получить дату:
def commitDate = getCommitDate(lastReviewedCommit);
log.warn("commitDate=${commitDate}");
Заключение
С помощью вышеописанных методов вы сможете получить время одобрения пул-реквеста в формате "yyyy-MM-dd’T’HH:mm:ss’Z’". Выбирайте подходящий метод в зависимости от того, какая информация доступна из API Bitbucket и вашего окружения. Также важно учитывать, что для выполнения команды Git ваш скрипт должен быть выполнен в среде, где Git установлен и доступен.
Если у вас возникают какие-либо сложности с реализацией, всегда полезно консультиоваться в сообществе разработчиков или задать вопрос в специализированных форумах.