Maven - ошибка при выпуске кода на GitHub (зависает после нажатия) - PullRequest
18 голосов
/ 14 июля 2010

Я пытаюсь запустить цель mvn release:prepare, и она зависает после толчка. Есть идеи, что я могу делать не так?

[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] BUILD SUCCESSFUL
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] Total time: 8 seconds
[INFO] [INFO] Finished at: Tue Jul 13 23:54:59 PDT 2010
[INFO] [INFO] Final Memory: 55M/294M
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] Checking in modified POMs...
[INFO] Executing: cmd.exe /X /C "git add -- pom.xml"
[INFO] Working directory: C:\development\taylor\my-app
[INFO] Executing: cmd.exe /X /C "git status"
[INFO] Working directory: C:\development\taylor\my-app
[INFO] Executing: cmd.exe /X /C "git commit --verbose -F C:\Users\TAYLOR~1\AppData\Local\Temp\maven-scm-1932347225.commit pom.xml"
[INFO] Working directory: C:\development\taylor\my-app
[INFO] Executing: cmd.exe /X /C "git symbolic-ref HEAD"
[INFO] Working directory: C:\development\taylor\my-app
[INFO] Executing: cmd.exe /X /C "git push git@github.com:tleese22/my-app.git master:master"
[INFO] Working directory: C:\development\taylor\my-app
>>>> hangs here <<<<

Ниже приведен раздел SCM моего pom.xml:

<scm>
    <connection>scm:git:git://github.com/tleese22/my-app.git</connection>
    <developerConnection>scm:git:git@github.com:tleese22/my-app.git</developerConnection>
    <url>http://github.com/tleese22/my-app</url>
</scm>

...

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.0</version>
</plugin>

Ниже мой .git / config:

[core]
    repositoryformatversion = 0
    filemode = true
    logallrefupdates = true
    bare = false
[branch "master"]
    remote = origin
    merge = refs/heads/master
[remote "origin"]
    url = git@github.com:tleese22/my-app.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    pushurl = git@github.com:tleese22/my-app.git

Вот результат возникновения git show:

$ git remote show origin
Enter passphrase for key '/c/Users/Taylor Leese/.ssh/id_rsa':
* remote origin
  Fetch URL: git@github.com:tleese22/my-app.git
  Push  URL: git@github.com:tleese22/my-app.git
  HEAD branch: master
  Remote branches:
    gh-pages new (next fetch will store in remotes/origin)
    master   new (next fetch will store in remotes/origin)
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

$ git status
# On branch master
nothing to commit (working directory clean)

Ответы [ 8 ]

27 голосов
/ 11 сентября 2010

Я столкнулся с той же проблемой и связал ее с тем фактом, что git требуется фраза-пароль, но Maven не может указать соответствующую фразу-пароль, поэтому процесс по существу зависает.Обратите внимание, что эта проблема ограничена Windows.

Решение состоит в том, чтобы запустить ssh-agent .Это можно найти в C:\Program Files (x86)\Git\bin\.После запуска он выводит некоторые переменные окружения, которые вам нужно установить.Например:

SSH_AUTH_SOCK = / tmp / ssh-LhiYjP7924 / agent.7924;экспорт SSH_AUTH_SOCK;
SSH_AGENT_PID = 2792;export SSH_AGENT_PID;
echo Agent pid 2792;

Итак, вам необходимо разместить их в своей среде:

C:\> set SSH_AUTH_SOCK=/tmp/ssh-LhiYjP7924/agent.7924
C:\> set SSH_AGENT_PID=2792

Затем вынужно будет добавить фразу-пароль для вашего конкретного файла ключей.Как правило, если вы ввели команду типа git fetch origin master для своего проекта, вы получите приглашение с парольной фразой, например: Enter passphrase for key '/c/Users/Anthony Whitford/.ssh/id_rsa' - это файл, который необходимо зарегистрировать в агенте.Итак, команда:

C:\> ssh-add "/c/Users/Anthony Whitford/.ssh/id_rsa"

