当前位置:   article > 正文

通过 GitHub Actions 自动发布项目到 Maven 中央仓库_com.github.abel533

com.github.abel533

基础的 Maven 配置

参考官方文档:

本文对应的演示项目:

配置 Maven 插件

上面官方文档也有用法。

插件详细文档: https://help.sonatype.com/repomanager2/staging-releases/configuring-your-project-for-deployment

使用 oss 官方推荐的发布插件:

<plugin>
   <groupId>org.sonatype.plugins</groupId>
   <artifactId>nexus-staging-maven-plugin</artifactId>
   <extensions>true</extensions>
   <configuration>
      <serverId>ossrh</serverId>
      <nexusUrl>https://oss.sonatype.org/</nexusUrl>
      <autoReleaseAfterClose>true</autoReleaseAfterClose>
   </configuration>
</plugin>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

这里配置的 autoReleaseAfterClose 会自动在 close 后执行 release 发布操作,如果想手工执行,可以去掉这里的配置。

配置 GitHub Actions

添加 .github/workflows/release.yml 文件,内容如下:

name: Publish package to the Maven Central Repository
on:
  push:
    tags: [ "*" ]
jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up Maven Central Repository
        uses: actions/setup-java@v2
        with:
          java-version: '8'
          distribution: 'adopt'
          server-id: ossrh
          server-username: MAVEN_USERNAME
          server-password: MAVEN_PASSWORD
      - id: install-secret-key
        name: Install gpg secret key
        run: |
          cat <(echo -e "${{ secrets.OSSRH_GPG_SECRET_KEY }}") | gpg --batch --import
          gpg --list-secret-keys --keyid-format LONG
      - name: Publish package
        env:
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
        run: mvn --batch-mode -Dgpg.passphrase=${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }} clean deploy
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

这里的 on.push.tags 意思是当推送一个 tag 时,自动执行发布操作。

在 jobs 的具体配置中,用到了下面几个 Actions secrets 的配置:

  • OSSRH_USERNAME: oss 用户名
  • OSSRH_TOKEN: oss 密码
  • OSSRH_GPG_SECRET_KEY: gpg 签名密钥
  • OSSRH_GPG_SECRET_KEY_PASSWORD: gpg 签名密码

这几个配置需要在当前项目的 Settings 中配置好。

gpg 密钥导出和导入

基础的配置还参考开头提供的官方文档。
参考: https://gist.github.com/sualeh/ae78dc16123899d7942bc38baba5203c

  1. 配置 gpg 插件不提示密码:
    <configuration>
      <gpgArguments>
          <arg>--pinentry-mode</arg>
          <arg>loopback</arg>
      </gpgArguments>
    </configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  2. 查找密钥 gpg --list-secret-keys --keyid-format=long
  3. 导出密钥 gpg --export-secret-keys -a <key-id> > secret.txt,不用按参考中替换换行符,用完整的内容即可。
  4. 在脚本中导入 cat <(echo -e "${{ secrets.OSSRH_GPG_SECRET_KEY }}") | gpg --batch --import
  5. 在 mvn 命令中,通过 -Dgpg.passphrase=${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }} 指定密钥的密码。

效果演示

在这里插入图片描述
oss 的 deploy 插件,和正常的相比,增加了 close 和 release 两个操作,对应的日志如下:

[INFO]  * Upload of locally staged artifacts finished.
[INFO]  * Closing staging repository with ID "comgithubabel533-1055".

Waiting for operation to complete...
..............

[INFO] Remote staged 1 repositories, finished with success.
[INFO] Remote staging repositories are being released...

Waiting for operation to complete...
.......

[INFO] Remote staging repositories released.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  02:18 min
[INFO] Finished at: 2022-04-04T23:21:53+08:00
[INFO] ------------------------------------------------------------------------
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

正常发布后,就能从 oss 查询到构件,其他仓库大概经过几小时才能同步。

后记

这篇文章对大多数人来说没有一点用途,对开源作者来说可能有点用。

以前为了往 maven 官方推送打包,经常需要耗费大量的时间,而且官方的 oss 网站访问也不稳定,基本上都打不开,有时候晚上试了很久都没成功后,就会选择第二天早起进行操作,一般早晨的访问速度会很顺畅。

很早在开源群看到有人说可以通过 GitHub Action 自动执行这些操作,当时想着要把自己项目改成自动,但是过了很久很久才动手,此时已经找不到当时的方法,所以从头操作一遍,有了今天的文章。

今天的文章只是测试,后续还有大量项目要真正修改配置才能用上,最大的好处就是 比较稳定的项目,接收PR后,可以尽快自动发版了,不在需要手工看运气操作了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/69194
推荐阅读
相关标签
  

闽ICP备14008679号