使用github action来自动构建你的项目


github action是一套自动构建的工具,类似于Travis CI,但是由于是官方支持,所以可玩性非常高,也支持很多定制,下面就基于本博客项目的自动构建docker镜像来给大家介绍下。

基本介绍

概念介绍

github action有一些基本的概念,大家看看下面的介绍就可以理解了:
- workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。
- job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。
- step(步骤):每个 job 由多个 step 构成,一步步完成。
- action (动作):每个 step 可以依次执行一个或多个命令(action)。

示例介绍

workflow是使用yml格式,存储在项目的.github/workflows目录中,一个文件即一个工作流程,其中需要描述基础的job,step,action部分。

参考我的自动构建docker镜像来给大家逐个介绍下:

name: docker
on:
  push:
    paths-ignore:
      - '**/*.md'
      - '**/*.yml'
    branches:
      - 'master'
jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          platforms: |
            linux/amd64
            linux/arm64
            linux/arm/v7
            linux/arm/v6
            linux/386
          tags: ${{ secrets.DOCKERHUB_USERNAME }}/djangoblog:latest
  • name即该workflow的名称
  • on 是触发条件,本例是当推送到master分支时候即触发该流程,paths-ignore是需要忽略的文件或者路径,毕竟我们只需要在代码文件变动的时候才需要触发构建。
  • jobs 即最主要的了,需要执行的任务。
  • docker 为job的名字,我们这里只有一个job。
  • runs-on 为运行环境,这里是ubuntu
  • steps 为job运行的各个步骤。

我们可以看到,在job中有很多的steps,这些steps都是顺序运行的,其中一步出错,后面的都将不会再运行,整个流程即终止,在上面的示例中,各个步骤分布是: 1. Checkout 签出代码 2. Set up QEMU 准备QEMU。 3. Set up Docker Buildx 构建docker环境 4. Login to DockerHub 登录dockerhub。 5. Build and push 构建docker镜像然后推送到dockerhub。

其中的${{ secrets.DOCKERHUB_USERNAME }}${{ secrets.DOCKERHUB_TOKEN }}是类似于密码或者token等,你不希望直接提交到代码仓库中,但是在构建过程中需要的设置,这些设置可以在你的仓库中Settings->Secrets->Repository secrets 中设置。 另外github提供了一个官方的action市场,可以搜索到他人提交的 actions。