java - Maven-Error al liberar el código a GitHub(se bloquea después de la inserción)
maven-2 maven-release-plugin (8)
Estoy intentando ejecutar el mvn release:prepare
objetivo y está pendiente después del empuje. ¿Alguna idea de lo que podría estar haciendo mal?
[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 <<<<
A continuación se muestra la sección SCM de mi 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>
A continuación se encuentra mi .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
Aquí está el resultado de git show origin:
$ 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)
Estos son la secuencia exacta de comandos que seguí para deshacerme de este error
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
La mvn release:prepare
goal siempre se ejecuta en modo no interactivo, por lo que no puede ingresar la contraseña de ssh que git está esperando mientras se empuja al repositorio remoto. Puede usar un agente de SSH para gestionar eso, pero si este problema solo aparece durante el proceso de lanzamiento, hay otra solución: preparar el lanzamiento de forma local y luego empujar la etiqueta.
Para esto tienes que usar la versión 2.1+ de maven-release-plugin que viene con el parámetro pushChanges
.
mvn -DpushChanges=false release:prepare
Por cierto, su etiqueta se crea en su repositorio GIT local y luego puede insertarla en el repositorio remoto como de costumbre, con un comando git push
.
Este método es útil para los usuarios de Eclipse porque Eclipse viene con un agente ssh incorporado pero Maven no utiliza este agente mientras realiza una versión: prepare, incluso cuando usa eGit.
Lo único que funcionó para mí fue especificar el nombre de usuario y la contraseña de GIT como parámetros principales:
mvn -Dusername=jenkins -Dpassword=******** release:prepare release:perform
Para ocultar la contraseña en la consola de salida Jenkins, instalé y configuré el complemento de contraseñas de máscara.
Me había enfrentado al mismo problema, lo había intentado de muchas maneras pero lo resolví con los siguientes pasos:
1. necesitas comprobar el origen de git
2. actualiza tu pom.xml, encuentra la sección de 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. establece ~ / .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. Luego compromete y presiona tus cambios
5. Ejecutar el lanzamiento de mvn: preparar el lanzamiento: realizar
Me he encontrado con el mismo problema y he rastreado esto al hecho de que git requiere una frase de contraseña, pero Maven no tiene forma de especificar una frase de contraseña apropiada, por lo que el proceso esencialmente se bloquea. Tenga en cuenta que este problema se limita a Windows.
La solución es ejecutar ssh-agent . Esto se puede encontrar en C:/Program Files (x86)/Git/bin/
. Después de ejecutarlo, genera algunas variables de entorno que debe establecer. Por ejemplo:
SSH_AUTH_SOCK = / tmp / ssh-LhiYjP7924 / agent.7924; exportar SSH_AUTH_SOCK;
SSH_AGENT_PID = 2792; exportar SSH_AGENT_PID;
echo Agent pid 2792;
Por lo tanto, necesita colocar estos en su entorno:
C:/> set SSH_AUTH_SOCK=/tmp/ssh-LhiYjP7924/agent.7924
C:/> set SSH_AGENT_PID=2792
Luego, deberá agregar una frase de contraseña para su archivo de clave en particular. En general, si emitió un comando como git fetch origin master
para su proyecto, obtendrá una frase de contraseña como: Enter passphrase for key ''/c/Users/Anthony Whitford/.ssh/id_rsa''
- ese es el archivo que Necesito registrarte con el agente. Entonces, el comando es:
C:/> ssh-add "/c/Users/Anthony Whitford/.ssh/id_rsa"
Le pedirá una frase de contraseña, así que ingrésela. Debería ver un mensaje de Identity added
. Ahora, el agente conoce la contraseña para que no se le solicite que la especifique más.
Si tiene varias instancias de solicitudes de comando, asegúrese de que cada símbolo del sistema tenga configuradas las variables de entorno SSH_AUTH_SOCK y SSH_AGENT_PID adecuadas. Puede validar que esto funciona ejecutando un comando como ssh -v [email protected]
y si NO se le solicita una frase de contraseña, ¡está funcionando!
Tenga en cuenta que cuando cierre la sesión, ssh-agent se apagará y, por lo tanto, cuando vuelva a iniciar sesión o reinicie la computadora, deberá repetir estos pasos. Según tengo entendido, su frase de contraseña se almacena en la memoria, no se conserva en el disco, por razones de seguridad.
Otra razón por la que podría colgarse es si github.com
no está en el archivo known_hosts
. Por lo tanto, SSH se bloqueará a la espera de que el usuario acepte la autenticidad del host.
Para agregar github.com
a sus hosts conocidos, solo github.com
un SSH rápido: ssh github.com
. El cliente SSH le pedirá que confirme la autenticidad del host. Escribe "Sí" y dirá que se agregó permanentemente github.com
a tu lista de hosts conocidos.
Teniendo en cuenta el origen de git builtin-push.c
, eso significa que de alguna manera, no se define ningún control remoto para el repositorio de Git local utilizado por el script de 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.");
}
Como lo ilustra esta publicación de blog , la configuración de Maven no es la historia completa.
~/foo/mikeci-archetype-springmvc-webapp$ git remote add origin [email protected]:amleggett/mikeci-archetype-springmvc-webapp.git
Todavía se requiere una remote add
, antes de especificar los parámetros de scm de Maven:
Actualizando el POM
Para que Maven funcione de manera efectiva, siempre debe asegurarse de incluir la información VCS del proyecto en su archivo POM.
Ahora que hemos agregado el arquetipo a un repositorio Git podemos incluir la configuración<scm>
apropiada:
<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>
La misma entrada de blog agrega:
Es importante comprender el significado de cada uno de los elementos secundarios de
<scm>
.
- El elemento
<connection>
define una url de solo lectura y- El elemento
<developerConnection>
un URL de lectura y escritura.Para ambos elementos, la url debe cumplir con la siguiente convención:
scm:<scm implementation>:<scm implementation-specific path>
- Finalmente, el contenido del elemento
<url>
debería apuntar a una ubicación navegable y para mí esta es la página de inicio del repositorio de GitHub. Tenga en cuenta que, en todos los casos, estoy usando un valor interpolado, que es el artefacto de mi proyecto.Un consejo útil es que puede verificar esta configuración utilizando el
maven-scm-plugin
.
Este complemento ofrece acceso independiente de "proveedor" a los comandos VCS comunes al ofrecer un conjunto de asignaciones de comandos para el VCS configurado. El objetivo de validación debe confirmar que todo está bien:
~/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
Tuve el mismo problema. Probé todas las soluciones anteriores y todavía no funcionó.
Eso se debió a que todavía estaba haciendo una cosa mal: para los comandos ssh usé git bash, mientras que para el comando maven usé el símbolo del sistema. Y no estaban disponibles todos los comandos de git.
Después de agregar la carpeta completa de git bin a la variable PATH, todo funcionó para mí.