Рубрики
Uncategorized

Автоматизировать это — быть ленивым — часть II

Как я писал в моем предыдущем посте об автоматизации, я бы продолжил свой пост. Так вот оно есть. Следуйте … Теги с DevOps, Maven, Opensource, Git.

Как я писал в моем предыдущем посте об автоматизации, я бы продолжил свой пост. Так вот оно есть.

Следующие детали остаются из моего процесса:

Процесс

  1. Создайте проблему для себя (если уже существующий переход на шаг 2)
  2. Создайте ветку в соответствующем проекте, основанном на выпуске
  3. Назначить проблему себе
  4. Мигрировать проблему в состояние В ХОДЕ ВЫПОЛНЕНИЯ
  5. Сделанный.
  6. Сделанный.
  7. Сделанный.
  8. Сделанный.
  9. Закройте соответствующую проблему JIRA со ссылкой на коммит в комментарии.

Если я работаю над обновлениями зависимостей или родителей в наших сборках, требуется сделать билет JIRA для каждого из этих обновлений (хорошо, на самом деле не требуется, но это полезно). Имеет смысл тестировать каждую из этих обновлений отдельно в Дженкинах. В конце концов, это важная информация для конечных пользователей, поэтому они могут видеть, что был изменен .

Автоматизация шага 4.

Первый шаг — создать билет с какой-то информацией, такой как резюме, описание и предоставление Пострадавшие версии и Исправить версию/с полезные значения. Это только нужно, если у нас еще нет билета для работы.

Пока я собирался в мой браузер открыл Соответствующий проект и нажал Создать кнопка и напечатана в коммуникационных значениях. Я уже освоил детали копирования и вставки из URL-адреса браузера в командную строку и т. Д. Через некоторое время я подумал об этом и пришел к заключению, должен быть удобнее.

Я пытался использовать API для отдыха JIRA с некоторым JavaScript, который я использовал ранее, чтобы создать некоторые Выпуск ноты Но это было слишком сложно, чтобы справиться с этим через JavaScript. После некоторых исследований я нашел Клиент командной строки который выглядит многообещающим.

Я начал играть с Клиент командной строки . Есть некоторые вещи, чтобы упомянуть об этом:

  1. Один бинарный артефакт; Просто скачивайте его и надевайте на путь. Назовите это, как вам нравится (я решил назвать это Jira-Cli )
  2. Механизм шаблонов для создания пользовательских команд
  3. Простые и мощные команды по умолчанию уже существующий
  4. Простая настройка через Ямл файл.

Первое, что вам нужно войти в экземпляр 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.

Вывод

Так что, наконец, для модернизации зависимостей процесс выглядит так:

  1. Изменить соответствующую информацию в Pom.xml файл
  2. СозданиеependencyUpGradeissue.sh «Улучшение Maven-Plugins Remote для версии 32»
  3. commitonissue.sh
  4. gitpushwithlease.sh
  5. takeissue.sh
  6. Startissue.sh После этого я должен ждать результата Дженкинса. Если сборка успешна, я могу объединиться на мастер, иначе мне нужно найти причину проблемы. В этом случае результат был успешным, поэтому я могу сделать это так:
  7. 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»