⼿把⼿教你如何巧⽤Github的Action功能
概念
是 于2018年10⽉推出的持续集成服务。
那么何谓持续集成呢?
持续集成
持续集成(Continuous integration),也就是我们经常说的CI。它是⼀种软件开发实践,可以让团队在持续的基础上收到反馈并进⾏改进,不必等到开发后期才寻和修复缺陷,常运⽤于软件的敏捷开发中。Jenkins就是我们常⽤的持续集成平台⼯具。
理解了持续集成的概念之后,下⾯我简单讲⼀下使⽤持续集成的好处:
提⾼效率,减少了重复性⼯作:⼀些重复性的⼯作写成脚本交给持续集成服务执⾏。
减少了⼈⼯带来的错误:机器通过预先写好的脚本执⾏犯错的⼏率⽐⼈⼯低很多。
减少等待的时间:⼀套完备的持续集成服务涵盖了开发、集成、测试、部署等各个环节。
提⾼产品质量:很多⼤公司在代码提交后都会有⼀套代码检视脚本(俗称门禁)来检查代码的提交是否符合规范,从⽽从源头遏制问题的产⽣。
Actions
相⽐较持续集成这个⼤概念,GitHub推出的 Actions 就显得⾮常轻量和巧妙了。Actions就相当于持续集成中的某个特定功能的脚本,通过多个actions的⾃由组合,便可实现⾃⼰特定功能的持续集成服务。
同时,Github为了⽅便⼤家使⽤ Actions,还专门做了⼀个 , 真的是⾮常⽅便!
GitHub Actions 有⼀些⾃⼰的术语:
1.workflow(⼯作流程):持续集成⼀次运⾏的过程,就是⼀个workflow。
2.job(任务):⼀个workflow由⼀个或多个jobs构成,含义是⼀次持续集成的运⾏,可以完成多个任务。
3.step(步骤):每个job由多个step构成,⼀步步完成。
jdk怎么使用4.action(动作):每个step可以依次执⾏⼀个或多个命令(action)。
workflow⽂件
GitHub Actions 的配置⽂件叫做workflow⽂件,存放在代码仓库的.github/workflows⽬录, 如下图所⽰:
workflow⽂件采⽤YAML格式,⽂件名可以任意取,但是后缀名统⼀为.yml,⽐如上图的l。
workflow⽂件的配置字段⾮常多,详见 。下⾯是⼀些基本字段:
1.name: workflow的名称。如果省略该字段,默认为当前workflow的⽂件名。
<: 触发workflow的条件,通常是某些事件,例如:release、push、pull_request等。详细内容可以
参照 。
3.jobs: workflow⽂件的主体内容,表⽰要执⾏的⼀项或多项任务。
jobs.<job_id>.name: job_id是任务的id,name是任务的描述。
jobs.<job_id>.runs-on: runs-on运⾏所需要的虚拟机环境,它是必填字段。
jobs.<job_id>.needs: needs指定当前任务的依赖关系,即运⾏顺序。
jobs.<job_id>.steps: steps指定每个任务的运⾏步骤,可以包含⼀个或多个步骤。
Actions的应⽤
如何使⽤Action发布flutter插件
之前我写过⼀篇 ,讲的就是如何开发⼀个flutter插件并进⾏发布。但由于我们发布插件到 需要访问外⽹,⽽且还需要给命令终端设置代理,所以每次的发布都⾮常的⿇烦。
⼀个偶然的机会,我就在Action市场中发现了⼀个publish-dart-flutter-package插件,可以⼀键把⾃⼰的插件发布到 ,脚本如下:
name: Pub Publish plugin
on: workflow_dispatch
jobs:
publish:
runs-on: ubuntu-latest
steps:
-name: Checkout
uses: actions/checkout@v1
-name: Publish
uses: sakebook/actions-flutter-pub-publisher@v1.3.0
with:
credential: ${{ secrets.CREDENTIAL_JSON }}
flutter_package:true
skip_test:true
dry_run:false
当然你也可以参考我的 ,它就是利⽤这个Action进⾏发布的。
这⾥我们可以看到,我们定义的触发条件是workflow_dispatch,也就是⼿动触发任务执⾏:需要我们点击 Run workflow => 选择 master 分⽀ => 点击 Run workflow,⼊下图所⽰:
这⾥我们注意到定义了⼀个secrets.CREDENTIAL_JSON常量,也就是我们的google账号认证证书,这⾥需要我们在项⽬的Settings => 选择Secrets => 点击 New repository secret来创建⼀个属性名为CREDENTIAL_JSON的常量。对应的值你可以到你的⽤户Home⽬录下的.pub-cache⽂件夹下到credentials.json⽂件。
下图是我执⾏了⼀次发布action的结果,只需2分钟,⽆需科学上⽹⼯具和给命令终端配置代理,即可完成flutter插件的发布,真的是⾮常⽅便!
如何使⽤Action打包apk
作为⼀名Android开发,你有没有想过每次提交代码或者发布版本的时候,github能够对应帮你⾃动打包出⼀个apk?
这样你既可以省去打包apk的时间,还免去了应⽤包的管理,岂不美哉?
那么我们应该怎么做呢?下⾯就是我实现的⼀个workflow脚本,主要的功能就是:在提交代码或者发
布版本的时候,⾃动构建脚本打包出apk,同时直接上传⾄Artifacts存储。
name: Android CI
on:
release:
types:[published]
push:
branches:
- master
tags:
-'2.*'
pull_request:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
-uses: actions/checkout@v2
-name: set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version:1.8
-
name: release apk sign
run:|
echo "给apk增加签名"
cp $GITHUB_WORKSPACE/.github/workflows/android.keystore $GITHUB_WORKSPACE/app/android.keystore
sed '$a\RELEASE_STORE_FILE=./android.keystore' $GITHUB_WORKSPACE/gradle.properties -i -name: build with gradle
run:|
echo "开始进⾏release构建"
chmod +x gradlew
./gradlew app:assembleRelease
-name: upload apk
uses: actions/upload-artifact@master
if: always()
with:
name: xupdate_apk
path: ${{ github.workspace }}/app/build/outputs/apk/release
详细配置可以参考我的 中的配置。
这⾥我们可以看到,我们定义的触发条件是release,push和pull_request,触发的分⽀是master,tags是2.*开头的。
整个任务主要分为4个步骤:
1.set up JDK 1.8: 构建java1.8的环境。
3.build with gradle:编译构建apk。运⾏assembleRelease命令打release包。
4.upload apk:上传apk⾄Artifacts。
最后执⾏的效果如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论