Github Actions 的高级使用技巧

创建 actions actions 是可以联合收割机以创建作业和自定义工作流的单个任务。您可以创建自己的操作,或使用和自定义GitHub社区共享的操作。 可以通过编写自定义代码来创建操作,这些代码可以以您喜欢的任何方式与您的存储库进行交互,包括与GitHub的API和任何公开可用的第三方API集成。 可以编写自己的操作以在工作流中使用,或与GitHub社区共享您构建的操作。要与所有人共享您构建的操作,您的存储库必须是公共的。 操作可以直接在机器上或Docker容器中运行。您可以定义操作的输入、输出和环境变量。 可以构建Docker容器、JavaScript和复合操作。操作需要一个元数据文件来定义操作的输入、输出和主入口点。元数据文件名必须为 action.yml 或 action.yaml 。有关更多信息,请参阅“GitHub操作的元数据语法。“ docker 容器操作 Docker容器用GitHub Actions代码打包环境。这创建了一个更加一致和可靠的工作单元,因为操作的使用者不需要担心工具或依赖项。 Docker容器允许您使用特定版本的操作系统、依赖项、工具和代码。对于必须在特定环境配置中运行的操作,Docker是理想的选择,因为您可以自定义操作系统和工具。 对操作进行发布管理 如果您正在开发供其他人使用的操作,我们建议使用发布管理来控制分发更新的方式。 用户可以期望操作的修补程序版本包括必要的关键修复程序和安全修补程序,同时仍与其现有工作流保持兼容。每当您的更改影响兼容性时,您应该考虑发布新的主版本。 在这种发布管理方法下,用户不应该引用操作的默认分支,因为它可能包含最新的代码,因此可能不稳定。 相反,您可以建议用户在使用您的操作时指定一个主要版本,并且仅在遇到问题时才将他们引导到更具体的版本。 要使用特定的操作版本,用户可以配置他们的GitHub操作工作流,以针对标签,提交的SHA或以发布命名的分支。 使用标签进行发布管理 我们建议使用标签进行操作发布管理。使用此方法,您的用户可以轻松区分主版本和次版本: 在创建发布标签(例如 v1.0.2 )之前,在发布分支(例如 release/v1 )上创建并验证发布。 使用语义版本控制创建发布 文件列表的右侧,单击Releases 页面顶部,单击草拟新版本。 要为发布选择标签,请选择选择标签下拉菜单。 如果您创建了一个新标签,请选择目标下拉菜单,然后单击包含您要发布的项目的分支。 在“描述此版本”字段中,为您的版本键入描述。如果您在描述中 @mention 任何人,发布的版本将包含一个贡献者部分,其中包含所有提及用户的头像列表。或者,您可以通过单击生成发行说明自动生成发行说明。 或者,要在您的版本中包含二进制文件(例如已编译的程序),请在二进制文件框中拖放或手动选择文件 或者,选择设置为最新版本。如果不选择此选项,将根据语义版本控制自动分配最新版本标签。 如果您准备好发布您的版本,请单击发布版本。要稍后处理该版本,请单击保存草稿。然后,您可以在存储库的发布提要中查看已发布或草稿的发布。有关详细信息,请参阅“查看存储库的版本和标签”。 移动major version标签(例如 v1 、 v2 ),指向当前版本的Git ref。例如: git tag -a v1.4 -m "my version 1.4" 引入新的主要版本标记( v2 ),用于将破坏现有工作流的更改。例如,更改操作的输入将是一个突破性的更改。 主要版本最初可以使用 beta 标签发布,以指示其状态,例如 v2-beta 。 -beta 标签可以在准备好时移除。 带有查询参数的发布表单自动化 要通过使用自定义信息自动填充新发布表单来快速创建发布,您可以将查询参数添加到发布表单页面的 URL。...

June 14, 2023 · 10 分钟 · 2030 字 · 熊鑫伟,我

OpenIM离线部署设计

1. 基础镜像 以下是你需要的基础镜像及其版本: wurstmeister/kafka redis:7.0.0 mongo:6.0.2 mysql:5.7 wurstmeister/zookeeper minio/minio 使用以下命令拉取这些基础镜像: docker pull wurstmeister/kafka docker pull redis:7.0.0 docker pull mongo:6.0.2 docker pull mysql:5.7 docker pull wurstmeister/zookeeper docker pull minio/minio 2. OpenIM 与 Chat 镜像 详细了解 OpenIM 和 Chat 的版本管理及存储: version.md OpenIM 镜像 获取镜像版本信息: images.md 根据所需版本,执行以下命令: docker pull ghcr.io/openimsdk/openim-server:<version-name> Chat 镜像 执行以下命令来拉取镜像: docker pull ghcr.io/openimsdk/openim-server:<version-name> 3. 镜像存储选择 存储库: 阿里云:registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-server Docker Hub:openim/openim-server 版本选择: 稳定版:如 release-v3....

