type
status
date
slug
summary
tags
category
icon
password

一、先来创建一个项目

首先在 github 上面创建一个私有项目
notion image

二、前置准备工作

1.推送ghcr.io

这个网站生成一个 token
PS:注意此 token 需要读写 packages 等权限 详情请见这里准备好你的要部署的服务器的 账号 和密码(当前页可以使用秘钥登录,这里暂且使用密码)想好你的镜像名称(此处以 web-image 为例)

2.推送hub.docker.com

1.首先当然是申请账号,然后在Account setting、security下面有个AccessToken,生成一个
2.然后在github项目的setting=>security下,找到secrets and variables
3.配置上DOCKERHUB_USER和DOCKERHUB_TOKEN
4.将dockerhub的image namespace改为自己的,因为官方的账号我们没有权限推送,只能推自己账号下的空间

三、编写 github action

1、在源仓库的.github/workflows目录创建一个 publish-image.yml
2、在workflow文件中设置触发条件和作业(jobs)"
"示例代码如下:"
name: Docker Hub on: push: branches: [dev] tags: ["v*.*.*"] pull_request: branches: [dev] env: REGISTRY: docker.io IMAGE_NAME: ${{ secrets.DOCKER_USERNAME }}/pandora-web jobs: build: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Checkout repository uses: actions/checkout@v2 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Log into Docker Hub if: github.event_name != 'pull_request' uses: docker/login-action@v1 with: registry: ${{ env.REGISTRY }} username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Extract Docker metadata id: meta uses: docker/metadata-action@v3 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | type=sha type=ref,event=branch,branch=dev type=semver,pattern={{version}} - name: Build and push Docker image uses: docker/build-push-action@v2 with: context: . platforms: linux/amd64,linux/arm64 push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }}
这段代码是一个GitHub Actions的工作流程配置文件,用于自动化构建和推送Docker镜像到Docker Hub。它在特定的条件下(如代码推送到特定分支或创建拉取请求时)触发。以下是详细解释:

工作流程名称

name: Docker Hub
工作流程的名称为“Docker Hub”。

触发条件

on: push: branches: [dev] tags: ["v*.*.*"] pull_request: branches: [dev]
该工作流程会在以下情况下触发:
  • 当代码推送到dev分支时。
  • 当推送带有特定模式(v*.*.*)的标签时。
  • 当针对dev分支创建拉取请求时。

环境变量

env: REGISTRY: docker.io IMAGE_NAME: ${{ secrets.DOCKER_USERNAME }}/pandora-web
定义了一些环境变量:
  • REGISTRY:Docker注册表地址,设为docker.io
  • IMAGE_NAME:Docker镜像名称,包含了从机密变量中读取的Docker用户名和固定的镜像名称pandora-web

工作流的任务定义

jobs: build: runs-on: ubuntu-latest permissions: contents: read packages: write
定义了一个名为build的任务,运行环境为ubuntu-latest。并且设置了权限,允许读取内容和写入包。

步骤定义

  1. 检出代码仓库
    1. - name: Checkout repository uses: actions/checkout@v2
      使用actions/checkout@v2动作检出代码仓库。
  1. 设置Docker Buildx
    1. - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1
      使用docker/setup-buildx-action@v1设置Docker Buildx,用于构建多平台镜像。
  1. 登录Docker Hub
    1. - name: Log into Docker Hub if: github.event_name != 'pull_request' uses: docker/login-action@v1 with: registry: ${{ env.REGISTRY }} username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }}
      这一步在非拉取请求的事件中执行,使用docker/login-action@v1登录Docker Hub。用户名和密码从机密变量中读取。
  1. 提取Docker元数据
    1. - name: Extract Docker metadata id: meta uses: docker/metadata-action@v3 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | type=sha type=ref,event=branch,branch=dev type=semver,pattern={{version}}
      使用docker/metadata-action@v3提取Docker元数据并生成标签。根据不同的类型生成标签,如基于SHA的标签、分支标签(当事件为分支推送且分支为dev时)、和基于语义版本(semver)的标签。
  1. 构建并推送Docker镜像
    1. - name: Build and push Docker image uses: docker/build-push-action@v2 with: context: . platforms: linux/amd64,linux/arm64 push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }}
      使用docker/build-push-action@v2构建并推送Docker镜像:
      • context:构建上下文,当前目录。
      • platforms:指定目标平台(amd64和arm64)。
      • push:只有在不是拉取请求的事件中才推送镜像。
      • tags:使用从上一步骤中提取的标签。
      • labels:使用从上一步骤中提取的标签。
总体来说,这个GitHub Actions配置文件实现了在特定条件下自动化构建和推送Docker镜像的功能。

四、修改的配置

1.创建版本号文件

  1. 创建 VERSION 文件:
      • 在你的代码仓库根目录下创建一个名为 VERSION 的文件。
      • 文件内容为当前的版本号,例如:
        • 1.0.0
这样配置之后,每次在 dev 分支推送代码时,GitHub Actions将自动递增版本号,构建Docker镜像,并推送到Docker Hub,同时保留所有之前的版本。

2.新增的修改

  1. 读取当前版本号。
  1. 递增版本号。
  1. 更新并提交新的版本号。
  1. 构建并推送带有版本号和latest标签的Docker镜像
name: Docker Hub on: push: branches: [dev] pull_request: branches: [dev] env: REGISTRY: docker.io IMAGE_NAME: ${{ secrets.DOCKER_USERNAME }}/pandora-web jobs: build: runs-on: ubuntu-latest permissions: contents: write packages: write steps: - name: Checkout repository uses: actions/checkout@v2 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Log into Docker Hub if: github.event_name != 'pull_request' uses: docker/login-action@v1 with: registry: ${{ env.REGISTRY }} username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Get current version id: get_version run: echo "CURRENT_VERSION=$(cat VERSION)" >> $GITHUB_ENV - name: Increment version id: increment_version run: | VERSION_PARTS=(${CURRENT_VERSION//./ }) NEW_PATCH=$((VERSION_PARTS[2]+1)) NEW_VERSION="${VERSION_PARTS[0]}.${VERSION_PARTS[1]}.$NEW_PATCH" echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV echo $NEW_VERSION > VERSION - name: Commit new version run: | git config --global user.name 'github-actions' git config --global user.email '[email protected]' git add VERSION git commit -m "Increment version to ${{ env.NEW_VERSION }}" git push - name: Extract Docker metadata id: meta uses: docker/metadata-action@v3 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | type=raw,value=${{ env.NEW_VERSION }} type=raw,value=latest labels: | type=raw,value=${{ env.NEW_VERSION }} type=raw,value=latest - name: Build and push Docker image uses: docker/build-push-action@v2 with: context: . platforms: linux/amd64,linux/arm64 push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }}
 
chat2api免费使用GPT-4o部署自用的GPT4
悟然
悟然
一个普通的机器人专业本科生🍚
公告
type
status
date
slug
summary
tags
category
icon
password
🎉悟然blog
此博客由notion支持,要购买chatgpt的可以通过上方的悟然百货,低价购买