04-15 周一 GitHub仓库CI服务器actions-runner和workflow yaml配置文档解析
时间 | 版本 | 修改人 | 描述 |
---|---|---|---|
2024年4月15日10:35:52 | V0.1 | 宋全恒 | 新建文档 |
2024年4月17日10:33:20 | v1.0 | 宋全恒 | 完成github actions CI的配置和工作流配置文件解读文档的撰写 |
简介
一些基础概念
前提知识
仓库介绍
地址 | 镜像 | 介绍 |
---|---|---|
https://github.com/CodexDive/LLMChat | harbor.alkaidos.cn/wxzhang/ragllm:latest | 大模型应用 |
CI服务器介绍
(base) yangfei@ubuntu:~/actions-ci$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
建议定要使用和宿主机相同的自定义镜像来运行CI作业,不然可能会出现诸如GLIBC问题,即如果宿主机为Ubuntu 20.04,那么自定义镜像最好也是Ubuntu,并且版本是20.04这样稀奇古怪的问题遇到的会少许多。
配置过程
在仓库上查看配置指令
我们以LLMChat上查看为例,登录 LLMChat,查看
可以先去网址下载好actions-runner的客户端,也可以在安装的时候下载。在此演示基于网站上的程序下载安装器

具体的代码如下:
- Download
# Create a folder
$ mkdir actions-runner && cd actions-runner# Download the latest runner package
$ curl -o actions-runner-linux-x64-2.315.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.315.0/actions-runner-linux-x64-2.315.0.tar.gz# Optional: Validate the hash
$ echo "6362646b67613c6981db76f4d25e68e463a9af2cc8d16e31bfeabe39153606a0 actions-runner-linux-x64-2.315.0.tar.gz" | shasum -a 256 -c# Extract the installer
$ tar xzf ./actions-runner-linux-x64-2.315.0.tar.gz
- Configure
# Create the runner and start the configuration experience
$ ./config.sh --url https://github.com/CodexDive/LLMs_Inference --token BCTEUWK4VPIV2M4PKIRQX2TGDXVXC# Last step, run it!
$ ./run.sh
注意, 配置的github账户,必须拥有这个仓库,才能配置和查看runner(对于个人账户而言)
注意,运行器的仓库位于GitHub actions-runner.当前最新版本为2.315.0,运行器的版本默认会自动升级,因此这个下载部分的链接可能会发生变化。
注意,关于配置时,配置的过程,如指定token和标签可以参考 标签运行器
注意, 如果想要同一个运行器运行多个仓库的作业,需要使用组织级的账户,对于个人账户,一个部署了运行器的服务器只能添加到一个仓库

配置CI服务器为运行器客户端
使用XShell等工具链接CI服务器,如42.将压缩包拷贝到某个目录,如/home/yangfei/actions-ci,以yangfei账户为CI服务启动的账户:

我们首先使用./configure 命令为启动器配置组、名称和标签
./config.sh --url https://github.com/CodexDive/LLMs_Inference --token BCTEUWK4VPIV2M4PKIRQX2TGDXVXC
上述命令会交互式的提醒用户输入运行器组名(个人仓库,无组),运行器名称zjlab-runner,标签为A100,40G,8C
分别表位GPU为A100, 内存容量为40G,8卡。工作目录为_work
一般配置完成之后,客户端会与GitHub进行通信,因此我们就可以在当前目录下执行
./run.sh
然后去网页上验证是否成功。一般没有问题,暂且不表,我们继续将该客户端安装成服务,这样重启之后,运行器服务会自动运行。
待执行的命令外:
sudo ./svc.sh install yangfei
服务的状态查看,停止和卸载可以参见下图

关于actions-runner的服务配置,也可以参见 将自托管的运行应用策划给你续配置为服务
网页验证配置是否成功


在仓库上添加workflow配置文件
在我们配置好了运行器之后,可以在网页上查看运行的状态是否处于正常状态。

配置工作流
Github Actions 是GitHub的持续集成服务。持续集成由很多操作组成,比如登录远程服务器,发布内容到第三方服务等等,GitHub把这些操作称为actions。
工作流含义
在配置好了GitHub仓库之后,一般我们需要再仓库代码中添加一个工作流配置文件,yaml格式,来确定工作流的步骤,其实就是一些列的步骤组成了一个作业。在yaml配置文件中,也可以包含作业运行的基础环境,可以是github提供的原始镜像,也可以用自定义的镜像。在作业执行过程中,就是不断的在镜像相应的容器中执行命令,查看结果。

