前言

NexusCI/CDNexus APIGithub ActionCloseRelease
  • 效果图


Maven

使用

首先最好是对 Github Action 有一定的了解,如果不了解也没关系,可以通过我之前的文章快速过一遍:Github Actions 尝鲜

准备

托管在 Github 上的 Maven 项目

pom.xmlmaven-gpg-plugin
 <plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-gpg-plugin</artifactId>
   <executions>
       <execution>
           <id>sign-artifacts</id>
           <phase>verify</phase>
           <goals>
               <goal>sign</goal>
           </goals>
       </execution>
   </executions>
   <configuration>
       <!-- 这个configuration必须配置,用于gpg非交互式密码输入 -->
       <gpgArguments>
           <arg>--pinentry-mode</arg>
           <arg>loopback</arg>
       </gpgArguments>
   </configuration>
 </plugin>

Nexus 用户名和密码

https://oss.sonatype.org

gpg private key

Base64
  • 列出秘钥
gpg --list-secret-keys --keyid-format LONG
------------------------------------------------
sec   rsa4096/2A6B618785DD7899 2020-11-05 [SC]
      992BB9305698C72B846EF4982A6B618785DD7899
uid                 [ultimate] monkeyWie <liwei-8466@qq.com>
ssb   rsa4096/F8E9F8CBD90028C5 2020-11-05 [E]
2A6B618785DD7899
  • 导出私钥
gpg --armo --export-secret-keys 2A6B618785DD7899
-----BEGIN PGP PRIVATE KEY BLOCK----------END PGP PRIVATE KEY BLOCK-----

gpg passphrase

在生成 gpg 秘钥的时候会需要输入一个短密码,应该还记得吧。

将秘钥配置到 Github Secrets 中

SecretsNew secret

最终 Secrets 如下:


编写 Github Action 配置文件

.github/workflows/deploy.yml
name: deploy

on:
  # 支持手动触发构建
  workflow_dispatch:
  release:
    # 创建release的时候触发
    types: [published]
jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      # 拉取源码
      - uses: actions/checkout@v2
      # 安装JDK环境
      - name: Set up JDK 1.8
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
      # 设置Maven中央仓库配置
      - name: Set up Apache Maven Central
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
          server-id: releases
          # Nexus用户名环境变量
          server-username: MAVEN_USERNAME
          # Nexus密码环境变量
          server-password: MAVEN_CENTRAL_TOKEN
          # gpg短密码环境变量
          gpg-passphrase: MAVEN_GPG_PASSPHRASE
          # gpg私钥
          gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }}
      # 推送jar包至maven中央仓库
      - name: Publish to Apache Maven Central
        # 执行maven deploy命令
        run: mvn clean deploy
        # 环境变量设置
        env:
          # Nexus用户名,如果觉得不想暴露也可以配置到secrets中
          MAVEN_USERNAME: xxx
          # Nexus密码
          MAVEN_CENTRAL_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN }}
          # gpg短密码
          MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
      # Nexus自动部署
      - name: Release on nexus
        uses: monkeyWie/maven-nexus-release@v1
        with:
          # Nexus用户名
          maven-repo-server-username: xxx
          # Nexus密码
          maven-repo-server-password: ${{ secrets.MAVEN_CENTRAL_TOKEN }}
Action
  • 手动触发
    通过 Github 可以手动的触发构建,方便测试,操作如下图:


  • 发布 release 时自动触发
    在 Github 项目中创建 release,会自动的触发构建,适用于项目稳定之后。

后记

以上步骤都在我的项目proxyee中通过验证,另外maven-nexus-release项目还是刚起步,功能可能不够完善,大家如果有什么好的想法和建议欢迎提出 issue 和 pr。

proxyeenettyHTTPHTTPSWebSocketHTTPHTTPS
JAVAGolang前端dockerk8s