May 19, 2023 · 1 分钟 · 140 字 · 熊鑫伟,我

开源的阶段性成长指南

✨ 熟悉我的人都知道,我是一名不折不扣的开源爱好者,从大一开始接触到 GitHub 后,逐渐的沉迷于 开源世界 ~ 今天这篇文章很特别,算是自己参考并且总结出来的开源阶段,以及学习开源项目的步骤和心得。未来自己也是按照自己的规划来进行成长。 同学习 Kubernetes 的成长轨迹一样,这篇文章将会长期更新,也可以参与贡献 ~ 目前我是处于第一阶段,处于一种对开源世界和对知识的沉淀与积累的过程中,这个阶段的主要表现是我们开始学一些基础。但是我喜欢做笔记将它们记录下来,供自己日后翻阅和复习,当然也是制作自己的内容价值。 GitHub - cubxxw/awesome-cs-cloudnative-blockchain: 📚 菜鸟成长手册🚀 CS系列 、云原生系列、区块链系列、web3系列🔥、Golang系列💡…… 这一阶段,并不是意味着我开始迈入第二阶段,第一阶段就 come to an end. 我认为以下所讲的所有阶段就像是人生轨迹,并不是意味着你当爸爸了就不是父母的孩子,你依旧可以扮演着多种角色,并且不断完善和改进自己的角色。开源项目也是如此,类比我们的成长经历,在后一阶段我依旧会扮演好前一阶段的角色。所以我会坚持做自己的内容创作和知识共享 ~ ✨ 下面开始介绍适合大多数人的开源项目的不同阶段,为了方便定位,我将上面知识积累称呼为 0 阶段知识积累阶段。下面开始从第一阶段开始讲起~ 第一阶段:简单看源码阶段 方法: 简单看源码 说明: 简单看源码、文档、跑跑样例代码 学习效果: 1 ~ 2 有产出: 没有产出 是否达成学习闭环: 尽量问题驱动看源码,从问题出发学源码回归问题,达成闭环 Get 到的技能点: 阅读源码的技能 案例: 阅读 sealer、sealos、Kubernetes、k3s、horizoncd 的源码,并且测试 阶段 第一阶段:简单看源码阶段 方法 简单看源码 说明 简单看源码、文档、跑跑样例代码 学习效果 1 ~ 2 有产出 没有产出 是否达成学习闭环 尽量问题驱动看源码,从问题出发学源码回归问题,达成闭环 技能点 阅读源码的技能 案例 阅读 sealer、sealos、Kubernetes、k3s、horizoncd 的源码,并且测试 第一阶段的建议是简单地看源码、文档、跑跑样例代码来学习。这个阶段的主要目的是积累基础知识,建议尽量问题驱动看源码,从问题出发学源码回归问题,达成闭环。阅读源码的技能是这个阶段最重要的技能点。建议阅读一些开源项目,例如 sealer、sealos、Kubernetes、k3s、horizoncd 等,并进行测试。...

May 16, 2023 · 3 分钟 · 430 字 · 熊鑫伟, 我

从理论到实践的项目管理打通

