知识改变命运,撸码使我快乐,2020继续游走在开源界
点赞再看,养成习惯
给我来个Star吧,点击了解下基于SpringBoot的组件化接口服务落地解决方案
在上一篇 GitHub Actions使用入门 文章中,我们了解到了该怎么去启用GitHub Actions
功能,本篇文章来介绍下使用GitHub Actions
怎么将我们的开源项目自动化构建后发布到Maven Central
仓库中。
推荐阅读
新建workflow文件
本篇文章以我的开源框架 ApiBoot 为例,大家有兴趣的也可以去了解下这个开源框架,详情请访问:ApiBoot是什么?
在上一篇文章中我们提到过,GitHub Actions
所需要的工作流文件要在.github/workflows
文件夹内创建,那么接下来我们创建一个名为deploy.yml
的工作流配置文件,配置name
为该工作流的名称,如下所示:
# This is a basic workflow to help you get started with Actions
name: Publish package to the Maven Central Repository
配置触发的分支
我们还需要配置当前工作流在什么情况进行触发自动构建的事件,在deploy.yml
配置文件内添加触发事件,如下所示:
# 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
在上面我们配置了两种触发工作流程的事件,分别是:push
、pull_request
,也就是仓库收到推送更新以及pull_request
时就会触发该工作流程,实现自动化构建。
GitHub Actions
其实为我们提供了多种触发工作流程的事件,访问 触发工作流程的事件 了解详情。
配置工作任务
触发事件配置完成后我们就需要来配置当前工作流程所需要的系统环境
以及每一个步骤
所需要做的事情了。
构建系统
GitHub Actions
支持针对工作流程中的每一个任务(Job
)进行配置独立的构建系统版本,我们选择最新版本的Ubuntu
来作为本次任务的运行系统环境,配置内容如下所示:
# 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发布到Maven Central仓库
,根据分析我们大约需要三个步骤来完成这一工作。
Step1:检出代码
首先我们需要将项目的源码检出到构建环境中,这时我们就可以借助GitHub Actions
官方提供的actions/checkout
来完成这一步骤,Action源码:https://github.com/actions/checkout
Step2:安装环境
ApiBoot 是一个Java项目(JDK1.8+
),而且采用Maven
进行构建项目,所以我们需要在构建的环境中安装相关的环境支持,GitHub Actions
官方同样提供了相关的Action
,名为:actions/setup-java
,Action源码:https://github.com/actions/setup-java
Step3:执行发布
最后一步我们就需要通过mvn deploy
命令来完成发布Jar
,由于项目发布到Release
仓库时需要GPG
秘钥的支持,而我们期望的只是自动发布快照版本,所以可以通过-Dgpg.skip
来排除GPG
插件的介入。
全部步骤的配置内容如下所示:
# 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
在执行时会创建Maven所需要的settings.xml
文件,而在该文件内我们可以通过配置server-username
、server-password
来指定发布的目标仓库的用户名、密码。
由于该工作流配置文件是公开的,我们肯定不会明文进行配置,GitHub
针对这一点,提供了Secrets
配置的方式,我们需要将存在安全性的变量进行配置,使用时注意变量名称的对应即可。
Secrets
在使用时需要根据约定的格式配置:
${{ secrets.MAVEN_CENTER_USER_NAME }}
secrets
为前缀,而后面的变量名必须与GitHub
内的配置一致,如果你的相关Secrets
配置需要用于多个项目,可以在组织下进行配置。
推送更新
到目前为止,我们的项目已经完成了GitHub Actions
的配置,接下来需要将该工作流程配置文件推送()push
)到目标仓库,推送后我们查看项目的Actions
标签页的内容,如下所示:
每当我们推送代码时都会自动触发构建工作流程的事件,一个工作流程的任务都会有完整的日志记录,如下所示:
当一个任务的全部步骤都执行成功后,当前任务也算是真正的执行成功,如果一个工作流程文件内配置了多个任务,则是需要多个任务都构建成功后才算成功。
槽点
目前针对GPG
的支持确实有点问题,GitHub
官方所提供的Action
也是会有一些问题,导致无法完成通过GPG
的方式完成构建项目,如果这一点可以解决,就可以实现在GitHub
仓库创建发布版本时触发工作事件,实现自动上传Jar
到Release
仓库,省去了在本地发布的工作。
示例
本文的workflow
配置文件内容可以访问:https://github.com/minbox-projects/api-boot/blob/2.3.x/.github/workflows/deploy.yml 。