0


【docker】使用github action来自动发布项目到dockerhub

本文首发于 ❄️慕雪的寒舍

使用github action来自动发布项目到dockerhub。参考 https://msdemt.github.io/p/github-action-build-docker/ 博客

1.准备工作

1.1 dockerhub token

https://hub.docker.com/settings/security

登录dockerhub,在用户的account settings里面获取用户token

image.png

将其添加到github仓库的secrets里面,具体位置是仓库设置中的 Secrets and variables 里面的 Actions 栏目中,如下图所示,添加 Repository secrets。

image.png

需要添加的是

DOCKER_USERNAME

为你的docker用户名(注意是用户名,不是邮箱),还有

DOCKER_TOKEN

为刚刚我们在dockerhub中获取的token。

1.2 获取github操作token

https://github.com/settings/tokens

到GitHub的用户设置中,创建一个token,需要给予repo、workflow、packages权限。如果你不知道给予什么权限,直接全给他选上,保障这个token不泄露给外部就可以了。

image.png

另外,expiration是过期日期,如果你担心泄漏造成问题,可以设置一个过期时间,但是需要到时间后去更新仓库的secrets。

image.png

点击确定以后会得到token,复制他,同样是到github仓库的secrets里面添加一个

RELEASE_TOKEN

变量。

2.上传workflows文件

2.1 添加如下yml文件

前期的准备工作已经搞定了,现在就是添加一个github action的yml文件了。

在你的仓库里面创建一个

.github/workflows

文件夹,并在里面创建一个

.yml

文件,写入如下内容。

name: docker images cicd
# 触发器设置on:push:branches:["main"]pull_request:branches:["main"]# 项目任务,任务之间可以并行调度jobs:build:# 选择云端运行的环境runs-on: ubuntu-latest
    steps:# uses代表使用一个模块,此处使用的是checkout模块,将github项目文件导入到当前环境中-uses: actions/checkout@v3
    # 使用with跟在后面来为前面的模块输入参数with:submodules:'true'-name: Set up QEMU
      uses: docker/setup-qemu-action@v2
    -name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v2
    -name: Login to DockerHub
      uses: docker/login-action@v2
      with:# 这里用到了github的secrets功能,避免账户和密码随仓库泄露username: ${{ secrets.DOCKER_USERNAME }}password: ${{ secrets.DOCKER_TOKEN }}# 设置当前的发行版本tag-name: Release version
      id: release_version
      run:|
        app_version=$(cat version.py |sed -ne "s/APP_VERSION\s=\s'v\(.*\)'/\1/gp")
        echo "app_version=$app_version" >> $GITHUB_ENV# 开始构建镜像-name: Build and push
      uses: docker/build-push-action@v2
      with:context: .
        file: dockerfile
        build-args:|
          GITHUB_TOKEN=${{ secrets.RELEASE_TOKEN }}platforms:|
          linux/amd64
          linux/arm64
          linux/armpush:true# 指定用户/仓库名tags:|
          ${{ secrets.DOCKER_USERNAME }}/kook-ticket-bot:latest
          ${{ secrets.DOCKER_USERNAME }}/kook-ticket-bot:${{ env.app_version }}# 这里是通过md文件自动生成dockerhub描述的模块,也可以不需要-name: Docker Hub Description
      uses: peter-evans/dockerhub-description@v3
      with:username: ${{ secrets.DOCKER_USERNAME }}password: ${{ secrets.DOCKER_PASSWORD }}repository: ${{ secrets.DOCKER_USERNAME }}/kook-ticket-bot
        readme-filepath: ./README.md

对这里面的内容做一定说明,其中

secrets.

使用的就是我们刚刚添加到github仓库中的变量,分别用于访问github仓库和登录dockerhub。

你会发现最末尾通过readme文件自动生成dockerhub的描述部分,多出来了一个上文没有提到的

secrets.DOCKER_PASSWORD

,这个是你dockerhub账户的密码。如果你不需要自动生成dockerhub的描述,那就可以把最后一个

Docker Hub Description

条目直接删除了,否则需要添加这个secrets。

项目中我使用了

version.py

文件来存放最新的版本号,该文件需要在项目的根路径中创建,内容格式如下

APP_VERSION ='版本号'

使用这个workflows文件,你只需要修改

${{ secrets.DOCKER_USERNAME }}/kook-ticket-bot

里面右侧的镜像名字为你的项目名字,将

file: dockerfile

这里的dockerfile设置为你项目中dockerfile的文件路径就可以了。

另外,在这个yml中,指定了三个平台的docker镜像,这里可以根据你自己的实际需要来减少一些平台。毕竟大部分用户用的都是amd64(即x86)的电脑,如果没有用户需要使用arm平台,可以把后两项删除,以加快github action的运行速度。

platforms:|
          linux/amd64
          linux/arm64
          linux/arm

最终完成action的截图如下

image.png

image.png

2.2 关于GITHUB_REPOSITORY_NAME_PART环境变量

在别的github action教学文章中,会提到使用

${{ env.GITHUB_REPOSITORY_NAME_PART }}

来直接用github的仓库名字作为镜像名。但经过我的测试,这个方法不适用于本文的这个workflows文件,使用该环境变量会导致容器的名字多出来一个尾随的

/

,最终的镜像名字变成了

用户名/镜像名/:tag

,不符合dockerhub中镜像的命名规范。以下是具体的actions执行错误截图。

image.png

The end

不过,根据github actions上的warning,我这个workflows文件已经是老版本的了,里面使用的很多特性都即将不再支持,所以只是个临时用用的权宜之计,后续得去找个另外的yaml文件来处理这个docker镜像了。

标签: docker github 容器

本文转载自: https://blog.csdn.net/muxuen/article/details/141407535
版权归原作者 慕雪华年 所有, 如有侵权,请联系我们删除。

“【docker】使用github action来自动发布项目到dockerhub”的评论:

还没有评论