21

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 <<<<

以下は、私の 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)
4

8 に答える 8

27

私は同じ問題に遭遇し、これを 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 がシャットダウンするため、再度ログインするかコンピューターを再起動するときに、これらの手順を繰り返す必要があることに注意してください。私の理解では、セキュリティ上の理由から、パスフレーズはディスクに保存されるのではなく、メモリに保存されます。

于 2010-09-11T16:21:45.277 に答える
9

ゴールはmvn release:prepare常に非インタラクティブ モードで実行されるため、リモート リポジトリへのプッシュ中に git が待機している ssh パスフレーズを入力することはできません。SSH エージェントを使用してそれを管理できますが、この問題がリリース プロセス中にのみ発生する場合は、別の解決策があります。リリースをローカルで準備し、後でタグをプッシュします。

このためには、パラメーターに付属するmaven-release-pluginpushChangesのバージョン 2.1+ を使用する必要があります。

mvn -DpushChanges=false release:prepare 

ところで、タグはローカル GIT リポジトリに作成され、git pushコマンドを使用して通常どおりリモート リポジトリにプッシュできます。

Eclipse には ssh-agent が組み込まれていますが、このエージェントは、eGit を使用している場合でも release:prepare の実行中に maven によって使用されないため、この方法は Eclipse ユーザーにとって便利です。

于 2014-04-04T14:02:57.217 に答える
5

のソースを考慮するgit builtin-push.cと、どういうわけか、maven スクリプトによって使用されるローカル Git リポジトリに対してリモートが定義されていないことを意味します。

    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 addMaven scm パラメーターを指定する前に、Aが引き続き必要です。

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>

  • <connection>要素は読み取り専用 URL を定義し、
  • <developerConnection>要素は読み取りと書き込みの URL です。

これらの要素の両方について、URL は次の規則に従う必要があります。

 scm:<scm implementation>:<scm implementation-specific path>
  • 最後に、<url>要素のコンテンツは参照可能な場所を指している必要があります。私にとっては、これが GitHub リポジトリのホームページです。すべての場合において、プロジェクトの artifactId である補間値を使用していることに注意してください。

便利なヒントの 1 つは、 を使用してこの設定を確認できることです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
于 2010-07-14T06:39:42.057 に答える
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
于 2013-06-07T09:24:21.137 に答える
3

私にとってうまくいった唯一のことは、GITユーザー名とパスワードをmavenパラメーターとして指定することでした:

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

Jenkins 出力コンソールでパスワードを非表示にするために、Mask Passwords Plugin をインストールして構成しました。

于 2015-02-05T11:48:48.107 に答える
2

ハングする可能性があるさらに別の理由は、ファイルgithub.comにない場合です。known_hostsしたがって、SSH は、ユーザーがホストの信頼性を受け入れるのを待ってハングします。

既知のホストに追加github.comするには、簡単な SSH を実行するだけです: ssh github.com. SSH クライアントは、ホストの信頼性を確認するように求めます。「はい」と入力するとgithub.com、既知のホストのリストに永久に追加されたことが表示されます。

于 2013-09-09T19:27:40.477 に答える
2

私は同じ問題に直面していました。多くの方法を試しましたが、以下の手順で解決しました。

1. git origin を確認する必要があります

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 release:prepare release:perform を実行します

于 2015-04-21T03:41:16.283 に答える