Github Actions 中 Service Container 的使用

Github Actions 中 Service Container 的使用

Intro

之前写过一个 StackExchange.Redis 的一个扩展,测试项目依赖 redis,所以之前测试一直只是在本地跑一下,最近通过 Github Action 中的 Service Container 来通过 CI 来跑测试,分享一下如何使用 service container 来跑测试,不仅仅是 Redis,数据库等依赖也可以使用这样的方式来测试

Redis Service Container Sample

jobs:# Label of the runner jobrunner-job:# You must use a Linux environment when using service containers or container jobsruns-on: ubuntu-latest# Service containers to run with `runner-job`services:# Label used to access the service containerredis:# Docker imageimage: redis:alpine# Set health checks to wait until redis has startedoptions: >---health-cmd "redis-cli ping"--health-interval 10s--health-timeout 5s--health-retries 5ports:# Maps port 6379 on service container to the host- 6379:6379

上面是一个 redis service container 配置示例的一部分,需要注意的是使用 service container 的时候必须要使用 Linux 环境,因为 service container 的本质就是 docker run 了一个 container,通过一定的规则配置来实现在跑 CI 的环境可以访问的这个 service

上面的示例配置了一个 redis 的 service container,并将容器服务的 6379 端口映射到 host 的 6379 端口,这样 host 上的服务就可以通过 127.0.0.1:6379/localhost:6379 访问到使用 docker 跑起来的  redis 服务(redis service container)了

steps:# Downloads a copy of the code in your repository before running CI tests- name: Check out repository codeuses: actions/checkout@v2# Performs a clean installation of all dependencies in the `package.json` file# For more information, see https://docs.npmjs.com/cli/ci.html- name: Install dependenciesrun: npm ci- name: Connect to Redis# Runs a script that creates a Redis client, populates# the client with data, and retrieves datarun: node client.js# Environment variable used by the `client.js` script to create# a new Redis client.env:# The hostname used to communicate with the Redis service containerREDIS_HOST: localhost# The default Redis portREDIS_PORT: 6379

Container Job Sample

上面的这种形式是在 host 上跑的,也就是直接在跑 CI 的服务器上跑的,有些情况下环境的配置比较麻烦的情况下也可以直接在指定的 docker 镜像为基础的 docker container 里跑 CI,需要注意的是 docker container 里跑 CI 的时候和直接在 host 上跑 CI 网络上有区别, host 可能就是直接访问 localhost,container 访问就是 service 名称,来看下面的 container 的一个示例:

jobs:# Label of the container jobcontainer-job:# Containers must run in Linux based operating systemsruns-on: ubuntu-latest# Docker Hub image that `container-job` executes incontainer: node:10.18-jessie# Service containers to run with `container-job`services:# Label used to access the service containerredis:# Docker Hub imageimage: redis# Set health checks to wait until redis has startedoptions: >---health-cmd "redis-cli ping"--health-interval 10s--health-timeout 5s--health-retries 5

可以看到大部分是一样的,只是多了一个 container 的配置,这样实际的 CI 就是在这个 container 里执行的,创建的执行 CI 的 container 和 service container 是在同一个 network 下,可以直接通过服务名称来访问

steps:# Downloads a copy of the code in your repository before running CI tests- name: Check out repository codeuses: actions/checkout@v2# Performs a clean installation of all dependencies in the `package.json` file# For more information, see https://docs.npmjs.com/cli/ci.html- name: Install dependenciesrun: npm ci- name: Connect to Redis# Runs a script that creates a Redis client, populates# the client with data, and retrieves datarun: node client.js# Environment variable used by the `client.js` script to create a new Redis client.env:# The hostname used to communicate with the Redis service containerREDIS_HOST: redis# The default Redis portREDIS_PORT: 6379

Sample

提供一个我目前在用的一个 service container,和上面的示例基本是类似的,有需要的可以参考一下:

