利用GitHub Actions进行Golang项目的自动构建

分类
教程
标签
CICD

这段时间刚考完试,正好提到了自动化部署,周六花了一天时间浅学了一下

思路

  1. 项目上传GitHub
  1. GitHub Actions对项目进行编译并发布到DockerHub
  1. Github Actions通过SSH连接到服务器运行Docker Compose进行部署

配置文件

Dockerfile

这次的项目仍然采用Docker进行构建
参考文件Dockerfile
1# 基础镜像 第一阶段FROM golang:1.17.8-alpine as builder 2RUN apk --no-cache add git 3MAINTAINER cunoe 4# 操作目录WORKDIR /go/src/cunoe/ 5# 复制源文件至操作目录COPY . . 6# 编译RUN GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app 7# 基础镜像 第二阶段FROM alpine:latest as prod 8RUN apk --no-cache add ca-certificates 9WORKDIR /root/ 10# 从builder复制二进制文件至操作目录COPY --from=builder /go/src/cunoe/app . 11CMD ["./app"]
这是项目里实际用到的Dockerfile,与我之前的构建不同,这次我采用的是多阶段构建,其好处就是有效的缩小了最终产生的镜像体积,同时更加便于维护与使用,你可以随时在某一阶段停下。通过这种方式构建的镜像由于只存在二进制文件,故其体积几乎只有二进制文件的大小,便于服务器进行部署。

.github/workflows/Deploy.yml

1name: deploy 2 3# 在[master]分支发生[push]和[pull_request]的操作时进行如下[jobs] 4on: 5 push: 6 branches: [ master ] 7 pull_request: 8 branches: [ master ] 9 10jobs: 11# [build] 用于构建项目并且发布到DockerHub 我采用的是Docker官方提供的方案 12 build: 13 runs-on: ubuntu-latest 14 15 steps: 16 - 17 name: Set up QEMU 18 uses: docker/setup-qemu-action@v1 19 - 20 name: Set up Docker Buildx 21 uses: docker/setup-buildx-action@v1 22 - 23 name: Login to DockerHub 24 uses: docker/login-action@v1 25 with: 26 username: ${{ secrets.DOCKERHUB_USERNAME }} 27 password: ${{ secrets.DOCKERHUB_TOKEN }} 28 # 通过DockerHub》Account Settings》Security》New Access Token创建 29 - 30 name: Build and push 31 id: docker_build 32 uses: docker/build-push-action@v2 33 with: 34 push: true 35 tags: cunoe/hello:latest 36 37# [deploy]通过SSH连接到服务器执行操作 38 deploy: 39 runs-on: ubuntu-latest 40 needs: [build] # 依赖于[build] 41 steps: 42 - name: SSH Remote Commands 43 uses: appleboy/ssh-action@master 44 with: 45 host: ${{ secrets.HOST }} 46 username: ${{ secrets.USERNAME }} 47 port: ${{ secrets.PORT }} 48 password: ${{ secrets.PASSWORD }} 49 script: ${{ secrets.COMMAND }} # 需要执行的命令

后记

如此就完成了GitHub Actions的布置
当然你可以不采用Docker官方提供的Actions,也有不错的开源Actions如:wuhan005/publish-docker-action
下面是服务器的参考命令
1#!/bin/bash 2docker stop cunoe-hello 3docker rm cunoe-hello 4docker rmi cunoe/hello 5docker compose -f /home/cunoe/docker-compose.yml up -d cunoe-hello
通过Docker Compose可以很方便的去管理Docker容器