用 Github 实现组件自动发布

简介: 用 Github 实现组件自动发布

大家肯定都有这样的需求,将自己的组件发布出去给开发者使用,但苦于经常使用的 JCenter 已挂,自己搭个 Nexus  还要买服务器,看了 MavenCentral 的发布流程,简直痛苦到发麻,现在的 JitPack 还可以凑合着用用,但是发布要去网站手动点 Get it,而且最近还遇到了在 JitPack 发布插件无法发布的问题,种种问题都让我觉得现在的组件发布都非常的蛋疼。


我们这次的目标是:在有限的资源里把事情做到极致!!!


一、Github 现有方案


Github 是可以通过仓库来充当 Maven 镜像源的,只需要将 aar 上传到仓库。例如,我们的仓库地址是 github.com/MRwangqi/Ma…,并且 aar 是放置在 main 分支,则 Maven 镜像地址为


raw.githubusercontent.com/MRwangqi/Ma…


我们只需要在项目的 build.gradle 按如下进行引入镜像源即可:


repositories {
   google()
   // 引入 github 仓库的镜像源
   maven{
        url "https://raw.githubusercontent.com/MRwangqi/Maven/main"
   }
}
复制代码


然后再引入自己的依赖即可愉快的进行玩耍了,我的 checkPlugin 插件就是这么玩的


二、方案


看了上述 Github 的现有方案,是不是觉得很麻烦? 他有如下几个问题:


  1. 需要先将组件发布到本地
  2. 然后将组件复制拷贝到 Maven 仓库
  3. 然后 git 提交组件到仓库


解决这些问题之前,我们需要了解一下 Github Actions


GitHub Actions 是一个持续集成和持续交付 (CI/CD) 平台,可让您自动化构建、测试和部署


我们可以通过自动化构建的方式,构建出 aar,然后将 aar 发布到 maven 那个仓库,思路已经定下来了,那就开干。


1、创建 Actions


Github Actions 提供了很多现成的模板,我们可以创建个Android CI 的模板来看看构建一个 apk 需要做哪些操作

image.png

在点击 Configure 即可进入 yml 配置界面:

image.png

这里我不会去讲解 workflow 的用法,因为讲解太多就脱离了文章的主题,如果要学习语法作用的话,建议移步至 workflow 文档


其实我们根据上图的命令就能看出来, run 后面的就是执行命令,./gradlew build 就是构建我们项目的命令,那我们替换成 ./gradlew assembleDebug 不就是执行打包构建了吗?确实,构建项目就是这么如此的简单。


2、构建组件


从上面创建 Android CI 了解到,执行命令即可执行构建,那么,我们构建组件不就可以通过 ./gradlew publish来发布了嘛!确实如此,我们只需要对组件进行小小的改造,打开组件的 build.gradle,进行如下的配置:


plugins {
    ...
    id 'maven-publish'
}
afterEvaluate {
    publishing {
        publications {
            release(MavenPublication) {
                from components.release
                // 配置组件的 GAV
                groupId = 'com.codelang.jitpack'
                artifactId = 'hook-test'
                version = '1.0'
            }
        }
        repositories {
            maven {
                // 指明组件发布到项目工程的 /build/repo 目录
                url = "../build/repo"
            }
        }
    }
}
复制代码


这其实是一个很基本的组件发布配置,但这里我指明了下发布组件的位置,目的是在组件发布后可以通过相对路径拿到组件,进行接下来的组件上传操作。


那么,我们的 workflow 就可以改成:

image.png

接下来,我们要寻找一下,如何将构建后的组件发布到另一个仓库


3、组件发布


敲起我的键盘就在 google 一阵乱搜 Actions,别说,还真搜到一个,github.com/s0/git-publ… ,该库介绍:


This GitHub Action will take any subdirectory in your repository, and push it as the contents of a git branch to a repository and branch of your choosing, either over SSH or to the current repo.


简单来讲就是该 Action 可以将当前仓库指定的某个目录下的文件上传到另一个仓库