name: dotnetcoreon: [push]jobs:# Label of the container jobredis-integration-test:# Containers must run in Linux based operating systemsruns-on: ubuntu-latest# # Docker image that `job` executes in# container: mcr.microsoft.com/dotnet/sdk:5.0# Service containers to run with `container-job`# https://docs.github.com/en/free-pro-team@latest/actions/guides/creating-redis-service-containersservices:# Label used to access the service containerredis:# Docker Hub imageimage: redis:alpine# Set health checks to wait until redis has startedoptions: >---health-cmd "redis-cli ping"--health-interval 10s--health-timeout 5s--health-retries 5ports:# Maps port 6379 on service container to the host- 6379:6379steps:- uses: actions/checkout@v1- name: Setup .NET Coreuses: actions/setup-dotnet@v1with:dotnet-version: 5.0.x- name: dotnet inforun: dotnet --info- name: buildrun: bash build.sh --target=test

CI 执行日志:

从日志上我们可以看出来比普通的 CI 执行会多出两个步骤,一个是初始化 container,一个是清理 container

完整的CI 日志可以在这里看到:https://github.com/WeihanLi/WeihanLi.Redis/runs/1400006789?check_suite_focus=true

More

虽然我的场景是 redis,但是不仅仅是 redis,很多应用外的依赖比如说数据库,甚至MQ等都是可以通过 service container 来做一个完善的集成测试,没有尝试过的快去试试吧~~

References

  • https://docs.github.com/en/free-pro-team@latest/actions/guides/about-service-containers

  • https://docs.github.com/en/free-pro-team@latest/actions/guides/creating-redis-service-containers

  • https://github.com/WeihanLi/WeihanLi.Redis/blob/dev/.github/workflows/dotnetcore.yml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度探秘.NET 5.0

2020 中国.NET 开发者峰会正式启动 ,欢迎大家提交演讲主题或者购买超级早鸟票。今年11月10号 .NET 5.0 如约而至。这是.NET All in one后的第一个版本,虽然不是LTS(Long term support)版本,但是是生产环境可用的。微软从.NET 5 Preview 1就开…

vuex保存用户信息_Vuex状态管理

一个组件可以分为数据和视图,数据更新时,视图也会自动更新。在视图中又可以绑定一些事件,它们触发methods里面指定的方法,从而又可以改变数据、更新视图,这就是一个组件基本的运行模式。但实际的业务中,经常…

使用 docker 构建分布式调用链跟踪框架skywalking

一旦你的程序docker化之后,你会遇到各种问题,比如原来采用的本地记日志的方式就不再方便了,虽然你可以挂载到宿主机,但你使用 --scale 的话,会导致记录日志异常,所以最好的方式还是要做日志中心化,另一个问…

excel同一单元格怎么换行_excel表格内怎么换行 方法有两种 一看就会 新手教程...

很多人在用excel表格的时候都需要用到换行,但是有一些小伙伴还不知道如何去换行。今天就介绍两种单元格内换行的方法,这两种换行方式的效果不一样,大家可以根据自己的需求来选择使用哪种换行方式。方法一:单元格内自动换行操作&am…

持续交付一:从开发到上线的环境

团队开发中,开发,测试,预发布,生产,不同的角色工作在不同的环境中,不同的环境有不同的作用(有些公司的环境更多,按照自己的交付流程设计),当然不同的环境,配置也不能相同…

win10控制面板快捷键_你没玩过的全新版本 Win10这些操作你知多少

不知不觉,Win10与我们相伴已经整整四个年头了,从最开始的组团抗拒到现在的默默接受,个中滋味相信谁心里都有个数。近日微软开始推送“Win10更新五月版”,那么Win10中到底都有哪些“骚”操作?一起来看看吧。1、夜间模式…

C# 中的数字分隔符 _

编写 C# 代码时,我们时常会用到很大的数字,例如下面定义的变量:const long loops 50000000000;您能快速读出这是多少吗?是不是还是会有很多人把光标定位到最后一位,然后按键盘上的向左键一个一个往上数:个…

数字调制系统工作原理_空间光调制器工作原理是什么 空间光调制器工作原理...

空间光调制器(SLM), 空间光调制器(SLM)工作原理是什么?实时空间光调制器使得相干处理系统能输入非相干光图像和随时间变化的图像的器件。相干光处理系统的最大优点是二维平行处理、信息容量大,运算速度快。但是目前的输入图像和空间滤波都用银盐胶片作记录媒质&…

使用 .NET 5 体验大数据和机器学习

