

利用GitHub Actions实现版本自动构建与发布流程
source link: https://xiaozhou.net/auto-ci-cd-via-github-actions-2022-05-02.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

利用GitHub Actions实现版本自动构建与发布流程
GitHub Actions 是 GitHub 自家推出的持续集成和持续交付工作流服务。自从上次利用GitHub Actions实现Blog自动部署与发布过后,构建和发布blog从此变得轻松。这次,我打算充分利用 GitHub Actions, 把开源项目的持续构建和发布流程做成完全自动化。
用我经常维护的一个项目 GoDNS 举个栗子,每次发布的时候,需要手动执行的两个任务:
- 基于不同平台进行交叉编译,把编译好的二进制文件分别上传到GitHub上,进行新版本的发布。
- 另外,这个项目还需要构建基于不同平台的 Docker 镜像,然后推送到 Docker Hub 上。
在使用 GitHub Actions 之前,我的做法就是在本机使用 Makefile 分别构建二进制文件和 Docker 镜像。这一系列操作在 Mac OS 下的结果就是:无法避免的风扇狂转,以及CPU温度的陡然上升。为了减轻笔记本的负担,后来我把构建 Docker 镜像的流程迁移到了VPS上。不过,这也使发布流程略显繁琐。
有了 GitHub Actions,事情就变得简单了,通过设置一个触发流程的事件,就可以用两个并行的流程分别构建二进制文件和 Docker 镜像了:
在 GoDNS 的构建流程中,触发条件是当每次有新的 tag
被创建的时候。通过把新创建的 tag
push 到GitHub,两个 actions 就会并行执行。其中一个 action 负责构建跨平台二进制文件,完成后自动 release 一个相应的新版本。另外一个 action 负责构建 Docker 镜像,并 push 到 Docker Hub。
不得不说,自从用上了 GitHub Actions,我的笔记本被彻底解放了。附上两个自动构建发布流程,供参考。
Workflow 及定义
- 二进制包自动构建与发布流程
name: Auto Release
on:
push:
tags:
- '*'
permissions:
contents: write
jobs:
goreleaser:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
-
name: Set up Go
uses: actions/setup-go@v2
with:
go-version: 1.17
-
name: Run GoReleaser
uses: goreleaser/goreleaser-action@v2
with:
# either 'goreleaser' (default) or 'goreleaser-pro'
distribution: goreleaser
version: latest
args: release --rm-dist
env:
GITHUB_TOKEN: ${{ secrets.MY_GITHUB_TOKEN }}
- Docker 镜像自动构建与发布流程
name: Docker Image CI
on:
push:
tags:
- '*'
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Get git tag
id: tag
uses: dawidd6/action-get-tag@v1
with:
strip_v: true
- 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.DOCKER_USER }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push the docker image
uses: docker/build-push-action@v2
with:
platforms: linux/amd64,linux/arm64,linux/arm/v7
push: true
tags: timothyye/godns:latest,timothyye/godns:${{steps.tag.outputs.tag}}
Recommend
-
15
实现目标 本地push代码到GitHub,Webhook自动触发Jenkins上的构建动作,完成安装Node插件并且打包,然后通过Publish Over SSH插件,将打包出来的文件,部署到目标服务器上。 前期准备 GitHub账号和项...
-
9
利用GitHub Actions实现Blog自动部署与发布 发表于 2020-06-08 | 分类于 技术控 |
-
5
GitHub 全家桶:Actions 自动构建多架构 Docker 镜像并上传至 Packages (ghcr.io) 2021-11-24 Category:
-
8
利用GitHub Actions自动为README添加TOC目录原创 GitHub的Markdown目前不支持直接[TOC]渲染文章的目录,有些README则需要这样的效果,可以借助外部工具进行生成,也可以借助 GitHub Actions 自动生成,本文就介绍这种方式。...
-
10
利用GitHub Actions自动将项目贡献者列表添加到README中原创 当我们负责的项目有越来越多的人加入进行协作之后,将贡献者添加到 README 中是一个很好的激励作用,很多大的项目也都是这么做的,本文就来讲一下,如何借助 Github Actions 自动将项目贡献者列...
-
7
-
6
-
5
-
5
-
24
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK