前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用 Github 实现组件自动发布

用 Github 实现组件自动发布

作者头像
codelang
发布2022-03-26 09:57:15
8780
发布2022-03-26 09:57:15
举报
文章被收录于专栏:codelang

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

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

一、Github 现有方案

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

https://raw.githubusercontent.com/MRwangqi/Maven/main

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

代码语言:javascript
复制
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 需要做哪些操作

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

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

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

2、构建组件

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

代码语言:javascript
复制
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 就可以改成:

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

3、组件发布

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

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 就可以写成:

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

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

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

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

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

需要注意的是:

  • 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 文件

我的 workflow 文件地址:https://github.com/MRwangqi/MessageHook/blob/master/.github/workflows/android.yml

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 扣浪 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Github 现有方案
  • 二、方案
    • 1、创建 Actions
      • 2、构建组件
        • 3、组件发布
        • 三、总结
        相关产品与服务
        持续集成
        CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档