2020 中国.NET 开发者峰会正式启动 ,欢迎大家提交演讲主题或者购买超级早鸟票。翻译:精致码农-王亮原文:http://dwz.win/XnM.NET 5 旨在提供统一的运行时和框架,使其在各平台都有统一的运行时行为和开发体验。微软发布了与 .NET 协…

linux监控目录容量,利用ZABBIX监控某个目录大小

近期,因为JMS的消息堆积导致ApacheMQ频率故障(消息没有被消费掉,导致其数据库达到1.2G,JMS此时直接挂掉),很是郁闷!刚好自己在研究zabbix.既然zabbix如此强大,那么它可以监控我的这个目录大小吗&#xff1f…

三菱plc选型手册_模拟量是什么?PLC和模拟量是如何转换的?

模拟量在PLC系统中有着非常广泛的应用,特别是在过程控制系统中。模拟量是一种连续变化的量,因此,它的使用对象也是各种连续变化的量,比如温度,压力,湿度,流量,转速,电流&…

windows和linux命令行一样吗,微软改进Windows命令行 目的是和Linux命令行相抗衡

微软官方人员承认微软正在对Windows命令行环境或是Windows终端进行全方位的改进,目的是能和Linux命令行相竞争。随着Linux云服务器的大量被采用,很多Linux云服务器都没有安装图形界面,只使用终端能够大幅度提高运行速度,微软想通过…

vue 离开页面事件_【必看】58 道 Vue 常见面试题集锦,涵盖入门到精通,自测 Vue 掌握程度...

△ 是新朋友吗?记得先点web前端学习圈关注我哦~1.vue优点?答:轻量级框架:只关注视图层,是一个构建数据的视图集合,大小只有几十 kb ;简单易学:国人开发,中文文…

购票啦 | 2020中国.NET开发者峰会启动

.NET Conf China 2020去年2019年在上海举行了第一届的中国.NET开发者峰会,今年2020年即将在苏州举行第二届,有兴趣的童鞋们,不要忘记购票参加哈。 1大会背景介绍2014年微软组织并成立.NET基金会,微软在成为主要的开源参与者的道路…

w7下如何安装linux双系统,ubuntu安装教程(下): 教你装win7+Ubuntu双系统

今天突发的想装个双系统玩玩,原来我ubuntu和win8都是装在虚拟机里面的,感觉用起来很不方便,而且感觉用起来特别不流畅,所以就想装个win7ubuntu的双系统。原来是想把ubuntu直接wubi安装在win7里面。但是这样的话,会带来…

vscode代码运行时间工具_10款实用的VSCode插件提升你的编辑体验 | 第98期

代码编辑器或者文本编辑器相信大家都不会陌生,但是,常用Windows的朋友大概都知道其自带的“文本编辑器”那是一款多么难用的软件。后来又有一系列的编辑器,比如notepad、sublime、atom等等,包括Linux用户喜欢的vim,这些…

简单理解线程同步上下文

为了线程安全,winform和wpf框架中规定只能使用UI线程操作控件,从其它线程上操作控件就会报跨线程异常。假如有这样一个场景:点击按纽,然后开始计算员工薪资,并将计算信息实时展示在一个文本框中,由于计算过…

修改手机屏幕刷新率_手机屏幕没有高刷新率算不上旗舰机?看看网友都是如何回答的...

近日Redmi K30 Pro的各种参数信息逐渐曝光,高通骁龙865处理器、LPDDR5内存、UFS3.1闪存、VC液冷散热、前置弹出式摄像头、多彩呼吸灯、Z轴线性马达等等参数都备受好评。唯独在提及屏幕时,60Hz的刷新率就让网友们不满意了。此前在K30的发布会上&#xff0…

持续交付二:为什么需要多个环境

关于开发测试生产需要多少个环境,因公司而异,这里分享一下我建议开发过程中使用的几个环境。Development环境,就是开发环境,程序写代码,写单元测试的环境,一般和IDE一起,经常是在调试模式下进行…

git revert 后再次merge_git如何回滚错误合并的分支

导读:分类:技术干货题目:git如何回滚错误合并的分支合并到线上分支出现问题的修复方式。场景线上分支:master你开发的分支:dev1同时开发的分支:dev2dev1分支开发的代码已经上线,并且已经merge到…