前言
要把本人的 JAVA 我的项目公布到 Maven 地方仓库上,这个过程十分的麻烦,而且因为 Maven 地方仓库的严谨性,每次公布都须要登录到 Nexus
网站手动进行流程确认,并不反对纯命令行式的部署,导致无奈做到真正的 CI/CD
,为了补救这一点,我抓包剖析了一下Nexus API
并且开发了一个 Github Action
(maven-nexus-release) 用于主动的 Close
和Release
,从而达到真正的全自动部署。
- 效果图
曾经有公布 jar 包到地方仓库的老司机应该都明确公布 jar 包有多麻烦,没有公布过然而想把本人开源我的项目公布到
Maven
地方仓库的能够先参考下我之前的一篇文章:公布 jar 包到 maven 地方仓库
应用
首先最好是对 Github Action 有肯定的理解,如果不理解也没关系,能够通过我之前的文章疾速过一遍:Github Actions 尝鲜
筹备
托管在 Github 上的 Maven 我的项目
须要调整 pom.xml
中maven-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 私钥,通过命令行导出:
- 列出秘钥
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]
找到用于公布 jar 包的 key,这里示例中的是2A6B618785DD7899
。
- 导出私钥
gpg --armo --export-secret-keys 2A6B618785DD7899
留神私钥是从 -----BEGIN PGP PRIVATE KEY BLOCK-----
始终到-----END PGP PRIVATE KEY BLOCK-----
,而不是仅仅是两头这一段文本。
gpg passphrase
在生成 gpg 秘钥的时候会须要输出一个短明码,应该还记得吧。
将秘钥配置到 Github Secrets 中
- 进入 Github 我的项目主页,而后找到 Settings 选项。
- 进入
Secrets
菜单 - 把刚刚筹备好的秘钥一一创立
在左边有New 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}}
把代码推送到 Github 上,就能够看到对应的 Action
了,下面示例中有两种形式来触发构建:
- 手动触发
通过 Github 能够手动的触发构建,不便测试,操作如下图: - 公布 release 时主动触发
在 Github 我的项目中创立 release,会主动的触发构建,实用于我的项目稳固之后。
后记
以上步骤都在我的我的项目 proxyee 中通过验证,另外 maven-nexus-release 我的项目还是刚起步,性能可能不够欠缺,大家如果有什么好的想法和倡议欢送提出 issue 和 pr。
顺便小小的安利下 proxyee
,它是基于netty
编写的 HTTP 代理服务器,反对代理 HTTP
+HTTPS
+WebSocket
,并且反对HTTP
和HTTPS
抓包,感兴趣的能够 Star 一下。
我是 MonkeyWie,欢送扫码???????? 关注!不定期在公众号中分享
JAVA
、Golang
、前端
、docker
、k8s
等干货常识。