action marketplace
而且各个步骤一般会用到Action Marketplace,动作市场,可以看为在CI过程中可以使用的一系列动作步骤。

常见的可以包含如下的动作使用:
- Checkout
- ssh Remote Commands
- Build and push Docker images
- Setup Python
- Publish Test Results
- Docker Login
- SSH SCP SSH Pipelines
- pip-secure-install
- 文件
- upload-artifact
- download-artifact
示例
功能演示
CI的示例,以项目ActionsPractice为例
在该项目中演示了如下的内容:
- Pytest的实践,即在开发过程中开发功能和开发测试
- 在单元测试的撰写时,演示了为类写测试以及普通的功能函数写测试,以及mock的用法
- 在CI时使用github提供的环境,使用自定义的镜像
workflow 配置文件
注意,workflow配置文件以yaml为后缀,并且位于.github/workflows
# This workflow will install Python dependencies, run tests and lint with a single version of Python
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-pythonname: Python chenqun-docker applicationon:push:branches: [ "main" ]pull_request:branches: [ "main" ]permissions:contents: read
jobs:container-run-test:runs-on: [self-hosted, linux, x64, chenqun]container:image: 10.101.12.128/framework/ubuntu:22.04-official-ali-python3.7.14options: --privilegedcredentials:username: adminpassword: admin@ZJ2023volumes:- /home/songquanheng:/home/songquanhengsteps: - name: show python versionrun: |python --version- uses: actions/checkout@v3- name: list the files after checkoutrun: | ls -R- name: install gitrun: |apt-get install -y git- name: Install dependenciesrun: |python -m pip install --upgrade pipif [ -f requirements.txt ]; then pip install -r requirements.txt; fi- name: Test with pytest and generate coverage report run: |pytest --cov=src --cov-report=xml- name: Upload coverage reports to Codecovuses: codecov/codecov-action@v4with:token: ${{ secrets.CODECOV_TOKEN }}file: coverage.xmlslug: yanchenmochen/ActionPracticeverbose: true
网页展示

解释
注意:由于要使用容器环境,因此jobs.job-name.container:下有支持的参数,具体参见
- Running jobs in a container
- jobs.job-id.container
- 配置容器启动时的–options参见 Use
jobs.<job_id>.container.options
to configure additional Docker container resource options. For a list of options, see “docker create
options.”

效果

总结
本文详细的记录了为一个GitHub配置一个self-hosted runner的过程,通过上述的过程,我们可以灵活的为仓库配置自定义的运行器,并且也可以使用自定义的容器进行仓库CI作业的执行,提升作业环境的封装性。通过灵活的设计CI工作流的步骤,我们可以方便的设计CI的各个步骤,在执行某个步骤的时候,我们也可以借助于GitHub Actions Marketplace所提供的常用功能组件辅助我们进行有效的工作流配置文件的编写。因此整个生态也是闭包的。
相关文章:

04-15 周一 GitHub仓库CI服务器actions-runner和workflow yaml配置文档解析
04-15 周一 GitHub仓库CI服务器配置过程文档 时间版本修改人描述2024年4月15日10:35:52V0.1宋全恒新建文档2024年4月17日10:33:20v1.0宋全恒完成github actions CI的配置和工作流配置文件解读文档的撰写 简介 一些基础概念 前提知识 仓库介绍 地址镜像介绍https://github.…...

论文笔记:SmartPlay : A Benchmark for LLMs as Intelligent Agents
iclr 2024 reviewer评分 5688 引入了 SmartPlay,一种从 6 种不同游戏中提取的基准 衡量LLM作为智能体的能力 1 智能代理所需的能力 论文借鉴游戏设计的概念,确定了智能LLM代理的九项关键能力,并为每项能力确定了多个等级: 长文…...

搜维尔科技:【工业仿真】煤矿安全知识基础学习VR系统
产品概述 煤矿安全知识基础学习VR系统 系统内容: 煤矿安全知识基础学习VR系统内容包括:下井流程(正确乘坐罐笼、班前会、井下行走注意事项、工作服穿戴、入井检身及人员清点、下井前准备工作、提升运输安全);运煤流程…...

线程和进程的区别(面试)
线程和进程的区别 进程和线程的区别线程的优点 进程和线程的区别 1. 进程是系统进行资源分配和调度的一个独立单位,线程是程序执行的最小单位. 2. 进程有自己的内存地址空间,线程只独享指令流执行的必要资源,如寄存器和栈. 3. 由于同一进程的各线程共享内存和文件资源,可以不通…...