项目管理从理论到实践 理论介绍 瀑布模型: 敏捷模型: Scrum框架: 传统和敏捷差异 传统项目管理方法通常按照线性流程进行,通过预先制定的计划、监督和控制来实现项目目标。敏捷项目管理方法则更加灵活,通过迭代和持续的改进来实现项目目标。敏捷方法强调团队合作、适应变化、快速交付价值。 项目管理十大知识领域 项目管理的十大知识领域包括: 项目范围管理:确定项目的目标和边界,并确保项目在进行过程中不会超出这些范围。 项目时间管理:确定项目的时间计划,并确保项目按时完成。 项目成本管理:确定项目的预算,并确保项目在预算范围内完成。 项目质量管理:确保项目产品、服务或结果符合质量标准。 项目资源管理:确定项目所需的人员、设备和材料,并确保这些资源得到有效利用。 项目沟通管理:确定项目的信息需求,并确保项目信息得到有效传递。 项目风险管理:识别、评估和应对项目中的风险。 项目采购管理:确定项目所需的外部产品、服务或结果,并确保这些外部要素得到有效管理。 项目合同管理:管理项目中的合同,包括签订合同、监督合同履行和结束合同。 项目结项管理: 记录项目成果,并对项目进行评估,以确定未来项目的改进点。 项目管理的五大过程组 项目管理的五大过程组是: 开始过程组:在项目启动之前进行的活动,包括项目的范围、目标、预算和资源的确定。 规划过程组:为项目的成功制定计划,包括项目时间、成本、质量、资源、沟通、风险、采购和合同管理计划。 执行过程组:将计划转化为具体行动,通过项目团队的协作来完成项目的任务。 监控和控制过程组:监督项目的进展,并对变化做出反应,以确保项目按照计划完成。 关闭过程组:完成项目并归档项目文件。 监控负责产品项目的整个生命周期。 启动:项目如何高效启动 项目启动 上面我们看到项目管理的五大过程:启动、规划、执行、监控和收尾,毫无疑问的是,如何高效启动项目的重要性不容置疑~ 先看一下贯穿始终的一个表: 我们针对启动过程中的两个关键过程: 制定项目章程 识别干系人 应用 ⚠️ 项目启动阶段应该要做的事情包括: 确定项目目标:明确项目的目的、范围和成果,确保项目与组织的战略目标一致。 组建项目团队:确定项目团队的成员,并建立合适的团队沟通和协作结构。 制定项目章程:明确项目的责任和权限,并制定项目章程,确保项目运作有序。 确定项目预算:根据项目的范围和目标制定项目预算,并确定项目的资金来源。 确定项目时间表:根据项目的范围和目标制定项目时间表,并确定项目的里程碑。 评估风险: 评估项目中可能存在的风险,并制定风险应对策略。 获取资源: 确定项目所需的人员、设备和材料,并获取这些资源。 审批启动文件: 审批并签署项目启动文件,确保项目有了正式的许可开始进行....

May 7, 2023 · 3 分钟 · 624 字 · Xinwei Xiong, Me

Openkf 多架构镜像的构建策略设计

自动化构建openkf的多架构镜像并推送到多个镜像仓库 https://github.com/openimsdk/openkf 描述: 为了满足各种用户的需求,我们的目标是自动化构建用于各种架构的openkf Docker镜像,并无缝地将它们推送到多个镜像仓库。 目标: 自动构建openkf的linux/amd64和linux/arm64架构的Docker镜像。 将镜像推送到Docker Hub、阿里云Docker Hub和GitHub容器仓库。 任务: 设置多架构构建系统 使用GitHub Actions,配合QEMU和Docker Buildx,支持linux/amd64和linux/arm64的多架构构建。 在每次新版本发布、提交到main分支或定期事件时,触发构建过程。 支持多个镜像仓库 Docker Hub:推送到openim/openkf-server。 阿里云Docker Hub:推送到registry.cn-hangzhou.aliyuncs.com/openimsdk/openkf-server。 GitHub容器仓库:推送到ghcr.io/openimsdk/openkf-server。 动态镜像标记 使用Docker Metadata Action,基于事件(如定期触发器、分支提交、拉取请求、语义版本控制和提交SHA)生成动态标签。 确保在拉取请求事件中不推送已构建的镜像。 身份验证和安全性 使用秘密配置Docker Hub、阿里云和GitHub容器仓库的身份验证。 确保每个仓库的推送操作都是安全且无缝的。 通知和日志 通过GitHub Actions,如果有任何构建或推送失败,向开发团队发送通知。 保留每次构建和推送操作的日志以供追踪。 验收标准: openkf镜像应该成功地为linux/amd64和linux/arm64架构构建。 在成功构建后,镜像应该在Docker Hub、阿里云Docker Hub和GitHub容器仓库上可用。 根据定义的事件和属性正确标记镜像。 整个过程中不需要人工干预。 附加说明: 自动化过程在GitHub Actions工作流中定义。确保根据需要查看和更新工作流。 确保在单独的分支或环境中测试此过程,以避免中断。

April 23, 2023 · 1 分钟 · 46 字 · Me

在AI时代 - 精益团队的企业文化和远程工作指南 v2.0

