简体   繁体   English

如何使用 maven 发布插件将发布推送到 github?

[英]How do I push a release to github with the maven release plugin?

I'm able to push to my Gihub repository just fine with SSH but I'm getting an error when I try to push with the maven release plugin at prepare stage:我可以使用 SSH 很好地推送到我的 Gihub 存储库,但是当我尝试在准备阶段使用 maven 发布插件推送时出现错误:

Failed to execute goal org.apache.maven.plugins:maven-release-plugin:3.0.0-M1:prepare (default-cli) on project netbeans-visual-diff-standalone: Unable to commit file

Caused by: org.apache.maven.shared.release.scm.ReleaseScmCommandException: Unable to commit files
Provider message:
The git-push command failed.
Command output:
nbauma109@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

I followed all the steps here to create public/private keys, upload the public key to my github account and add private key to ssh agent:我按照此处的所有步骤创建公钥/私钥,将公钥上传到我的 github 帐户并将私钥添加到 ssh 代理:

https://docs.github.com/en/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account https://docs.github.com/en/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account

I updated the maven POM with release plugin configuration and scm connection settings:我使用发布插件配置和 scm 连接设置更新了 maven POM:

<scm>
    <connection>scm:git:https://github.com/nbauma109/netbeans-visual-diff-standalone.git</connection>
    <developerConnection>scm:git:ssh://git@github.com/nbauma109/netbeans-visual-diff-standalone.git</developerConnection>
    <url>https://github.com/nbauma109/netbeans-visual-diff-standalone</url>
    <tag>HEAD</tag>
</scm>
<distributionManagement>
   <repository>
     <id>pkg.github.com</id>
     <name>GitHub nbauma109 Apache Maven Packages</name>
     <url>https://maven.pkg.github.com/nbauma109/mvn-repo</url>
   </repository>
</distributionManagement>
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-release-plugin</artifactId>
      <version>3.0.0-M1</version>
      <configuration>
        <tagBase>ssh://git@github.com/nbauma109/netbeans-visual-diff-standalone/tags</tagBase>
      </configuration>
    </plugin>
  </plugins>
</build>
<properties>
    <project.scm.id>github.com</project.scm.id>
</properties>

In the MAVEN user ~/.m2/settings.xml file, I included the ssh key information with private key location, passphrase and pasted the contents of the public key inside the "contents" tag:在 MAVEN 用户 ~/.m2/settings.xml 文件中,我包含了 ssh 密钥信息和私钥位置、密码“内容公钥”标签的内容:

  <servers>
    <server>
        <id>github.com</id>
        <username>git</username>
        <privateKey>${user.home}/.ssh/id_ed25519</privateKey>
        <passphrase>censored</passphrase>
        <filePermissions>664</filePermissions>
        <directoryPermissions>775</directoryPermissions>
        <configuration>
          <knownHostsProvider implementation="org.apache.maven.wagon.providers.ssh.knownhost.SingleKnownHostProvider">
            <hostKeyChecking>yes</hostKeyChecking>
            <contents>ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDqdqJcRAZvJvTVWRXBlFB/c+w8pZPFRoWNXKFp6CSTV nbauma109@github.com</contents>
          </knownHostsProvider>
        </configuration>
    </server>
    <server>
        <id>pkg.github.com</id>
        <username>nbauma109</username>
        <password>github_personal_token</password>
    </server>
  </servers>

In the knowns_hosts file, I added localhost and my IP.在 knowns_hosts 文件中,我添加了 localhost 和我的 IP。 I have 3 files under ~/.ssh:我在 ~/.ssh 下有 3 个文件:

  • id_ed25519 (private key) id_ed25519(私钥)
  • id_ed25519.pub (public key) id_ed25519.pub(公钥)
  • known_hosts已知主机

I launch the release the plugin with the following command inside git-bash after having added my key to the ssh agent with an ssh-add ~/.ssh/id_ed25519:在使用 ssh-add ~/.ssh/id_ed25519 将我的密钥添加到 ssh 代理后,我在 git-bash 中使用以下命令启动插件的发布:

mvn -X -Dusername=git release:clean release:prepare release:perform

When I'm prompted for version and tag information, I just press enter to choose the defaults.当系统提示我输入版本和标签信息时,我只需按 Enter 键即可选择默认值。

  • release version: 2.0.1发布版本:2.0.1
  • next development version: 2.0.2-SNAPSHOT下一个开发版本:2.0.2-SNAPSHOT

Also, I came across some similar post how to resolve Permission denied (publickey) when maven release used and the OP said he solved the issue by adding the public key to the developerConnection/push section inside the POM file but I've never seen such a thing and I don't think it's the place for that.另外, 当使用 maven 版本时,我遇到了一些类似的帖子如何解决 Permission denied (publickey)问题,并且 OP 说他通过将公钥添加到 POM 文件中的 developerConnection/push 部分解决了这个问题,但我从未见过这样一件事情,我不认为这是那个地方。

EDIT (after @VonC 's answer): After changing the user from nbauma109 to git, and updating POM and maven settings.xml, I have now two repos, github.com with private key authentication, and pkg.github.com with person token authentication. EDIT (after @VonC 's answer): After changing the user from nbauma109 to git, and updating POM and maven settings.xml, I have now two repos, github.com with private key authentication, and pkg.github.com with person令牌认证。 Now I can push the tag to github.com and I'm able to push the package to Github packages (pkg.github.com) provided my personal token github_personal_token has 'write package' permission. Now I can push the tag to github.com and I'm able to push the package to Github packages (pkg.github.com) provided my personal token github_personal_token has 'write package' permission.

Now my issue is that I've pushed a package that nobody can have access to without authentication and my release tag is empty of binaries that other projects could use.现在我的问题是我已经推送了一个 package 没有身份验证没有人可以访问,并且我的发布标签没有其他项目可以使用的二进制文件。 Do I have no other option than re-upload my binaries manually to the release tag using the Github web GUI?除了使用 Github web GUI 手动将二进制文件重新上传到发布标签之外,我是否别无选择?

As long as you see nbauma109@github.com , you can be sure an SSH push will fail (from command-line or maven)只要您看到nbauma109@github.com ,您就可以确定 SSH 推送将失败(来自命令行或 maven)

A GitHub SSH URL would always use the remote user ' git ': git@github.com:... , never the actual GitHub user account name: your public key registered to said GitHub account is suppose to authenticate you. A GitHub SSH URL would always use the remote user ' git ': git@github.com:... , never the actual GitHub user account name: your public key registered to said GitHub account is suppose to authenticate you.

So start testing with:所以开始测试:

<username>git</username>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM