从零开始-文件资源管理器-28-Github Actions 创建 Docker 镜像

151 阅读2分钟

功能雏形大致完成,这里将使用 Github 的 Actions 创建 Docker 镜像。创建成功后同时上传至该项目的 Project 内。

 

免费的 github 用户有 2000 分钟/月的 Action 使用时间,可在个人设置页的 Billing and plans 菜单下的 pland and usage 子菜单页面查看使用情况

 

Github workflow

name: Docker build app
on:
  workflow_dispatch:

env:
  IMAGE_NAME: explorer

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      TZ: Asia/Shanghai
      REGISTRY: ghcr.io

    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          ref: main

      - name: Set up Docker Buildx
        id: buildx
        uses: docker/setup-buildx-action@v3

      - name: Login to DockerHub
        uses: docker/login-action@v3
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ github.repository_owner }}
          password: ${{ secrets.PROJECT_TOKEN }}

      - name: Build and push
        id: docker_build
        uses: docker/build-push-action@v5
        with:
          context: .
          file: ./explorer.full.Dockerfile
          push: true
          tags: ${{ env.REGISTRY }}/yangws29/${{ env.IMAGE_NAME }}:latest

docker 的 tag 为全小写,由于账户名为大小写混合,打 tag 时不能直接使用 ${{ github.repository_owner }} 该环境变量。只需要将自己的用户名大写变为小写即可。

 

on:
  workflow_dispatch:

启用 workflow 可手动启动 workflow 模式

 

使用了

  • actions/checkout@v4 获取仓库代码
  • docker/setup-buildx-action@v3 切换 docker build
  • docker/login-action@v3 登录 docker
  • docker/build-push-action@v5 build Docker 镜像并 push

也可使用 docker/login-action@v3 与 docker/build-push-action@v5 登录上传至阿里云的私有镜像源内。

      - name: Login to DockerHub
        uses: docker/login-action@v3
        with:
          registry: registry.cn-hangzhou.aliyuncs.com
          username: ${{ secrets.ALI_DOCKER_USERNAME }}
          password: ${{ secrets.ALI_DOCKER_PASSWORD }}

      - name: Build and push
        id: docker_build
        uses: docker/build-push-action@v5
        with:
          context: .
          file: ./explorer.full.Dockerfile
          push: true
          tags: registry.cn-hangzhou.aliyuncs.com/NAMESPACE/IMAGE-NAME

 

相关设置

生成 ${{secrets.PROJECT_TOKEN}}  所需的 PROJECT_TOKEN步骤

  1. 个人 Profile 页,点击侧边菜单最下面的 Develooper settings 菜单
  2. 进入 Personal access tokens → Tokens(classic)子菜单
  3. 点击 Generate new token 按钮,选择 Generate new token(classic)菜单
  4. Note 输入框输入你想要的名称
  5. Expiration 选择Token 过期时间
  6. Select scopes 复选框列表选中 write:packages 、delete:packages 复选框
  7. 点击最下面的 Generate token 按钮,完成 Token 的创建

这样这个创建好的 Token 就能让 Actions 的 workflow 将 build 好的镜像上传至 ghcr.io 个人 packages 内

 

${{secrets.PROJECT_TOKEN}} 填写路径

github 项目内,settings 选项卡,Secrets and variables 菜单,Actions 子菜单。点击 New Repository secret 按钮。

  1. name 输入框输入 PROJECT_TOKEN
  2. Secret 输入框输入刚刚创建好的 TOKEN

 

将上传后的镜像关联至项目中

进入个人主页中,点击 Packages 选项卡。

进入刚刚上传好的镜像页面。点击 Connect Repository 按钮,选择需要关联的仓库即可。

点击右边的 package settings 按钮,页面滚动到最下面,Danger Zone 内容部分,点击 Change visibility 按钮,即可对该镜像镜像管理。当为 Private 时,需要授权的用户才能下载镜像。切换为 Public 即所有用户都可以 pull 该镜像

 

额外信息

镜像地址 docker.pkg.github.com 与 ghcr.io 格式区别

  • docker.pkg.github.com/OWNER/REPOSITORY/IMAGE-NAME
  • ghcr.io/OWNER/IMAGE-NAME

 

git-repo

yangWs29/share-explorer