要把本身的 JAVA 項目發佈到 Maven 中央倉庫上,這個過程很是的麻煩,並且因爲 Maven 中央倉庫的嚴謹性,每次發佈都須要登陸到Nexus
網站手動進行流程確認,並不支持純命令行式的部署,致使沒法作到真正的CI/CD
,爲了彌補這一點,我抓包分析了一下Nexus API
而且開發了一個Github Action
(maven-nexus-release)用於自動的Close
和Release
,從而達到真正的全自動部署。前端
已經有發佈 jar 包到中央倉庫的老司機應該都明白髮布 jar 包有多麻煩,沒有發佈過可是想把本身開源項目發佈到
Maven
中央倉庫的能夠先參考下我以前的一篇文章:
發佈 jar 包到 maven 中央倉庫
首先最好是對 Github Action 有必定的瞭解,若是不瞭解也不要緊,能夠經過我以前的文章快速過一遍:Github Actions 嚐鮮java
須要調整pom.xml
中maven-gpg-plugin
插件的配置,示例:git
<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>
登陸到https://oss.sonatype.org
的帳號和密碼。github
Base64
編碼的 gpg 私鑰,經過命令行導出:docker
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
。apache
gpg --armo --export-secret-keys 2A6B618785DD7899
注意私鑰是從-----BEGIN PGP PRIVATE KEY BLOCK-----
一直到-----END PGP PRIVATE KEY BLOCK-----
,而不是僅僅是中間這一段文本。ubuntu
在生成 gpg 祕鑰的時候會須要輸入一個短密碼,應該還記得吧。服務器
Secrets
菜單New secret
按鈕用於建立祕鑰,將剛剛的祕鑰內容建立並給定對應的名稱,示例:最終 Secrets 以下:maven
在項目根目錄下新建.github/workflows/deploy.yml
文件,內容以下:oop
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
了,上面示例中有兩種方式來觸發構建:
以上步驟都在個人項目proxyee中經過驗證,另外maven-nexus-release項目仍是剛起步,功能可能不夠完善,你們若是有什麼好的想法和建議歡迎提出 issue 和 pr。
順便小小的安利下proxyee
,它是基於netty
編寫的 HTTP 代理服務器,支持代理HTTP
+HTTPS
+WebSocket
,而且支持HTTP
和HTTPS
抓包,感興趣的能夠 Star 一下。
我是 MonkeyWie,歡迎掃碼👇👇關注!不按期在公衆號中分享JAVA
、Golang
、前端
、docker
、k8s
等乾貨知識。