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

news/2024/9/19 18:36:38/ 标签: docker, github, 容器

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

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

1.准备工作

dockerhub_token_7">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。

githubtoken_21">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-lateststeps:# uses代表使用一个模块,此处使用的是checkout模块,将github项目文件导入到当前环境中- uses: actions/checkout@v3# 使用with跟在后面来为前面的模块输入参数with:submodules: 'true'- name: Set up QEMUuses: docker/setup-qemu-action@v2- name: Set up Docker Buildxuses: docker/setup-buildx-action@v2- name: Login to DockerHubuses: docker/login-action@v2with:# 这里用到了github的secrets功能,避免账户和密码随仓库泄露username: ${{ secrets.DOCKER_USERNAME }}password: ${{ secrets.DOCKER_TOKEN }}# 设置当前的发行版本tag- name: Release versionid: release_versionrun: |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 pushuses: docker/build-push-action@v2with:context: .file: dockerfilebuild-args: |GITHUB_TOKEN=${{ secrets.RELEASE_TOKEN }}platforms: |linux/amd64linux/arm64linux/armpush: true# 指定用户/仓库名tags: |${{ secrets.DOCKER_USERNAME }}/kook-ticket-bot:latest${{ secrets.DOCKER_USERNAME }}/kook-ticket-bot:${{ env.app_version }}# 这里是通过md文件自动生成dockerhub描述的模块,也可以不需要- name: Docker Hub Descriptionuses: peter-evans/dockerhub-description@v3with:username: ${{ secrets.DOCKER_USERNAME }}password: ${{ secrets.DOCKER_PASSWORD }}repository: ${{ secrets.DOCKER_USERNAME }}/kook-ticket-botreadme-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/amd64linux/arm64linux/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镜像了。


http://www.ppmy.cn/news/1516107.html

相关文章

Ubuntu清除缓存的方法--防止系统崩溃

前情提要:虚拟机出现过好几次的崩溃,终于同事发给了一个可以清除缓存的 1)崩溃1:之前将虚拟机放置在某盘中,该盘后续一直有别的东西存入,导致ubuntu直接打不开,后续就将虚拟机直接放在电脑单独…

以简单的例子从头开始建spring boot web多模块项目(五)-thymeleaf引擎

继续向里面加,这次是引入thymeleaf渲染引擎。 使用这个引擎的很多,主要是以下几个优点: Thymeleaf是适用于Web和独立环境的现代服务器端Java模板引擎。Thymeleaf的主要目标是为您的开发工作流程带来优雅的自然模板 -HTML可以在浏览器中正确显…

如何安装和高级 AMP for WP

当 WordPress 是支持 AMP 的 WEB 站点时,主要通过两个插件支持 AMP。 一个是AMP插件。 这个插件也参与谷歌的开发,并被确认为AMP项目的官方插件。 我最初也安装了这个AMP插件,但我不知道是否能够共存的常规网站和AMP兼容网站,很难…

【功能自动化】WebTours实现订票流程并设置检查点

环境搭建: 1.需要配置WebTours网站 代码实现: # 导入包 from selenium import webdriver from selenium.webdriver.support.select import Select from time import sleep# 打开浏览器 driver webdriver.Chrome() driver.get("http://127.0.0.…

Python新手必看!这个模块让Python的重试更加便捷灵活!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Python重试 📒📝 安装📝 使用📝 进阶使用⚓️ 相关链接 ⚓️📖 介绍 📖 在Python编程中,网络请求、数据库操作或任何可能因外部因素而失败的场景中,错误重试显得尤为重要。它能有效减少因暂时性问题导致的程序崩溃…

java接口 controller层接收list集合传参,postman 调用接口时required parameter XXX is not present

开发过程中开发一个java接口 controller层接收list集合传参,然后postman调用一直不成功,报错 使用RequestParam方式,如果postman 调用接口时报错required parameter XXX is not present 可能是(value“items”)跟你输…

理解与推导贝叶斯滤波算法