〉 笔者之前在参与 OpenIM 前,去过一些开源的社区和公司学习协作过,发现了一些好的文化,于是记录在这里,最开始的标题是 “一篇适用远程工作的约定指南: OpenIM 远程工作团队协作协议 v1.3”,后面我从 OpenIM 离职了,去了一家日企,学习到了外企的新的文化精髓,再到毕业后创业,开始组件和打磨团队,有了一些新的思考。团队以及领导人的决策力是最重要的两个因素,所以我把标题改为了:“在AI时代 - 精益团队的企业文化和远程工作指南 v2.0” Principles 0)Ownership & Leadership 如果看到团队或是项目有问题的时候,不要等,也不忍,请马上说出来,并给出相应的方案, 自己跳出来召集开会,及时调整。不要闷在那里,自己憋! “每个团队成员都承担Owner和Leader的角色。发现问题时,勇于指出并提供解决方案,不要等待或沉默。” 1)Initiative 每人个都必需是主动的,都需要自己发起要做的事,或是自己要认领要做的事,如果发现自己没有事情了, 需要学会主动发现问题,主动找到可以improve的地方,创新来源于此。没有路要学会自己造路! “为团队创新和改进提供动力。” 2)Objectives Oriented 每个人都是产品经理,也都是项目经理,每个人都必需把自己的工作和我们大的目标连接在一起,知道什么是重点,重点的东西就是两件事:一)从用户的角度出发,二)从产品的角度出发。 这意味着我们要随时观察整个产品的样子,而不只是自己这一块东西 。 “始终保持用户和产品的双重视角,确保工作与总体目标一致。” 3)Insists on High Standard 举法其上,得乎其中,举法其中,得乎其下,举法其下,法不得也。我们要坚持用高的标准要求自己,对于高标准的目标不妥协,但是在实施路径和策略上可以妥协。 “始终坚持高标准,确保质量。在实施过程中可以灵活,但对于高标准的最终目标绝不妥协。” Practices 0)Online 工作的时候必需在线。如果不在线了,需要说一下不在线的时长, 目前我们工作的事宜在通讯工具采用Slack, 如果需要请假的情况,如果不是紧急情况,需要提前一天 在 OpenIM 的Slack #random 频道中提前说明。如果是紧急情况,也需要提前在insider频道中告知大家。 “工作时,请确保在线。若需离线,务必在Slack #insider 频道提前通知。” 1) Documentation Driven 面对面交谈、电话语音、微信、Slack虽然是比较实时的反馈工具,但是只有文档是可以把重要信息给结构化的,而且写文档其实是比起前面的方式来说是更为深度的思考,因为会让你自己审视自己的想法。所以,对于一些重要 “功能”、“流程”、“业务逻辑” 、“设计”、“问题”,以及“想法”,最好都以文档化的方式进行。请使用Github的 wiki、project、issue这些工具或是使用Google Doc. “确保关键信息持久化和可追溯。” 2)Design Review 对于一些重要的问题或是工作(每个人都能够判断什么是关键问题和工作), 需要先把自己的想法share出来,而不是先实现 。 一个好的 Design 文档需要包括如下项: Background。交待这个事的背景、需求和要解决问题。 Objectives。说明这个事的目标和意义。...

March 29, 2023 · 1 分钟 · 171 字 · 熊鑫伟,我

跨平台以及多架构编译设计

前言 https://github.com/OpenIMSDK/Open-IM-Server/issues/432 现在很多地方都对服务的国产化适配有所要求,一般的国产化平台都提供arm版本的linux云环境供我们进行服务部署,因此需要构建arm版本的镜像。 构建方案 在上面的 issue 中我们描述了大致的构建思路和解决的步骤,我们来看一下构建的方案,我们以最常用的 amd 机器为例,来编译 arm。对于构建镜像的ARM版本,有如下两种方式: 在ARM机器上使用 docker build 进行构建; 在X86/AMD64 的机器上使用 docker buildx 进行交叉构建; ⚠️注意: 交叉构建和交叉运行的方式会有一些无法预知的问题,建议简单的构建步骤(如只是下载解压对应架构的文件)可考虑在x86下交叉构建,复杂的(如需要编译的)则直接在arm机器上进行构建; 实际测试发现,使用qemu方式在x86平台下运行arm版本的镜像时,执行简单的命令可以成功(如arch),执行某些复杂的程序时(如启动java虚拟机),会无响应,所以镜像的验证工作应尽量放置到arm机器上进行; 上面第二点按如下方式测试: docker run --rm --platform=linux/arm64 openjdk:8u212-jre-alpine arch 可正常输出; docker run --rm --platform=linux/arm64 openjdk:8u212-jre-alpine java -version 则会 卡住,且需要使用docker stop停止容器才可以退出容器; 启用试验性功能 💡 注意:buildx 仅支持 docker19.03 及以上docker版本 如需使用 buildx,需要开启docker的实验功能后,才可以使用,开启方式: 编辑 /etc/docker/daemon.json ,添加: { "experimental": true } 编辑 ~/.docker/config.json 添加: "experimental" : "enabled" 重启Docker使生效:...

