Как я писал в моем предыдущем посте об автоматизации, я бы продолжил свой пост. Так вот оно есть.
Следующие детали остаются из моего процесса:
Процесс
- Создайте проблему для себя (если уже существующий переход на шаг 2)
- Создайте ветку в соответствующем проекте, основанном на выпуске
- Назначить проблему себе
- Мигрировать проблему в состояние
В ХОДЕ ВЫПОЛНЕНИЯ
- Сделанный.
- Сделанный.
- Сделанный.
- Сделанный.
- Закройте соответствующую проблему JIRA со ссылкой на коммит в комментарии.
Если я работаю над обновлениями зависимостей или родителей в наших сборках, требуется сделать билет JIRA для каждого из этих обновлений (хорошо, на самом деле не требуется, но это полезно). Имеет смысл тестировать каждую из этих обновлений отдельно в Дженкинах. В конце концов, это важная информация для конечных пользователей, поэтому они могут видеть, что был изменен .
Автоматизация шага 4.
Первый шаг — создать билет с какой-то информацией, такой как резюме, описание и предоставление Пострадавшие версии
и Исправить версию/с
полезные значения. Это только нужно, если у нас еще нет билета для работы.
Пока я собирался в мой браузер открыл Соответствующий проект и нажал Создать
кнопка и напечатана в коммуникационных значениях. Я уже освоил детали копирования и вставки из URL-адреса браузера в командную строку и т. Д. Через некоторое время я подумал об этом и пришел к заключению, должен быть удобнее.
Я пытался использовать API для отдыха JIRA с некоторым JavaScript, который я использовал ранее, чтобы создать некоторые Выпуск ноты Но это было слишком сложно, чтобы справиться с этим через JavaScript. После некоторых исследований я нашел Клиент командной строки который выглядит многообещающим.
Я начал играть с Клиент командной строки . Есть некоторые вещи, чтобы упомянуть об этом:
- Один бинарный артефакт; Просто скачивайте его и надевайте на путь. Назовите это, как вам нравится (я решил назвать это
Jira-Cli
) - Механизм шаблонов для создания пользовательских команд
- Простые и мощные команды по умолчанию уже существующий
- Простая настройка через Ямл файл.
Первое, что вам нужно войти в экземпляр JIRA, который можно обрабатывать следующим:
$ jira-cli login --endpoint=https://issues.apache.org/jira
Вам будет предложено для вашего пароля. Пользователь, который используется для входа в систему, получается пользователем, с которым вы работаете. Для меня Это было не так Отказ Поэтому мне нужно было добавить параметр:
$ jira-cli login --endpoint=https://issues.apache.org/jira --user=khmarbaise
Так что теперь я могу просмотреть билет на командной строке очень легко:
$ jira-cli view MEJB-118 issue: MEJB-118 created: 339 days ago status: Closed summary: Remove "J2EE" from plugin description and site project: MEJB issuetype: Task assignee: khmarbaise reporter: afloom fixVersions: 3.0.1 priority: Trivial votes: 0 description: | The term "J2EE" was repalced by "Java EE" by Sun/oracle logn time ago and we shouldn't use "J2EE". It's currently used at least in the plugin's description (pom.xml) and on the intro page of the plugin's site. Replace "J2EE Enterprise Javabean (EJB)" with "Java Enterprise JavaBean (EJB)". comments: - | # khmarbaise, 338 days ago Done in [r1805332|https://svn.apache.org/r1805332] - | # hudson, 338 days ago SUCCESS: Integrated in Jenkins build maven-plugins #9069 (See [https://builds.apache.org/job/maven-plugins/9069/]) [MEJB-118] Remove "J2EE" from plugin description and site (khmarbaise: [http://svn.apache.org/viewvc/?view=rev&rev=1805332]) * (edit) maven-ejb-plugin/pom.xml * (edit) maven-ejb-plugin/src/site/apt/index.apt.vm
Просто чтобы сделать короткий взгляд на конкретную проблему, это намного быстрее, чем через браузер.
После более подробного чтения документации я обнаружил, что могу поставить информацию о конечной точке и пользователю, которая должна использоваться для JIRA в файл конфигурации (в вашем домашнем каталоге) .jira.d/config.yml
который выглядит так:
endpoint: https://issues.apache.org/jira/ user: khmarbaise login: khmarbaise
При этом команда входа в систему может быть уменьшена до JIRA-CLI Вход
Отказ Легкий? Jira-Cli
Будет безопасной информации сеанса в .jira.d/
каталог, который хранится в Cookies.js
файл. Для моего удобства я создал репозиторий Git в .jira.d
и добавил Cookies.js
к .Gitignores
файл, чтобы помешать мне совершить Cookies.js
файл случайно.
Теперь у меня есть возможность создавать билеты с JIRA через командную строку.
Все идет нормально. Но как я знаю, для какого проекта мне нужно создать билет?
Но подождите секунду. Pom.xml
содержит информацию Project.issueManagement.url
который является URL для The Jira Tracker. Поэтому мне нужно было найти способ извлечь его из Pom.xml
Отказ
К счастью, Maven-Help-Plugin здесь путь, чтобы пойти, который выглядит так (только для краткости, я добавил \
; Обычно это одна строка):
ISSUE_URL=$(mvn org.apache.maven.plugins:maven-help-plugin:3.1.0:evaluate \ -Dexpression=project.issueManagement.url \ -q \ -DforceStdout)
Это извлечет URL для JIRA из файла POM. Так что вы получаете что-то подобное:
https://issues.apache.org/jira/browse/MDEPLOY
Но, к сожалению, это не проект, который вам нужен для Jira-Cli
Отказ Что мне нужно, это Mdeploy
Отказ Это может легко достичь:
PROJECT=$(basename $ISSUE_URL)
Это информация, необходимая для создания билета JIRA. Хм … Действительно? Нет. Как насчет версии для Фиксированные версии/с
и Пострадавшие версии
? Это можно сделать:
PLAIN_VERSION=$(mvn build-helper:parse-version \ -Dx=\${parsedVersion.majorVersion}.\${parsedVersion.minorVersion}.\${parsedVersion.incrementalVersion} \ org.apache.maven.plugins:maven-help-plugin:3.1.0:evaluate \ -Dexpression=x \ -q \ -DforceStdout)
Это извлечет версию из файла POM без трейлинга -Snapshot
Отказ Предполагается, что номер версии имеет три цифры.
Так что теперь приходит любимая особенность Jira-Cli
Отказ Вы можете создать свой Собственные команды очень просто. Вы просто определяете такие вещи в вашем config.yml
файл:
custom-commands: - name: mine help: display issues assigned to me script: |- {{jira}} list --template table --query "resolution = unresolved and assignee=currentuser() ORDER BY priority asc, created"
Так что теперь вы можете просто позвонить Jira-Cli
нравится:
$ jira-cli mine
И вы увидите список проблем, которые назначены для себя. Смотреть больше подробностей в документации Jira-Cli
Отказ На основании вышеизложенного я создал пользовательскую команду, которая выглядит так:
custom-commands: - name: createdependencyupgrade help: creates an Dependency Upgrade ticket. options: - name: affected help: The affected version - name: fix help: The fix versions. - name: project default: $JIRA_PROJECT - name: description default: "" - name: priority default: "Minor" args: - name: summary required: true script: |- {{jira}} create --project={{options.project}} --issuetype="Dependency upgrade" -o summary="{{args.summary}}" -o description="{{options.description}}" -o fixVersions="{{options.fix}}" -o versions="{{options.affected}}" -o priority="{{options.priority}}" --noedit
Так что, как результат этого, я могу создать билет JIRA через это:
$ jira-cli createdependencyupgrade --project MWAR --fix="3.0.2" --affected="3.0.2" "Summary Text"
Это было предпосылкой, чтобы наконец создать билет Джира очень удобным способом. Результат предыдущих вещей и интеграция некоторых других частей теперь моя СозданиеependencyUpgradeissue.sh Сценарий, который я могу просто позвонить так:
$ createdependencyupgradeissue.sh "Upgrade maven-plugins parent to version 32"
Выход этого скрипта выглядит на данный момент, как это:
$ createdependencyupgradeissue.sh "Upgrade maven-plugins parent to version 32" Checking if we are on a branch...done. Check that we are on master...done. Extracting issue url from pom.xml file...done. Extracting version from pom.xml file...done. Creating JIRA issue...done. OK MWAR-419 https://issues.apache.org/jira/browse/MWAR-419 M pom.xml Switched to a new branch 'MWAR-419'
Как вы, возможно, уже поняли, я добавил вещи, чтобы создать ветку в Git на основе имени jira, и переключился на эту ветку.
Четвертый шаг автоматизации достигнута, что означает больше улучшения, но недостаточно.
Автоматизация шага 5.
Если мне нравится назначить билет к себе до сих пор, я должен был пойти на страницу билета и нажать назначить мне
ссылка, какие предпосылки узнают номер выпуска и введите правильный URL и т. Д.
Таким образом, основываясь на моих предположениях, что имя филиала — номер выпуска JIRA, единственное, что мне нужно сделать, — это извлечение числа из ветви. Это может быть просто достигнуто:
BRANCH=$(git symbolic-ref --short HEAD)
Так что следующая вещь — присвоение билета себе. Это можно сделать с Jira-Cli
Легко нравится это:
jira-cli take $BRANCH
Я должен добавить некоторые достоверности здравоохранения в случае ошибок, и результат — это Tairsue.sh Сценарий, который я могу использовать в ветке, как это:
$ takeissue.sh
Пятый этап автоматизации достигнут, что означает, что становится удобным, но я думаю, что мы могли бы сделать больше.
Шаг 6.
Этот шаг более или менее идентичен предыдущему, потому что я хотел бы изменить состояние проблемы в В прогрессе
Отказ Это может быть легко достигнуто с помощью Jira-Cli
нравится:
$ jira-cli start MDEP-234
На основании идей, это можно запечить в скрипте Startissue.sh что приводит к такому простому звонку
$ startissue.sh
Шестой этап автоматизации достигнута, что означает большее улучшение.
Шаг 7.
Хорошо, я могу создать проблему в Джире, включая создание филиала в Git, так что собираться здесь? Обычно я обновляю файлы или добавляю некоторые новые, которые сделаны Git Add.
И после этого я могу совершить государство.
Таким образом, основано на выпуске, что сообщение Commit Commite должно выглядеть так:
[XXX-123] - Summary Optional description
В большинстве случаев мне нужна только первая линия. Другими словами, это копирование и вставка из проблемы, которую я создал раньше. Давайте сделаем это легче. Я создал, конечно, вы знаете уже скрипт Примирится.sh Что именно это делает.
Он определяет филиал на основе имени филиала в Git и получает информацию о резюме через Jira-Cli
От Джиры, которая приводит к такой линии:
SUMMARY=$(jira-cli view $BRANCH | grep "^summary: " | cut -d " " -f2-)
И, наконец, мне нужно сделать настоящий коммит, который может быть обработан этим:
git commit -a -m"[$BRANCH] - $SUMMARY"
Седьмой шаг автоматизации, который означает, что означает, что мы находимся на дому прямо. Но еще не пересек линию.
Автоматизация шага 8.
Этот шаг не имеет ничего нового, это просто улучшение чего-то уже существующего. GitMergeClean скрипт первого поста. Это необходимо для настраивания. Следует также закрыть билет Цзира после того, как филиала была объединена на мастеру с соответствующим комментарием на него.
Я добавил следующие строки к скрипту для обработки этого.
# # Get the latest commit HASH # COMMITHASH=$(git rev-parse HEAD) # # Get the GIT URL from pom file: # TODO: Can we do some sanity checks? Yes: scm:git:.. if not FAIL! echo -n "Get the git url from pom file..." GITURL=$(mvn help:evaluate -Dexpression=project.scm.connection -q -DforceStdout | cut -d":" -f3-) echo " URL: $GITURL" GITPROJECT=$(basename $GITURL) GITBASE=$(dirname $GITURL) # echo "Closing JIRA issue $BRANCH" jira-cli close -m"Done in [$COMMITHASH|$GITBASE?p=$GITPROJECT;a=commitdiff;h=$COMMITHASH]" --resolution=Done $BRANCH ## Error handling? echo "Closing finished."
Филиал
Информация уже извлечена на Начало сценария Отказ Последние строки сценария должны звонить Jira-Cli
Чтобы закрыть проблему с соответствующим комментарием и установить Разрешение
к полезной ценности. В нашем случае это просто Сделано
Отказ Giturl
И т.д. Выдано создать полезный комментарий, который содержит ссылку на реальный хранилище GIT с отображением дифференциала, которое было сделано. Вы можете взглянуть на Mclean-87 Проблема, которая показывает ссылку на хранилище GIT.
Полный вывод нового Гитмергердликовый Сценарий выглядит так:
~/ws-git-maven/plugins/maven-rar-plugin (MRAR-79)$ gitmergeandclean.sh Switched to branch 'master' Your branch is up to date with 'origin/master'. Updating 1ffdfba..055bbda Fast-forward pom.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) Total 0 (delta 0), reused 0 (delta 0) remote: Sending notification emails to: ['"commits@maven.apache.org"'] remote: To git@github:apache/maven-rar-plugin.git remote: 1ffdfba..055bbda 055bbda0907661aa6515cc8e79ba66cee43aec12 -> master remote: Syncing refs/heads/master... To https://gitbox.apache.org/repos/asf/maven-rar-plugin.git 1ffdfba..055bbda master -> master remote: Sending notification emails to: ['"commits@maven.apache.org" '] remote: To git@github:apache/maven-rar-plugin.git remote: - [deleted] MRAR-79 remote: Syncing refs/heads/MRAR-79 (FORCED)... To https://gitbox.apache.org/repos/asf/maven-rar-plugin.git - [deleted] MRAR-79 Deleted branch MRAR-79 (was 055bbda). Get the git url from pom file... URL: https://gitbox.apache.org/repos/asf/maven-rar-plugin.git Closing JIRA issue MRAR-79 OK MRAR-79 https://issues.apache.org/jira/browse/MRAR-79 Closing finished.
Вывод
Так что, наконец, для модернизации зависимостей процесс выглядит так:
- Изменить соответствующую информацию в
Pom.xml
файл СозданиеependencyUpGradeissue.sh «Улучшение Maven-Plugins Remote для версии 32»
commitonissue.sh
gitpushwithlease.sh
takeissue.sh
Startissue.sh
После этого я должен ждать результата Дженкинса. Если сборка успешна, я могу объединиться на мастер, иначе мне нужно найти причину проблемы. В этом случае результат был успешным, поэтому я могу сделать это так:gitmergeandclean.sh
Вывод выглядит всего, как это:
~/ws-git-maven/plugins/maven-linkcheck-plugin (master *)$ createdependencyupgradeissue.sh "Upgrade maven-plugins parent to version 32" Checking if we are on a branch...done. Check that we are on master...done. Extracting issue url from pom.xml file...done. Extracting version from pom.xml file...done. Creating JIRA issue...done. OK MLINKCHECK-32 https://issues.apache.org/jira/browse/MLINKCHECK-32 M pom.xml Switched to a new branch 'MLINKCHECK-32' ~/ws-git-maven/plugins/maven-linkcheck-plugin (MLINKCHECK-32 *)$ commitonissue.sh [MLINKCHECK-32 cd34b97] [MLINKCHECK-32] - Upgrade maven-plugins parent to version 32 1 file changed, 1 insertion(+), 1 deletion(-) ~/ws-git-maven/plugins/maven-linkcheck-plugin (MLINKCHECK-32)$ gitpushwithlease.sh Counting objects: 3, done. Delta compression using up to 8 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 1.53 KiB | 1.53 MiB/s, done. Total 3 (delta 2), reused 0 (delta 0) remote: Sending notification emails to: ['"commits@maven.apache.org"'] remote: To git@github:apache/maven-linkcheck-plugin.git remote: * [new branch] cd34b97ddb661d5881bf7fc01e3291a9b0f67041 -> MLINKCHECK-32 remote: Syncing refs/heads/MLINKCHECK-32... To https://gitbox.apache.org/repos/asf/maven-linkcheck-plugin.git * [new branch] MLINKCHECK-32 -> MLINKCHECK-32 ~/ws-git-maven/plugins/maven-linkcheck-plugin (MLINKCHECK-32)$ takeissue.sh ~/ws-git-maven/plugins/maven-linkcheck-plugin (MLINKCHECK-32)$ startissue.sh
Вот время, где я должен ждать результатов Дженкинса. Таким образом, в этом случае результат был успешным, чтобы я мог продолжать подобно:
~/ws-git-maven/plugins/maven-linkcheck-plugin (MLINKCHECK-32)$ gitmergeandclean.sh Switched to branch 'master' Your branch is up to date with 'origin/master'. Updating ff5dfab..cd34b97 Fast-forward pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Total 0 (delta 0), reused 0 (delta 0) remote: Sending notification emails to: ['"commits@maven.apache.org"'] remote: To git@github:apache/maven-linkcheck-plugin.git remote: ff5dfab..cd34b97 cd34b97ddb661d5881bf7fc01e3291a9b0f67041 -> master remote: Syncing refs/heads/master... To https://gitbox.apache.org/repos/asf/maven-linkcheck-plugin.git ff5dfab..cd34b97 master -> master remote: Sending notification emails to: ['"commits@maven.apache.org" '] remote: To git@github:apache/maven-linkcheck-plugin.git remote: - [deleted] MLINKCHECK-32 remote: Syncing refs/heads/MLINKCHECK-32 (FORCED)... To https://gitbox.apache.org/repos/asf/maven-linkcheck-plugin.git - [deleted] MLINKCHECK-32 Deleted branch MLINKCHECK-32 (was cd34b97). Get the git url from pom file... URL: https://gitbox.apache.org/repos/asf/maven-linkcheck-plugin.git Closing JIRA issue MLINKCHECK-32 OK MLINKCHECK-32 https://issues.apache.org/jira/browse/MLINKCHECK-32 Closing finished.
Поэтому, если вы посмотрите в моем предыдущем посте, вы можете удивляться, что числовые этапы процессы не были резко сокращены? Эти сценарии заменяют большое количество ручных шагов (ввод командной строки GIT, JIRA в браузере, нажатие на нажатие и т. Д.), Что теперь просто обрабатывается скриптами, что означает, что шаги выполняются всегда так же, и я уверен, что я не забудьте шаги. Кроме того, многие сценарии могут быть использованы в других ситуациях, что делает мою жизнь проще, например, в обращении с поступлением по тягу и т. Д.
Так что это было гораздо дольше. Я надеюсь, что вам понравилось.
Оригинал: «https://dev.to/khmarbaise/automate-it—be-lazy—part-ii-3m3c»