利用 Github Actions 构建 Docker 镜像
通常我们需要 docker 镜像的时候,只要去 docker hub 或其他的源直接拉取即可。可是有的时候,原有的镜像需要修改,那么我们就需要重新 build docker 镜像了。
比如:这次我们需要部署 wiki.js ,但是源镜像不支持在 markdown 的编辑器中直接从剪切板粘贴图片,而项目的 PR 中有人提出了新的修改建议,但是作者却迟迟未能合并,所以需要自己修改代码后再编译新的镜像出来使用。
修改代码后,我们可以直接借助 Github 的 actions 来构建新的镜像并上传到 docker hub: 注意点:
- DOCKERHUB_USERNAME,DOCKERHUB_TOKEN,PACKAGE_TOKEN 等之类的这些 secrets 要提前在自己的项目设置中定义好。
- 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 }}