Очередной способ улучшить agile процесс - это настроить связывание системы контроля версий с баг-трекинговой системой. Ещё лучше, когда этот процесс происходит автоматически! Этим мы и займёмся, и речь сегодня пойдёт про связывание Jira и Git.
Основная идея - если в тексте описания коммита (commit description), указать ключ Jira issue, то ветка появится в описании Jira issue.
Часть I Настроить поддержку git в Jira
Это можно сделать через панель администратора Jira (если у вас нет доступа, обратитесь к вашему администратору). Процесс должен быть похож на https://confluence.atlassian.com/bitbucket/connect-bitbucket-and-jira-813891605.html
Часть II Настроить git-hook
Основная цель этой статьи, показать возможность автоматического связывания используя git-hook. Как настроить git-hook: в локальной директории репозитория 'C:\git\repo-name\.git\hooks' создать файл pre-commit (по дефолту там можно найти pre-commit.sample) со следующим содержанием:
#!/bin/sh
#
# Pre-commit hook for adding Jira number to commit comment
#
BRANCH_NAME=$(git symbolic-ref --short HEAD)
JIRA=$( echo $BRANCH_NAME | grep -hE "[[:alpha:]][A-Z]+-[0-9]+" | tr '/' '\n' | grep -hE "[A-Z]+-[0-9]+" | sort | uniq | head -n1 )
JIRA_LAST=$( echo $BRANCH_NAME | grep -hE "[[:alpha:]][A-Z]+-[0-9]+" | tr '/' '\n' | grep -hE "[A-Z]+-[0-9]+" | sort | uniq | tail -n1 )
if [[ "$JIRA" == "" ]]; then
echo "Branch name should contain JIRA issue ref, for ex: KEY-123456 "
exit 1
fi
if [[ "$JIRA" != "$JIRA_LAST" ]]; then
echo "Branch name should contain one and only JIRA issue ref, but found many: "
echo "$( echo $BRANCH_NAME | grep -E "[A-Z]+-[0-9]+" | uniq)"
exit 1
fi
exit 0;
После этого, если мы создадим ветку без Jira-ключа, при попытке выполнения коммита, мы получим ошибку:
и коммит не будет выполнен.
Кроме этого, необходимо добавить файл prepare-commit-msg (по дефолту там можно найти prepare-commit-msg.sample) со следующим содержанием:
Кроме этого, необходимо добавить файл prepare-commit-msg (по дефолту там можно найти prepare-commit-msg.sample) со следующим содержанием:
#!/bin/sh
BRANCH_NAME=$(git symbolic-ref --short HEAD)
JIRA=$( echo $BRANCH_NAME | grep -hE "[[:alpha:]][A-Z]+-[0-9]+" | tr '/' '\n' | grep -hE "[A-Z]+-[0-9]+" | head -n1 )
JIRA_S=$( echo $JIRA | sed -r "s/^[A-Z]+-[0-9]+$/& /" )
sed -r -i "s/$JIRA//" $1
sed -i "1s;^;$JIRA_S;" $1
И тогда, если ветка будет названа в соответствии с указанными правилами, то коммит будет выполнен успешно:
и в текст комментария, автоматически будет подставлен jira key КЛЮЧ-123 в начало комментария.
+ подхода: прозрачность процесса разработки по задачам, возможность быстрого поиска кода из Jira таски, история коммитов сохраняет ссылки на задачи;
- подхода: ветка обязательно должна называться KEY-123/some-name.. (т.е. ветка всегда должна быть создана в рамках какой-то задачи)
- подхода: ветка обязательно должна называться KEY-123/some-name.. (т.е. ветка всегда должна быть создана в рамках какой-то задачи)


