简介
其实github action出来已经很久了,但是我一直没有什么场景去使用他,之前写了一个xiaomi路由器的exporter,正好试一试
操作
首先clone一下代码
git clone https://github.com/bboysoulcn/miwifi-exporter.git
之后就是新建目录
在项目根目录创建.github/workflows
目录
mkdir -p .github/workflows
之后在这个目录里面新建一个yaml文件,什么名字都可以
vim ci.yaml
添加如下内容
name: ci
on:
push:
branches:
- master
jobs:
build-and-deploy-image:
runs-on: ubuntu-latest
steps:
# 拉取master分支
- name: Checkout
uses: actions/checkout@master
# 设置qemu来编译多个平台的镜像
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
# 设置buildx
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
# 配置缓存加快编译速度
- name: Cache Docker layers
uses: actions/cache@v2
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
# 登陆dockerhub
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
# 编译并且推送到dockerhub
- name: Build and push
uses: docker/build-push-action@v2
with:
push: true
platforms: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache
tags: |
bboysoul/miwifi-exporter:latest
bboysoul/miwifi-exporter:v1.0.0
# 微信提醒
- name: WeChat Work notification by markdown
uses: chf007/action-wechat-work@master
env:
WECHAT_WORK_BOT_WEBHOOK: ${{secrets.WECHAT_WORK_BOT_WEBHOOK}}
with:
msgtype: markdown
content: miwifi-exporter 编译完成
说下流程
-> 拉取master分支 -> 设置qemu来编译多个平台的镜像 -> 设置buildx -> 配置缓存加快编译速度 -> 登陆dockerhub -> 编译并且推送到dockerhub -> 微信提醒
然后说下具体的用法,其实和很多流水线一样GitHub action也是用很多步骤串联起来做cicd的,个人感觉现在不用yaml文件去定义流水线的工具都是垃圾
name 就是去定义这个流水线的名字,如果不写,那么就是当前这个文件的文件名,最好写一下
on 就是使用什么事件去触发这个流水线,比如上面就是当master有push事件就会触发这个流水线,当然你可以定义多个事件来触发比如pull_request事件,有一个好玩的点就是你可以定义一个pull_request事件加一个比如企业微信机器人提醒的step来及时收到你的项目pull_request,更多的事件可以看下面
https://docs.github.com/cn/actions/reference/events-that-trigger-workflows#
之后就是定义jobs,build-and-deploy-image是这个job的名字,你可以写任何其他相关的名字
runs-on 表示你要运行任务的虚拟机环境,目前支持
- Windows Server 2019
- Ubuntu 20.04
- Ubuntu 18.04
- Ubuntu 16.04
- macOS Catalina 10.15
详细的可以看
https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on
steps 就是定义这个job的每个步骤每个步骤都有不同的参数,一般来说每个步骤都有一个action,你可以使用use命令去使用action,具体的action可以去marketplace去寻找
https://github.com/marketplace?type=actions
action 方便了我们做很多以前必须要编写脚本做的事情,比如登陆到dockerhub你只要使用docker/login-action@v1
这个action就可以了,不需要关注什么docker login等操作,with定义了这个action所要使用的参数,这个参数如果是一个变量的话就需要写成${{secrets.WECHAT_WORK_BOT_WEBHOOK}}
这种形式,name就是定义这个step的名字,当然你也可以添加自己的环境变量,只要使用env命令就可以,详细的可以看下面
https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idsteps
关于编译多个平台的镜像
你可以看到,这里我使用了qemu action,这个是编译多个平台镜像的关键,你可以在
https://github.com/docker/setup-qemu-action
这个地方查看他的详细使用方式
关于构建镜像的缓存
对于docker镜像的构建加上构建缓存还是十分有必要的,在没有添加构建缓存的时候我的构建时间接近10分钟,因为是多个平台镜像的构建,所以速度会很慢,但是添加了构建缓存之后,构建的时间降到了5分钟左右,明显提高了构建的速度
其他骚操作
其实github action已经被人家用来操作一些其他的用途,比如定时任务管理工具,你只要在on命令下添加cron表达式就可以,比如
on:
push:
schedule:
- cron: '0 21 * * *'
这样你就可以定义一些任务来让github给你定时执行
还有就是下载一些我们不能访问,但是国外的人都可以访问到的文件,你应该懂我在说什么,比如你想下载一段youtube上的视频,你就可以使用github action去下载,然后上传到artifact中,之后你只要下载artifact就可以了
或者说你可以在里面运行一个frp的客户端,然后你就可以把它作为一个免费的云服务器来使用了
或者还有就是: 挖矿??????
欢迎关注我的博客www.bboy.app
Have Fun