Она запросит у вас пароль, поэтому введите его.Вы должны увидеть сообщение Identity added.Теперь агент знает фразу-пароль, поэтому вам больше не потребуется указывать ее.

Если у вас есть несколько экземпляров командных приглашений, убедитесь, что в каждой командной строке установлены соответствующие переменные среды SSH_AUTH_SOCK и SSH_AGENT_PID.Вы можете проверить, что это работает, выполнив команду, подобную ssh -v git@github.com, и если вам НЕ будет предложено ввести фразу-пароль, она работает!

Обратите внимание, что при выходе из системы ssh-agent завершит работу ипоэтому, когда вы снова войдете в систему или перезагрузите компьютер, вам нужно будет повторить эти шаги.Насколько я понимаю, по соображениям безопасности ваша фраза-пароль хранится в памяти, а не сохраняется на диске.

8 голосов
/ 04 апреля 2014

Цель mvn release:prepare всегда выполняется в неинтерактивном режиме, поэтому вы не можете ввести фразу-пароль ssh, которую ожидает git во время отправки в удаленный репозиторий. Вы можете использовать агент SSH для управления этим, но если эта проблема появляется только во время процесса выпуска, есть другое решение: подготовить выпуск локально и затем нажать метку.

Для этого вы должны использовать версию 2.1+ maven-release-plugin , которая поставляется с параметром pushChanges.

mvn -DpushChanges=false release:prepare 

Кстати, ваш тег создается в вашем локальном репозитории GIT, и вы можете затем отправить его в удаленный репозиторий, как обычно, с помощью команды git push.

Этот метод полезен для пользователей Eclipse, поскольку Eclipse поставляется со встроенным ssh-agent, но этот агент не используется maven при выполнении выпуска: подготовьтесь, даже при использовании eGit.

5 голосов
/ 14 июля 2010