February 13, 2023 · 5 分钟 · 976 字 · 熊鑫伟,我

Kubernetes一篇快速入门的文章

正片开始~ Kubernetes 是 Google 团队发起的一个开源项目,它的目标是管理跨多个主机的容器,用于自动部署、扩展和管理容器化的应用程序,主要实现语言为 Go 语言。Kubernetes 的组件和架构还是相对较复杂的。要慢慢学习~ 我们急需编排一个容器~ 为什么 kubernetes 弃用了 docker ::: tip 很意外 听到 Kubernetes 从 Kubernetes 版本 1.20 开始弃用对 Docker 作为容器运行时的支持,这似乎有点令人震惊。 Kubernetes 正在删除对 Docker 作为容器运行时的支持。Kubernetes 实际上并不处理在机器上运行容器的过程。相反,它依赖于另一个称为容器运行时的软件。. ::: docker 比 kubernetes 发行的早 docker本身不兼容 CRI 接口。Kubernetes 适用于所有实现称为容器运行时接口 (CRI) 标准的容器运行时。这本质上是 Kubernetes 和容器运行时之间通信的标准方式,任何支持此标准的运行时都会自动与 Kubernetes 配合使用。 Docker 不实现容器运行时接口 (CRI)。过去,容器运行时没有那么多好的选择,Kubernetes 实现了 Docker shim,这是一个额外的层,用作 Kubernetes 和 Docker 之间的接口。然而,现在有很多运行时可以实现 CRI,Kubernetes 维护对 Docker 的特殊支持不再有意义。 ::: warning 弃用的意义 虽然移除了 docker ,但是还是保留了以前的 dockershim,如果你愿意,你依旧可以使用 docker 容器化引擎提供容器化支持。...

April 28, 2022 · 3 分钟 · 504 字 · 熊鑫伟,我

参与我们的区块链学习平台项目

参与本项目 ⚡ 前言 欢迎来到我们的项目!本项目旨在建立一个基于区块链的全民学习平台,通过集体的智慧和努力,推动技术和知识的普及。无论你是初学者还是经验丰富的开发者,你的贡献都将对项目产生积极影响。 💡 关于本项目(先看❗) 本项目由一个热衷于区块链和软件开发的团队发起。我们致力于创建一个开源、去中心化的学习环境,让每个人都能够访问和分享知识。 🌐 联系方式 Facebook Website Blog Telegram Twitter Linkedin Donate 🔍 项目背景 我们相信,通过集体智慧和技术的力量,可以打造一个更加开放和包容的学习环境。这个项目不仅是一个技术挑战,也是社区合作的成果。 🌟 如何参与 不论你的技能水平如何,都有多种方式可以参与本项目: 提交问题和功能建议。 参与代码编写和文档撰写。 在社区中提供帮助和支持。 我们都是这个仓库未来很有潜力的客户,或者是贡献者,谢谢你选择了加入C-UB社区,我们将会一起合作,未来我们将会考虑以区块链为底层搭建一个全民学习平台,我们每一个人都将会是这个社区的构建着,将会推动c-universal blockchain(链学) 社区的发展和进步~ 如果你对本项目有任何建议或发现文中内容有误的,欢迎提交 issues 进行指正。 对于文中我没有涉及到知识点,欢迎提交 PR。 或许我们会很疑惑? 在我们参与贡献的时候,如果克隆了**🧷 cs-awesome-Block_Chain项目,但是每次获取上游代码很麻烦怎么办?如何提交有意思的代码?这篇文章将会解决这个问题~⬇️ ** ⚡提前需要你… 你需要学会使用markdown🖱️ 你需要学会使用git 你的代码符合Google代码规范 排版 笔记内容按照 中文文案排版指北 进行排版,以保证内容的可读性。 不使用 ![]() 这种方式来引用图片,而是用 <img> 标签。一方面是为了能够控制图片以合适的大小显示,另一方面是因为 GFM 不支持 <center> ![]() </center> 这种方法让图片居中显示,只能使用 <div align="center"> <img src=""/> </div> 达到居中的效果。...

February 1, 2022 · 1 分钟 · 164 字 · 熊鑫伟,我