GitHub Actions 持续集成 - 3. 构建 Docker 镜像并推至 Docker Hub

GitHub Actions 持续集成 - 3. 构建 Docker 镜像并推至 Docker Hub

本文地址:blog.lucien.ink/archives/498

0. 摘要

之前挖了一个,慢慢补上。

上篇文章介绍了如何借助 GitHub Actions 在 Release 时自动上传打包好的工程。本篇文章旨在介绍将 Dockerfile 构建出来的镜像上传至 Docker Hub。

1. 现成的轮子

使用此 Action 可以将通过 Dockerfile 生成的镜像上传至 Docker Hub。

github.com/elgohr/Publish-Docker-Github-Action

1.1 稍作修改

原作支持将 release 的 tag 当作 docker image 的 tag。

但是我之前都是使用的阿里云的命名规则,假设 release 的 tag 为 release-v3.1,那么 docker image 的 tag 就会是 3.1

为了保持命名风格的统一,我对原作进行了修改

2. GitHub Actions 配置

.github/workflows/upload-to-release.yml

name: Go Release

on:
  release:
    types: [published]

jobs:

  release:
    if: github.repository == 'PasteUs/HelloCI'
    name: Build with go ${{ matrix.go_version }} on ${{ matrix.os }} and upload
    runs-on: ${{ matrix.os }}

    strategy:
      matrix:
        go_version: [1.13]
        os: [ubuntu-latest]

    steps:

      - name: Set up Go ${{ matrix.go_version }}
        uses: actions/setup-go@v1
        with:
          go-version: ${{ matrix.go_version }}
        id: go

      - name: Check out code into the Go module directory
        uses: actions/checkout@v1

      - name: Get dependencies
        run: |
          go get -v -t -d ./...
          if [ -f Gopkg.toml ]; then
              curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
              dep ensure
          fi

      - name: Build
        run: |
          go build -v -o main .

      - name: Publish Docker
        uses: LucienShui/Publish-Docker-Github-Action@2.7.1
        with:
          name: registry.cn-hangzhou.aliyuncs.com/pasteus/hello-ci # docker image 的名字
          username: ${{ secrets.DOCKER_USERNAME }} # 用户名
          password: ${{ secrets.DOCKER_PASSWORD }} # 密码
          registry: registry.cn-hangzhou.aliyuncs.com # 阿里巴巴的 Docker Hub
          dockerfile: Dockerfile # 指定 Dockerfile 的位置
          tag_names: true # 是否将 release 的 tag 作为 docker image 的 tag

2.1 Dockerfile

Dockerfile

FROM alpine:3
LABEL maintainer="Lucien Shui" \
      email="lucien@lucien.ink"
WORKDIR /root/
COPY main ./app
CMD ["./app"]
GitHub Actions 中,你可以使用缓存来加速构建过程,并恢复已缓存的镜像以减少构建时间。以下是一个示例,展示了如何在 GitHub Actions 中缓存并恢复镜像: ```yaml name: Cache and Restore Docker Image on: push: branches: - master jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Cache Docker image layers id: cache uses: actions/cache@v2 with: path: /var/lib/docker key: ${{ runner.os }}-docker-${{ hashFiles('**/Dockerfile') }} restore-keys: | ${{ runner.os }}-docker- - name: Build Docker image run: | if [ -z "${{ steps.cache.outputs.cache-hit }}" ]; then docker build -t your-docker-image-tag . else echo "Using cached Docker image" fi - name: Push Docker image run: | docker push your-docker-image-tag ``` 在上述示例中,我们使用了 `actions/cache` 动作来缓存和恢复 Docker 镜像。 - `path` 参数指定了要缓存的路径,这里是 `/var/lib/docker`,它是默认的 Docker 存储路径。 - `key` 参数用于唯一标识缓存,它使用了操作系统类型和 Dockerfile 的哈希值。 - `restore-keys` 参数用于在缓存无法命中时尝试从先前的缓存中恢复。 在 `Build Docker image` 步骤中,我们使用了条件语句来判断是否使用了缓存。如果 `steps.cache.outputs.cache-hit` 为空,表示缓存未命中,我们将执行构建命令。否则,我们将输出消息表示正在使用缓存的镜像。 最后,我们可以使用 `docker push` 命令将构建好的镜像推送到指定的镜像仓库。 通过使用缓存和恢复镜像的方法,可以减少构建时间并提高 GitHub Actions 的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值