Подтвердить что ты не робот

Maven - Ошибка при выпуске кода в GitHub (зависания после нажатия)

Я пытаюсь запустить цель 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 [email protected]: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:[email protected]: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 = [email protected]:tleese22/my-app.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    pushurl = [email protected]:tleese22/my-app.git

Здесь результат git показывает начало:

$ git remote show origin
Enter passphrase for key '/c/Users/Taylor Leese/.ssh/id_rsa':
* remote origin
  Fetch URL: [email protected]:tleese22/my-app.git
  Push  URL: [email protected]: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)
4b9b3361

Ответ 1

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

    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 [email protected]: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://[email protected]/amleggett/${artifactId}.git
   </developerConnection>
   <url>
   http://github.com/amleggett/${artifactId}
   </url>
  </scm>

В том же блоге добавляется:

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

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

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

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

Ответ 2

Я столкнулся с той же проблемой, и я проследил это с тем, что 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; экспортировать 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 [email protected], и если вы НЕ ПОЛУЧИТЕ запрос для ключевой фразы, она работает!

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

Ответ 3

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

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

mvn -DpushChanges=false release:prepare 

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

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

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 6

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

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

Ответ 7

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

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

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

Ответ 8

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

1. вам нужно проверить git origin

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

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

  before 

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

then

   <scm>
    <connection>scm:git:ssh://[email protected]/xxx/xxxin.git</connection>
    <developerConnection>scm:git:ssh://[email protected]/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: подготовить выпуск: выполнить