使用GitHub Actions编译项目并将Jar发布到Maven Central仓库
知识改变命运,撸码使我快乐,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
配置的方式,我们需要将存在安全性的变量进行配置,使用时注意变量名称的对应即可。
image
Secrets
在使用时需要根据约定的格式配置:
${{ secrets.MAVEN_CENTER_USER_NAME }}
secrets
为前缀,而后面的变量名必须与GitHub
内的配置一致,如果你的相关Secrets
配置需要用于多个项目,可以在组织下进行配置。
推送更新
到目前为止,我们的项目已经完成了GitHub Actions
的配置,接下来需要将该工作流程配置文件推送()push
)到目标仓库,推送后我们查看项目的Actions
标签页的内容,如下所示:
image
每当我们推送代码时都会自动触发构建工作流程的事件,一个工作流程的任务都会有完整的日志记录,如下所示:
image
当一个任务的全部步骤都执行成功后,当前任务也算是真正的执行成功,如果一个工作流程文件内配置了多个任务,则是需要多个任务都构建成功后才算成功。
槽点
目前针对GPG
的支持确实有点问题,GitHub
官方所提供的Action
也是会有一些问题,导致无法完成通过GPG
的方式完成构建项目,如果这一点可以解决,就可以实现在GitHub
仓库创建发布版本时触发工作事件,实现自动上传Jar
到Release
仓库,省去了在本地发布的工作。
示例
本文的workflow
配置文件内容可以访问:https://github.com/minbox-projects/api-boot/blob/2.3.x/.github/workflows/deploy.yml 。
- 基于 xorm 的服务端框架 XGoServer
- 全面总结: Golang 调用 C/C++,例子式教程
- 架构之路(六):把框架拉出来
- 第二届游戏运营技术论坛——云时代的游戏运营之道
- 如何才能准确测量 APP 的功耗?
- 可用性更高:设计优秀的MySQL和Percona XtraDB集群
- 如何使用scikit-learn在Python中生成测试数据集
- OpenStack Neutron之持续测试
- 干货丨 用 Python 进行股票分析
- 小故事:架构师需要做什么?
- 浅谈用Python计算文本BLEU分数
- Fourinone如何实现并行计算和数据库引擎
- 在Python中用一个长短期记忆网络来演示记忆
- CDA数据分析师学习之路第3期 | Spark RDD的转换操作举例
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Ubuntu18.04系统安装和必备软件安装指南
- 如何查看微信好友已撤回的消息?
- 【Python爬虫】写一个爬取中国天气网的终端版天气预报爬虫
- 如何制定企业级代码规范与检查
- 哈希表:可以拿数组当哈希表来用,但哈希值不要太大!
- 【Python】Scrapy爬虫入门(一)Scrapy的基本用法和爬取静态网站
- 【动手学深度学习笔记】之读取和存储
- 据说这才是看热搜的正确方法?
- Ubuntu18.04安装Anaconda3和VSCode指南
- 微信小程序里如何使用npm?小程序集成友盟举例
- 听说你的表情包不够用了?
- 【Python】Python爬虫爬取中国天气网(二)
- C#和sql连接实例
- 【Python】五分钟画一条动态心形曲线~
- 三步修改jupyter notebook主题和页面宽度