专栏首页SpringBoot 核心技术使用GitHub Actions编译项目并将Jar发布到Maven Central仓库

使用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

在上面我们配置了两种触发工作流程的事件,分别是:pushpull_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-usernameserver-password来指定发布的目标仓库的用户名、密码。

由于该工作流配置文件是公开的,我们肯定不会明文进行配置GitHub针对这一点,提供了Secrets配置的方式,我们需要将存在安全性的变量进行配置,使用时注意变量名称的对应即可。

image

Secrets在使用时需要根据约定的格式配置:

${{ secrets.MAVEN_CENTER_USER_NAME }}

secrets为前缀,而后面的变量名必须与GitHub内的配置一致,如果你的相关Secrets配置需要用于多个项目,可以在组织下进行配置。

推送更新

到目前为止,我们的项目已经完成了GitHub Actions的配置,接下来需要将该工作流程配置文件推送()push)到目标仓库,推送后我们查看项目的Actions标签页的内容,如下所示:

image

每当我们推送代码时都会自动触发构建工作流程的事件,一个工作流程的任务都会有完整的日志记录,如下所示:

image

当一个任务的全部步骤都执行成功后,当前任务也算是真正的执行成功,如果一个工作流程文件内配置了多个任务,则是需要多个任务都构建成功后才算成功。

槽点

目前针对GPG的支持确实有点问题,GitHub官方所提供的Action也是会有一些问题,导致无法完成通过GPG的方式完成构建项目,如果这一点可以解决,就可以实现在GitHub仓库创建发布版本时触发工作事件,实现自动上传JarRelease仓库,省去了在本地发布的工作。

示例

本文的workflow配置文件内容可以访问:https://github.com/minbox-projects/api-boot/blob/2.3.x/.github/workflows/deploy.yml

作者个人 博客 使用开源框架 ApiBoot 助你成为Api接口服务架构师

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 第四十六章:SpringBoot & RabbitMQ完成消息延迟消费

    恒宇少年
  • 第四十三章: 基于SpringBoot & RabbitMQ完成TopicExchange分布式消息消费

    恒宇少年
  • 第三十九章:基于SpringBoot & Quartz完成定时任务分布式单节点持久化

    恒宇少年
  • 分布式事务之Seata中间件原理及流程详细分析

    原文链接:https://blog.csdn.net/f4761/article/details/89077400

    天涯泪小武
  • 医疗相关 EDF 文件查看及读取

    EDF,全称是 European Data Format,是一种标准文件格式,用于交换和存储医疗时间序列。其能够存储多通道的数据,允许每个信号拥有不同的采样频率...

    caoqi95
  • 一键搞定!小程序调用日历本该如此简单

    知晓君
  • 介绍一款将屏幕录制为gif的软件

    在写博客的过程中,发现很多时候需要录制屏幕并制作gif以便展示给大家。例如在这篇文章中,就需要将git的工作过程用动画的形式进行展示。在这里向大家介绍一款录制屏...

    大神带我来搬砖
  • String - 345. Reverse Vowels of a String

    Write a function that takes a string as input and reverse only the vowels of a s...

    用户5705150
  • 华科提出目标检测新方法:基于IoU-aware的定位改进,简单又有效

    【导语】近日,华中科技大学发表了一篇新论文《IoU-aware Single-stage Object Detector for Accurate Locali...

    AI科技大本营
  • 数据气象公司的生财之道

    大数据文摘

扫码关注云+社区

领取腾讯云代金券