使用GitHub Actions編譯項目并將Jar發(fā)布到Maven Central倉庫

知識改變命運,擼碼使我快樂,2020繼續(xù)游走在開源界

點贊再看,養(yǎng)成習慣

給我來個Star吧,點擊了解下基于SpringBoot的組件化接口服務落地解決方案

在上一篇 GitHub Actions使用入門 文章中,我們了解到了該怎么去啟用GitHub Actions功能,本篇文章來介紹下使用GitHub Actions怎么將我們的開源項目自動化構建后發(fā)布到Maven Central倉庫中。

推薦閱讀

新建workflow文件

本篇文章以我的開源框架 ApiBoot 為例,大家有興趣的也可以去了解下這個開源框架,詳情請訪問:ApiBoot是什么?

在上一篇文章中我們提到過,GitHub Actions所需要的工作流文件要在.github/workflows文件夾內(nèi)創(chuàng)建,那么接下來我們創(chuàng)建一個名為deploy.yml的工作流配置文件,配置name為該工作流的名稱,如下所示:

# This is a basic workflow to help you get started with Actions

name: Publish package to the Maven Central Repository

配置觸發(fā)的分支

我們還需要配置當前工作流在什么情況進行觸發(fā)自動構建的事件,在deploy.yml配置文件內(nèi)添加觸發(fā)事件,如下所示:

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  push:
    branches:
        - master
        - 2.3.x
  pull_request:
    branches:
        - master
        - 2.3.x

在上面我們配置了兩種觸發(fā)工作流程的事件,分別是:push、pull_request,也就是倉庫收到推送更新以及pull_request時就會觸發(fā)該工作流程,實現(xiàn)自動化構建。

GitHub Actions其實為我們提供了多種觸發(fā)工作流程的事件,訪問 觸發(fā)工作流程的事件 了解詳情。

配置工作任務

觸發(fā)事件配置完成后我們就需要來配置當前工作流程所需要的系統(tǒng)環(huán)境以及每一個步驟所需要做的事情了。

構建系統(tǒng)

GitHub Actions支持針對工作流程中的每一個任務(Job)進行配置獨立的構建系統(tǒng)版本,我們選擇最新版本的Ubuntu來作為本次任務的運行系統(tǒng)環(huán)境,配置內(nèi)容如下所示:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

我們今天文章的主題是Jar發(fā)布到Maven Central倉庫,根據(jù)分析我們大約需要三個步驟來完成這一工作。

Step1:檢出代碼

首先我們需要將項目的源碼檢出到構建環(huán)境中,這時我們就可以借助GitHub Actions官方提供的actions/checkout來完成這一步驟,Action源碼:https://github.com/actions/checkout

Step2:安裝環(huán)境

ApiBoot 是一個Java項目(JDK1.8+),而且采用Maven進行構建項目,所以我們需要在構建的環(huán)境中安裝相關的環(huán)境支持,GitHub Actions官方同樣提供了相關的Action,名為:actions/setup-java,Action源碼:https://github.com/actions/setup-java

Step3:執(zhí)行發(fā)布

最后一步我們就需要通過mvn deploy命令來完成發(fā)布Jar,由于項目發(fā)布到Release倉庫時需要GPG秘鑰的支持,而我們期望的只是自動發(fā)布快照版本,所以可以通過-Dgpg.skip來排除GPG插件的介入。

全部步驟的配置內(nèi)容如下所示:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checkout source code
      - uses: actions/checkout@v2
      # Install Java 1.8
      - uses: actions/setup-java@v1
        with:
          server-id: hengyu
          java-version: 1.8
          server-username: MAVEN_USERNAME
          server-password: MAVEN_PASSWORD
      # Publish to Apache Maven Central
      - run: mvn -B deploy -Dgpg.skip
        env:
          MAVEN_USERNAME: ${{ secrets.MAVEN_CENTER_USER_NAME }}
          MAVEN_PASSWORD: ${{ secrets.MAVEN_CENTER_PASSWORD }}

注意事項:使用Action時,需要指定版本號,通過@v?的這種方式,其實這個版本號是倉庫源碼的標簽。

配置GitHub Secrets

actions/setup-java@v1在執(zhí)行時會創(chuàng)建Maven所需要的settings.xml文件,而在該文件內(nèi)我們可以通過配置server-username、server-password來指定發(fā)布的目標倉庫的用戶名、密碼。

由于該工作流配置文件是公開的,我們肯定不會明文進行配置,GitHub針對這一點,提供了Secrets配置的方式,我們需要將存在安全性的變量進行配置,使用時注意變量名稱的對應即可。

image

Secrets在使用時需要根據(jù)約定的格式配置:

${{ secrets.MAVEN_CENTER_USER_NAME }}

secrets為前綴,而后面的變量名必須與GitHub內(nèi)的配置一致,如果你的相關Secrets配置需要用于多個項目,可以在組織下進行配置。

推送更新

到目前為止,我們的項目已經(jīng)完成了GitHub Actions的配置,接下來需要將該工作流程配置文件推送()push)到目標倉庫,推送后我們查看項目的Actions標簽頁的內(nèi)容,如下所示:

image

每當我們推送代碼時都會自動觸發(fā)構建工作流程的事件,一個工作流程的任務都會有完整的日志記錄,如下所示:

image

當一個任務的全部步驟都執(zhí)行成功后,當前任務也算是真正的執(zhí)行成功,如果一個工作流程文件內(nèi)配置了多個任務,則是需要多個任務都構建成功后才算成功。

槽點

目前針對GPG的支持確實有點問題,GitHub官方所提供的Action也是會有一些問題,導致無法完成通過GPG的方式完成構建項目,如果這一點可以解決,就可以實現(xiàn)在GitHub倉庫創(chuàng)建發(fā)布版本時觸發(fā)工作事件,實現(xiàn)自動上傳JarRelease倉庫,省去了在本地發(fā)布的工作。

示例

本文的workflow配置文件內(nèi)容可以訪問:https://github.com/minbox-projects/api-boot/blob/2.3.x/.github/workflows/deploy.yml 。

作者個人 博客
使用開源框架 ApiBoot 助你成為Api接口服務架構師

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容