很多时候一些算法看起来极其复杂,极其难懂,不是因为我们愚不可及,而是因为我们看到的是别人省略过很多步骤和脑海中思考过的思路最后呈现出来的公式和文字,而好的博客就应该尽量还原这些思考过程及省略掉的步骤。 像卡尔曼滤波(Kalman filters)、粒子滤波(Particle filt…

七、Centos安装LDAP--Docker版--已失败

参考博客: docker 安装 OpenLDAP 及 LdapAdmin桌面版、页面版(osixia/openldap)_docker安装ldap-CSDN博客 LDAP使用docker安装部署与使用_memberof ldap docker-CSDN博客 目录 一、安装Docker Docker基本使用 管理镜像 二、拉取LDAP镜像 配置docker国内的镜像…

Android笔试面试题AI答之Kotlin常见考点总结

Kotlin面试题主要涵盖了Kotlin语言的基础、特性、高级用法以及与其他编程语言的比较等多个方面。以下是Kotlin常见面试考点的总结: Kotlin基础: 定义与特性:简述Kotlin是什么,以及它的主要特性,如空安全、扩展函数、协…

3.5mm耳机插头制作手机内录线电路图

1.背景 无人直播或录屏直播手机mic会对外界声音的录入,而且很嘈杂。 2.实现功能 手机酷狗播放音频,同时手机内打开录音软件录音,同一台手机操作。 3.电路图 接线分为2种,国标和美标,自己尝试,肯定有一…

OpenCV几何图像变换(5)旋转和缩放计算函数getRotationMatrix2D()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算二维旋转的仿射矩阵。 该函数计算以下矩阵: [ α β ( 1 − α ) ⋅ center.x − β ⋅ center.y − β α β ⋅ center.x ( …

校园供水系统智能管理丨全国大学生数学建模竞赛E题

课程特色 新技术: 新知识、新方法、新技术层出不穷,学习实战专家的课程,让自己持续保持竞争力。 新教学:师傅带练教学模式,全方位在线答疑辅导学习 新思路:培养创新思维和实践能力,…

Github 2024-08-22 Go开源项目日报 Top10

根据Github Trendings的统计,今日(2024-08-22统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10TypeScript项目1精选Go框架、库和软件列表 创建周期:3700 天开发语言:Go协议类型:MIT LicenseStar数量:127377 个Fork数量:11751 …

安泰功率放大器参数怎么选型号

选择功率放大器的型号是一个重要的决策,特别是在设计电子系统时。不同的应用需要不同类型的功率放大器,因此选型是至关重要的。以下是关于如何选择功率放大器型号的详细文章,包括了相关的参数和考虑因素。 在选择功率放大器型号之前&#xff…

CSS中的Flexbox布局和Grid布局有什么区别?适用场景

CSS中的Flexbox布局和Grid布局是现代Web设计中两种极其重要且强大的布局模型。它们各自解决了不同的布局挑战,提供了前所未有的灵活性和控制力。下面将详细探讨Flexbox和Grid布局的区别以及它们各自适用的场景,以确保理解全面且深入。 Flexbox布局 基本…

贪心算法---跳跃游戏(2)

题目&#xff1a; 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到…

【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(十六)

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

适合大学生用的笔记本电脑?

适合大学生用的笔记本电脑&#xff1f; 李升伟 以下是一些适合大学生的笔记本电脑推荐&#xff1a; 1. 联想 thinkbook14 2023轻薄本 &#xff1a;thinkpad系列定位商务场景&#xff0c;thinkbook系列为商务、家庭两用轻薄本&#xff0c;性价比不错。2023款沿用全金属机身&…

vue最早可以读取this的生命周期函数

在Vue中&#xff0c;最早可以安全地读取到this&#xff08;即Vue实例及其属性&#xff0c;如data、methods等&#xff09;的生命周期函数是created。 created 钩子在实例创建完成后被立即调用。在这一步&#xff0c;实例已完成以下配置&#xff1a; 数据观测&#xff08;data…

使用VS Code开发.NET 8 环境搭建

1. sdk环境确认 -- 查看.net 版本 PS C:\Users\a> dotnet --version 8.0.303 -- 查看已安装的.net sdk 列表 PS C:\Users\a> dotnet --list-sdks 3.0.100 [C:\Program Files\dotnet\sdk] 5.0.301 [C:\Program Files\dotnet\sdk] 6.0.417 [C:\Program Files\dotnet\sdk] …