抓取电商产品数据的方法|电商平台商品详情数据|批量上架|商品搬家|电商封装API数据采集接口更高效安全的数据采集
大量级电商数据采集时使用电商API接口有以下优势: 1. 数据准确性:通过电商API接口获取数据,可以保证数据的准确性和实时性,避免了手动采集可能出现的错误和延迟。 2. 自动化采集:API接口可以实现自动化的数据获取和更…...

关联规则Apriori算法
1.前置知识 经典应用场景:购物车商品的关联规则。 符号表示: I代表项集,项是可能出现的值,例如购物车中能有尿布、啤酒、奶粉等,I{尿布、啤酒、奶粉},尿布是项 K代表I中包含的项的数目,上面的k3 事…...

书生·浦语大模型全链路开源体系-第4课
书生浦语大模型全链路开源体系-第4课 书生浦语大模型全链路开源体系-第4课相关资源XTuner 微调 LLMXTuner 微调小助手认知环境安装前期准备启动微调模型格式转换模型合并微调结果验证 将认知助手上传至OpenXLab将认知助手应用部署到OpenXLab使用XTuner微调多模态LLM前期准备启动…...

HTML优化SEO
在网站开发中,除了关注设计和用户体验,SEO(搜索引擎优化)也是提升网站流量和可见度的关键。合理的HTML结构和元素运用能够帮助搜索引擎更好地理解页面内容,从而提高搜索排名。以下是一些基于HTML的SEO优化技巧…...

RabbitMQ-交换机
文章目录 交换机fanoutDirecttopicHeadersRPC 交换机 **交换机 **是消息队列中的一个组件,其作用类似于网络路由器。它负责将我们发送的消息转发到相应的目标,就像快递站将快递发送到对应的站点,或者网络路由器将网络请求转发到相应的服务器…...

