yfdoor
yfdoor
发布于 2023-04-11 / 12 阅读 / 1 评论 / 0 点赞

利用 Github Actions 构建 Docker 镜像

利用 Github Actions 构建 Docker 镜像

通常我们需要 docker 镜像的时候,只要去 docker hub 或其他的源直接拉取即可。可是有的时候,原有的镜像需要修改,那么我们就需要重新 build docker 镜像了。

比如:这次我们需要部署 wiki.js ,但是源镜像不支持在 markdown 的编辑器中直接从剪切板粘贴图片,而项目的 PR 中有人提出了新的修改建议,但是作者却迟迟未能合并,所以需要自己修改代码后再编译新的镜像出来使用。

修改代码后,我们可以直接借助 Github 的 actions 来构建新的镜像并上传到 docker hub: 注意点:

  1. DOCKERHUB_USERNAME,DOCKERHUB_TOKEN,PACKAGE_TOKEN 等之类的这些 secrets 要提前在自己的项目设置中定义好。
  2. Build and push Docker image 步骤中可以通过 platforms: linux/amd64,linux/arm64 来设置需要编译的平台。
# This is free software, lisence use MIT.
# Copyright (C) https://github.com/yfdoor
#
# https://github.com/yfdoor/wiki
# Description: GitHub Actions for wiki docker Build

name: Docker

on:
  push:
    tags: [ 'v*.*.*' ]
  workflow_dispatch:
  
env:
  BASE_DEV_VERSION: 2.5.0
  
jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3
        
      - name: Set Build Variables
        run: |
          if [[ "$GITHUB_REF" =~ ^refs/tags/v* ]]; then
            echo "Using TAG mode: $GITHUB_REF_NAME"
            echo "REL_VERSION=$GITHUB_REF_NAME" >> $GITHUB_ENV
            echo "REL_VERSION_STRICT=${GITHUB_REF_NAME#?}" >> $GITHUB_ENV
          else
            echo "Using BRANCH mode: v$BASE_DEV_VERSION-dev.$GITHUB_RUN_NUMBER"
            echo "REL_VERSION=v$BASE_DEV_VERSION-dev.$GITHUB_RUN_NUMBER" >> $GITHUB_ENV
            echo "REL_VERSION_STRICT=$BASE_DEV_VERSION-dev.$GITHUB_RUN_NUMBER" >> $GITHUB_ENV
          fi
      
      - name: Disable DEV Flag + Set Version
        run: |
          sudo apt-get install jq -y
          mv package.json pkg-temp.json
          jq --arg vs "$REL_VERSION_STRICT" -r '. + {dev:false, version:$vs}' pkg-temp.json > package.json
          rm pkg-temp.json
          cat package.json

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v2

      - name: Setup Docker buildx
        uses: docker/setup-buildx-action@v2

      - name: Login to Docker Hub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Log in to the Container registry
        uses: docker/login-action@v2
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.PACKAGE_TOKEN }}

      - name: Build and push Docker image
        uses: docker/build-push-action@v4
        with:
          context: .       
          platforms: linux/amd64,linux/arm64    
          file: ./dev/build/Dockerfile
          push: true
          tags: |
            yfdoor/wiki:latest
            yfdoor/wiki:${{ env.REL_VERSION_STRICT }}
            ghcr.io/yfdoor/wiki:latest
            ghcr.io/yfdoor/wiki:${{ env.REL_VERSION_STRICT }} 

评论