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 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 ответов
Учитывая источник 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
remote add
все еще требуется, перед указанием параметров maven scm:
Обновление ПОМ
Чтобы 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.Для обоих этих элементов 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
Я столкнулся с той же проблемой и связал это с тем фактом, что 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;
эхо-агент 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 завершает работу, поэтому при повторном входе в систему или перезагрузке компьютера вам необходимо будет повторить эти шаги. Насколько я понимаю, ваша пароль хранится в памяти, а не сохраняется на диске по соображениям безопасности.
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 при выполнении релиза: prepare, даже при использовании eGit.
Это точная последовательность команд, которой я следовал, чтобы избавиться от этой ошибки.
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
Единственное, что мне помогло, - это указать имя пользователя и пароль GIT в качестве параметров maven:
mvn -Dusername=jenkins -Dpassword=******** release:prepare release:perform
Чтобы скрыть пароль в консоли вывода Jenkins, я установил и настроил плагин Mask Passwords.
Еще одна причина, по которой он может зависнуть, это если github.com
не в known_hosts
файл. Поэтому SSH будет зависать, ожидая, пока пользователь примет аутентичность хоста.
Добавить github.com
для ваших известных хостов просто сделайте быстрый SSH к нему: ssh github.com
, Затем SSH-клиент попросит вас подтвердить подлинность хоста. Типа "Да", и он скажет, что его постоянно добавляется github.com
в ваш список известных хостов.
Я столкнулся с той же проблемой, я пробовал много способов, но решил ее с помощью следующих шагов:
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. установить ~ /.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: подготовить релиз: выполнить
Я была такая же проблема. Я перепробовал все вышеперечисленные решения, и все же это не сработало.
Это было потому, что я все еще делал одну вещь неправильно: для команд ssh я использовал git bash, а для команды maven я использовал командную строку. И там не все команды git были доступны.
После добавления полной папки git bin в переменную PATH у меня все заработало.