Учитывая источник git builtin-push.c, это означает, что каким-то образом не определено ни одного удаленного для локального репозитория Git, используемого скриптом maven.

    static int do_push(const char *repo, int flags)
    {
        int i, errs;
        struct remote *remote = remote_get(repo);

        const char **url;
        int url_nr;


        if (!remote) {
            if (repo)
                die("bad repository '%s'", repo);
            die("No destination configured to push to.");
        }

Как показано в этом сообщении в блоге , конфигурация maven - это еще не все.

~/foo/mikeci-archetype-springmvc-webapp$ git remote add origin git@github.com:amleggett/mikeci-archetype-springmvc-webapp.git

A remote add все еще требуется, прежде чем указывать параметры maven scm:

Обновление POM

Чтобы Maven работал эффективно, вы всегда должны включать информацию о VCS проекта в свой файл POM.
Теперь, когда мы добавили архетип в Git-репозиторий, мы можем включить соответствующую конфигурацию <scm>:

  <scm>
   <connection>
   scm:git:ssh://github.com/amleggett/${artifactId}.git
   </connection>
   <developerConnection>
   scm:git:ssh://git@github.com/amleggett/${artifactId}.git
   </developerConnection>
   <url>
   http://github.com/amleggett/${artifactId}
   </url>
  </scm>

Тот же пост в блоге добавляет:

Важно понимать значение каждого из дочерних элементов <scm>.

  • Элемент <connection> определяет URL-адрес только для чтения, а
  • элемент <developerConnection> для чтения + записи.

Для обоих этих элементов URL должен соответствовать следующему соглашению:

 scm:<scm implementation>:<scm implementation-specific path>
  • Наконец, содержимое элемента <url> должно указывать на место для просмотра, и для меня это домашняя страница репозитория GitHub. Обратите внимание, что во всех случаях я использую интерполированное значение, которое является моим проектом artifactId.

Одним из полезных советов является то, что вы можете проверить эту конфигурацию, используя maven-scm-plugin.
Этот плагин предлагает независимый от поставщика доступ к общим командам VCS, предлагая набор сопоставлений команд для настроенной VCS. Цель проверки должна подтвердить, что все в порядке:

~/foo/mikeci-archetype-springmvc-webapp$ mvn scm:validate
[INFO] Preparing scm:validate
[INFO] No goals needed for project - skipping
[INFO] [scm:validate {execution: default-cli}]
[INFO] connectionUrl scm connection string is valid.
[INFO] project.scm.connection scm connection string is valid.
[INFO] project.scm.developerConnection scm connection string is valid.
[INFO] --------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
4 голосов
/ 07 июня 2013

Это точная последовательность команд, которой я следовал, чтобы избавиться от этой ошибки

C:\Program Files (x86)\Git\bin>bash

bash-3.1$ eval 'ssh-agent -s'
SSH_AUTH_SOCK=/tmp/ssh-ZARFN11804/agent.11804; export SSH_AUTH_SOCK;
SSH_AGENT_PID=10284; export SSH_AGENT_PID;
echo Agent pid 10284;

bash-3.1$ exec ssh-agent bash
bash-3.1$ ssh-add "/c/Users/idntus/.ssh/id_rsa"
Enter passphrase for /c/Users/idntus/.ssh/id_rsa:
Identity added: /c/Users/idntus/.ssh/id_rsa (/c/Users/idntus/.ssh/id_rsa)

bash-3.1$ mvn release:prepare release:perform
3 голосов
/ 05 февраля 2015

Единственное, что мне помогло, это указать имя пользователя и пароль GIT в качестве параметров maven:

mvn -Dusername=jenkins -Dpassword=******** release:prepare release:perform

Чтобы скрыть пароль в консоли вывода Jenkins, я установил и настроил плагин Mask Passwords.

2 голосов
/ 09 сентября 2013

Еще одна причина, по которой он может зависнуть - это то, что github.com отсутствует в файле known_hosts. Поэтому SSH будет зависать, ожидая, пока пользователь примет аутентичность хоста.

Чтобы добавить github.com к вашим известным хостам, просто сделайте для него быстрый SSH: ssh github.com. Затем SSH-клиент попросит вас подтвердить подлинность хоста. Введите «Да», и он скажет, что он окончательно добавил github.com в список известных хостов.

1 голос
/ 21 апреля 2015

Я столкнулся с той же проблемой, я пробовал много способов, но решил ее с помощью следующих шагов:

1. вам нужно проверить происхождение мерзавца

2. обновите ваш pom.xml, найдите раздел scm,

 change github ssh address the `:` to '/'

  before 

   <scm>
    <connection>scm:git:ssh://git@github.com:xxx/xxxin.git</connection>
    <developerConnection>scm:git:ssh://git@github.com:xxx/xxxin.git</developerConnection>
    <url>https://github.com/xxx/jenkins-xxx-plugin</url>
    <tag>HEAD</tag>
   </scm>

then

   <scm>
    <connection>scm:git:ssh://git@github.com/xxx/xxxin.git</connection>
    <developerConnection>scm:git:ssh://git@github.com/xxx/xxxin.git</developerConnection>
    <url>https://github.com/xxx/jenkins-xxx-plugin</url>
    <tag>HEAD</tag>
   </scm>

3. set ~ / .m2 / settings.xml

<?xml version="1.0" encoding="UTF-8"?>
 <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                  http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <servers>
    <server>
        <id>maven.jenkins-ci.org</id> <!-- For parent 1.397 or newer; before   this use id java.net-m2-repository -->
        <username>your jenkins username</username>
        <password>your jenkins password</password>
    </server>
</servers>

4. затем зафиксируйте и внесите изменения

5. запустить mvn release: подготовить релиз: выполнить

1 голос
/ 13 октября 2014

У меня была такая же проблема.Я перепробовал все вышеперечисленные решения, и все же это не сработало.

Это потому, что я все еще делал одно неправильно: для команд ssh я использовал git bash, а для команды maven я использовал командную строку.И там не все команды git были доступны.

После добавления полной папки git bin в переменную PATH у меня все заработало.

...