mapreduce中的MapTask工作机制(Hadoop)
MapTask工作机制 MapReduce中的Map任务是整个计算过程的第一阶段,其主要工作是将输入数据分片并进行处理,生成中间键值对,为后续的Shuffle和Sort阶段做准备。 1. 输入数据的划分: 输入数据通常存储在分布式文件系统(…...

景区文旅剧本杀小程序亲子公园寻宝闯关系统开发搭建
要开发景区文旅剧本杀小程序亲子公园寻宝闯关系统,您需要考虑以下步骤: 1. 设计游戏场景和规则:根据亲子公园的主题和特点,设计适合亲子游玩的游戏场景和规则。您需要考虑游戏的安全性、趣味性和互动性,确保孩子们能够…...

性能优化---webpack优化
1、如何提高webpack打包速度 a、优化Loader--影响Loader打包速度的首要元素是Babel,Babel 会将代码转为字符串生成 AST,然后对 AST 继续进行转变最后再生成新的代码,项目越大,转换代码越多,效率就越低。先优化 Loader …...

YOLOv9改进策略 | 损失函数篇 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数
一、本文介绍 这篇文章介绍了YOLOv9的重大改进,特别是在损失函数方面的创新。它不仅包括了多种IoU损失函数的改进和变体,如SIoU、WIoU、GIoU、DIoU、EIOU、CIoU,还融合了“Focus”思想,创造了一系列新的损失函数。这些组合形式的…...

贪心算法-跳跃游戏
给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 示例 1: 输…...

sql知识总结二
一.报错注入 1.什么是报错注入? 这是一种页面响应形式,响应过程如下: 用户在前台页面输入检索内容----->后台将前台输入的检索内容无加区别的拼接成sql语句,送给数据库执行------>数据库将执行的结果返回给后台ÿ…...

VSCode和CMake实现C/C++开发
VSCode和CMake实现Ubuntu下C/C++开发总结 目录 0.简介1.Linux系统介绍2.开发环境搭建2.1 编译器,调试器安装2.2 CMake安装3.GCC编译器3.1 编译过程3.2 g++重要编译参数4.g++编译实战4.0 编译前4.1 直接编译4.2 生成库文件并编译4.3 编译后4.3.1 编译完成后的目录结构4.3.2 运行…...

【机器学习300问】74、如何理解深度学习中L2正则化技术?
深度学习过程中,若模型出现了过拟合问题体现为高方差。有两种解决方法: 增加训练样本的数量采用正则化技术 增加训练样本的数量是一种非常可靠的方法,但有时候你没办法获得足够多的训练数据或者获取数据的成本很高,这时候正则化技…...

C语言程序设计每日一练(4)
完全平方数 首先,我们需要明确什么是完全平方数。完全平方数是指一个整数,它可以表示为另一个整数的平方。例如,1、4、9、16等都是完全平方数,因为它们分别是1、2、3、4的平方。 现在,让我们回到这个问题。我们知道这…...

m4p转换mp3格式怎么转?3个Mac端应用~
M4P文件格式的诞生伴随着苹果公司引入FairPlay版权管理系统,该系统旨在保护音频的内容。M4P因此而生,成为受到FairPlay系统保护的音频格式,常见于苹果设备的iTunes等平台。 MP3文件格式的多个优点 MP3格式的优点显而易见。首先,其…...

全国产化无风扇嵌入式车载电脑在车队管理嵌入式车载行业应用
车队管理嵌入式车载行业应用 车队管理方案能有效解决车辆繁多管理困难问题,配合调度系统让命令更加精确有效执行。实时监控车辆状况、行驶路线和位置,指导驾驶员安全有序行驶,有效降低保险成本、事故概率以及轮胎和零部件的磨损与损坏。 方…...

爬虫入门——Request请求
目录 前言 一、Requests是什么? 二、使用步骤 1.引入库 2.请求 3.响应 三.总结 前言 上一篇爬虫我们已经提及到了urllib库的使用,为了方便大家的使用过程,这里为大家介绍新的库来实现请求获取响应的库。 一、Requests是什么࿱…...

创建一个javascript公共方法的npm包,js-tool-big-box,发布到npm上,一劳永逸
前端javascript的公共方法太多了,时间日期的,数值的,字符串的,搞复制的,搞网络请求的,搞数据转换的,几乎就是每个新项目,有的拷一拷,没有的继续写,放个utils目…...

【在线OJ系统】自定义注解实现分布式ID无感自增
实现思路 首先自定义参数注解,然后根据AOP思想,找到该注解作用的切点,也就是mapper层对于mapper层的接口在执行前都会执行该aop操作:获取到对于的方法对象,根据方法对象获取参数列表,根据参数列表判断某个…...

35. UE5 RPG制作火球术技能
接下来,我们将制作技能了,总算迈进了一大步。首先回顾一下之前是如何实现技能触发的,然后再进入正题。 如果想实现我之前的触发方式的,请看此栏目的31-33篇文章,讲解了实现逻辑,这里总结一下: …...

计算机网络 TCP/IP体系 物理层
一. TCP/IP体系 物理层 1.1 物理层的基本概念 物理层作为TCP/IP网络模型的最低层,负责直接与传输介质交互,实现比特流的传输。 要完成物理层的主要任务,需要确定以下特性: 机械特性:物理层的机械特性主要涉及网络…...

微服务相关
1. 微服务主要七个模块 中央管理平台:生产者、消费者注册,服务发现,服务治理,调用关系生产者消费者权限管理流量管理自定义传输协议序列化反序列化 2. 中央管理平台 生产者A在中央管理平台注册后,中央管理平台会给他…...

虚拟机下如何使用Docker(完整版)
Docker详细介绍: Docker 是一款开源的应用容器引擎,由Docker公司最初开发并在2013年发布。Docker的核心理念源自于操作系统级别的虚拟化技术,尤其是Linux上的容器技术(如LXC),它为开发人员和系统管理员提供…...

asp.net core 依赖注入后的服务生命周期
ASP.NET Core 依赖注入(DI)容器支持三种服务的生命周期选项,它们定义了服务实例的创建和销毁的时机。理解这三种生命周期对于设计健壯且高效的应用程序非常重要: 瞬时(Transient): 瞬时服务每次…...

交换排序:冒泡排序和快速排序
冒泡排序 思路 通过多次遍历数组,比较相邻的元素,并交换它们,使得每次遍历结束后,最大(或最小)的元素都“冒泡”到数组的末尾 实现 public class Main {public static void main(String[] args) {int[] …...

聊天机器人ChatGPT指导下的论文写作
ChatGPT无限次数:点击直达 聊天机器人ChatGPT指导下的论文写作 引言 随着人工智能技术的不断发展,聊天机器人在各个领域得到了广泛应用。其中,ChatGPT作为一个先进的自然语言处理模型,为各种文本生成任务提供了强大的支持。在学术界…...