代码之家  ›  专栏  ›  技术社区  ›  Taylor Leese

Maven-向GitHub释放代码时出错(推后挂起)

  •  18
  • Taylor Leese  · 技术社区  · 14 年前

    我正试图运行 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 <<<<
    

    下面是my pom.xml的scm部分:

    <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 origin的结果:

    $ 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 回复  |  直到 9 年前
        1
  •  5
  •   VonC    14 年前

    考虑到 git builtin-push.c 也就是说,在某种程度上,maven脚本使用的本地git repo没有定义远程。

        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.");
            }
    

    如图所示 blog post Maven配置不是全部。

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

    remote add 仍然是必需的,在指定maven scm参数之前:

    更新POM

    为了使Maven有效地工作,您应该始终确保在POM文件中包含项目VCS信息。
    现在我们已经将原型添加到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 & GT; .

    • 这个 <connection> 元素定义只读URL,并
    • 这个 <developerConnection> 元素读写URL。

    对于这两个元素,URL必须遵循以下约定:

     scm:<scm implementation>:<scm implementation-specific path>
    
    • 最后, <url> 元素内容应该指向可浏览的位置,对于我来说,这是Github存储库主页。请注意,在所有情况下,我都使用一个插值值,这是我的项目工件ID。

    一个方便的提示是,您可以使用 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
  •  27
  •   AWhitford    14 年前

    我遇到了同样的问题,我追踪到了这样一个事实:Git需要一个口令,但是Maven无法指定适当的口令,所以这个过程基本上挂起。请注意,此问题仅限于Windows。

    解决方案是运行 SSH剂 . 这可以在 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代理将关闭,因此当您重新登录或重新启动计算机时,需要重复这些步骤。我的理解是,出于安全原因,您的密码存储在内存中,而不是持久保存到磁盘上。

        3
  •  8
  •   greglevilain    10 年前

    这个 mvn release:prepare 目标总是在非交互模式下运行,因此您不能在推送到远程存储库时输入git正在等待的ssh密码。 您可以使用ssh代理来管理这个问题,但是如果这个问题只在发布过程中出现,那么还有另一个解决方案:在本地准备发布,然后推送标签。

    为此,您必须使用版本2.1+ maven-release-plugin 它和 pushChanges 参数。

    mvn -DpushChanges=false release:prepare 
    

    顺便说一下,您的标签被创建到本地Git存储库中,然后您可以像往常一样将它推送到远程存储库,使用 git push 命令。

    这个方法对Eclipse用户很有用,因为Eclipse附带了一个嵌入的ssh代理,但是maven在执行发布:准备时不使用这个代理,即使在使用egit时也是如此。

        4
  •  4
  •   Tushar    11 年前

    这些是我为消除这个错误所遵循的命令的确切顺序

    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
  •  3
  •   MantasG    9 年前

    唯一对我有用的是将git用户名和密码指定为maven参数:

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

    为了在Jenkins输出控制台中隐藏密码,我安装并配置了Mask密码插件。

        6
  •  2
  •   Hzmy    11 年前

    还有一个原因是如果 github.com 不在 known_hosts 文件。因此,ssh将挂起,等待用户接受主机的真实性。

    添加 吉特布尔 对于您的已知主机,只需对其执行快速ssh: ssh github.com . 然后,ssh客户机将要求您确认主机的真实性。输入“是”,它会说它是永久添加的 吉特布尔 到您的已知主机列表。

        7
  •  1
  •   Sabine    10 年前

    我也有同样的问题。 我尝试了以上所有的解决方案,但仍然不起作用。

    这是因为我仍然做了一件错误的事情:对于ssh命令,我使用git bash,而对于maven命令,我使用命令提示符。没有所有的git命令可用。

    在将完整的git bin文件夹添加到路径变量之后,一切都对我有效。

        8
  •  1
  •   Paresh Mayani jeet    9 年前

    我也遇到过同样的问题,我尝试了很多方法,但通过以下步骤来解决:

    1。您需要检查Git来源

    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>
    

    三。设置~/.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发布:准备发布:执行