
知識改變命運,擼碼使我快樂,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配置的方式,我們需要將存在安全性的變量進行配置,使用時注意變量名稱的對應即可。

Secrets在使用時需要根據(jù)約定的格式配置:
${{ secrets.MAVEN_CENTER_USER_NAME }}
secrets為前綴,而后面的變量名必須與GitHub內(nèi)的配置一致,如果你的相關Secrets配置需要用于多個項目,可以在組織下進行配置。
推送更新
到目前為止,我們的項目已經(jīng)完成了GitHub Actions的配置,接下來需要將該工作流程配置文件推送()push)到目標倉庫,推送后我們查看項目的Actions標簽頁的內(nèi)容,如下所示:

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

當一個任務的全部步驟都執(zhí)行成功后,當前任務也算是真正的執(zhí)行成功,如果一個工作流程文件內(nèi)配置了多個任務,則是需要多個任務都構建成功后才算成功。
槽點
目前針對GPG的支持確實有點問題,GitHub官方所提供的Action也是會有一些問題,導致無法完成通過GPG的方式完成構建項目,如果這一點可以解決,就可以實現(xiàn)在GitHub倉庫創(chuàng)建發(fā)布版本時觸發(fā)工作事件,實現(xiàn)自動上傳Jar到Release倉庫,省去了在本地發(fā)布的工作。
示例
本文的workflow配置文件內(nèi)容可以訪問:https://github.com/minbox-projects/api-boot/blob/2.3.x/.github/workflows/deploy.yml 。