这不就巧了嘛,正好上面构建组件的时候指定了路径为 build/repo,然后再根据该库提供的示例 demo,那么我们的 workflow 就可以写成:

image.png

很 nice,写起来简直没压力,但这个地方需要配置一下私钥,如何生成 git ssh 可以查看该文章 www.jianshu.com/p/0a4190325…,根据该文章将自己的公钥配置到 Github,然后查看下私钥 id_rsa 的内容:

image.png

需要注意的是,---BESIN RSA 这些也是要复制的,然后我们打开组件仓库对 SSH_PRIVATE_KEY 进行如下配置:

image.png

接下来,我们只需要 run workflow 即可:

image.png

我们可以查看 build 的整个过程,在 Deploy 发布过程中可以看见,我们已经发布成功:image.png

然后我们去  github.com/MRwangqi/Ma… 仓库看下,aar 已经成功被成功发布:image.png

需要注意的是:

  • git-publish-subdir-action 一定要配置下 CLEAR_GLOBS_FILE: ".clear-target-files",不然,默认情况下,他会删除你 maven 仓库里面非 git 目录的所有文件,.clear-target-files 文件的内容为需要删除的目录,我是随意配置了个目录


三、总结


我们可以给 Github Actions 配置触发规则,不过默认的 Android CI 配置就有,只要 Push 代码到仓库就会执行该 workflow,然后发布组件到指定的目录,然后将目录下的所有文件提交到远程仓库,即实现了自动发布组件的功能。

大家可以直接抄我的 workflow 部分,然后只需要更改下 repo 地址是你们自己的仓库地址,然后配置下 SSH_PRIVATE_KEY 私钥即可,还有记住,不要忘了在组件仓库配 .clear-target-files 文件

目录
相关文章
|
Java 测试技术 Go
利用 GitHub Action 自动发布 Docker
最近公司内部项目的发布流程接入了 GitHub Actions,整个体验过程还是比较美好的;本文主要目的是对于没有还接触过 GitHub Actions的新手,能够利用它快速构建自动测试及打包推送 Docker 镜像等自动化流程。
|
14天前
|
存储 JSON 前端开发
🔥基于GitHub的Electron自动发布与更新🔥
🔥基于GitHub的Electron自动发布与更新🔥
|
开发工具 git Docker
git:github的tag标签基本使用和自动发布软件包
git:github的tag标签基本使用和自动发布软件包
231 0
git:github的tag标签基本使用和自动发布软件包
|
Python
Python实战:GitHub Actions自动构建pypa/gh-action-pypi-publish自动发布新版本到pypi
Python实战:GitHub Actions自动构建pypa/gh-action-pypi-publish自动发布新版本到pypi
167 0
|
监控 jenkins 测试技术
搭建Vue3组件库:第九章 持续集成CI:基于GitHub的Action回归验证
本章介绍一下github的工作流的持续集成服务。
228 0
搭建Vue3组件库:第九章 持续集成CI:基于GitHub的Action回归验证
|
JavaScript
Github Actions实现Npm包自动化发布
Github Actions实现Npm包自动化发布
77 0
|
缓存 JavaScript Ubuntu
Hexo+GitHub Actions搭建博客,实现云端写作、一键发布
Hexo+GitHub Actions搭建博客,实现云端写作、一键发布
594 1
Hexo+GitHub Actions搭建博客,实现云端写作、一键发布
gitbook 发布 github pages
gitbook 发布 github pages
gitbook 发布 github pages
|
Web App开发 安全 Ubuntu
​北京冬奥会开幕式震撼刷屏;GitHub 推出赞助功能;Flutter 2.10 发布 | 思否周刊
​北京冬奥会开幕式震撼刷屏;GitHub 推出赞助功能;Flutter 2.10 发布 | 思否周刊
162 0
​北京冬奥会开幕式震撼刷屏;GitHub 推出赞助功能;Flutter 2.10 发布 | 思否周刊
|
Java Maven
Java:发布Maven项目到Github私有仓库
Java:发布Maven项目到Github私有仓库
258 0
Java:发布Maven项目到Github私有仓库