基于事件驱动架构构建微服务第11部分:持续集成

原文链接:https://logcorner.com/building-microservices-through-event-driven-architecture-part12-continuous-integration/

在本教程中,我将展示如何设置docker持续集成以在docker容器内构建和运行单元测试。

因为我将使用kubernetes在容器中运行微服务,所以单元测试、集成测试、持续集成和持续交付将使用docker镜像和容器来完成。

创建Azure DevOps项目

我要构建的项目的代码源在github https://github.com/logcorner/LogCorner.EduSync.Speech.Command

因此,我至少有2个解决方案来使用相关的git存储库设置azure devops持续集成:

  • 我可以将代码源导入azure devops并使用Azure Repos Git,这样代码源将被导入到azure devops

  • 我也可以使用Github中的repository,代码源在github上

我将展示如何设置这两个解决方案,但在本教程中,我将使用第二个解决方案。

创建项目

打开https://dev.azure.com/并创建一个帐户或登录(如果你已有帐户)

655ba3a27eb6bf7c23c2f3fee9579c20.png

然后创建一个新项目,我将其命名为LogCorner.EduSync.Speech.Command

6f50ea8d2670e112ea862c0e006e3133.png

我将可见性设为公开,因为它是一个演示,使用git版本控制选项和Scrum

8406ef4fa6cd4425517b79cd211bb77c.png

创建Azure DevOps管道

选择代码源

方案一:导入github代码源

选择左侧的Repos,然后点击files,然后点击import

d5d90040b985e037810bd5ccadabb032.png

转到你的github帐户并复制存储库的url以导入 https://github.com/logcorner/LogCorner.EduSync.Speech.Command.git

c2d05abd92752656c75c54d7f13756ea.png

然后我将创建一个个人访问令牌,因为gihub将使用它来授权对存储库的访问。

要创建个人访问令牌 (PAT),请选择设置,然后选择开发人员设置

79d376afe682c7bd6a33842bcf6de56a.png

单击个人访问令牌,单击新建个人访问令牌,为其命名并选择范围

01af5653bfbfa57b85766235612bd7f5.png

对于我选择的repo范围,设置并运行构建就足够了

5bd2d89fb02f22011aa3f05b38502918.png

将github存储库url和PAT粘贴到azure devops弹出窗口中,输入用户名并单击导入

a570c116fd50cf2d8195d166d73a7e7f.png

在azure devops上导入代码源如下:

55fbec808f76698f477016e445071c2c.png

方案二:使用github作为代码源

对于此选项,你必须先创建构建管道并选择github作为选定源,github会要求我使用OAuth设置可信连接。

选择左侧的Pipelines并点击Create Pipeline

bd51ab8bde61467c5749b510c2715c49.png

选择Github,给一个连接名称并点击授权

1f3fde6dcfe03ffcda040cec853c2ea0.png

它会提示你输入github凭据

3e0192f1d5a2511927fd4aa9ec8d975a.png

接受,然后选择要构建的存储库和分支,然后单击继续。

这里我选择了logcorner/LogCorner.EduSync.Speech.Command和master分支。

e1ae3fd810a6ac25900dcf4a98f96a05.png

创建管道任务

我使用了经典编辑器并创建了一个空管道

23d79a78a46165cb3afd9059ba791e89.png

构建任务

对于构建任务,我使用docker-compose任务,我必须使用文件运行Docker-compose build命令:

  • docker-compose.yml

  • docker-compose.override.yml

  • docker-compose-unit-tests.yml

  • docker-compose.override-unit-tests.yml

    6fa448d734a30e429a931c22ffdef67a.png

这是此构建任务的yaml

de350445b341a9f07892ddfa32220d91.png

此任务的yaml文件位于此处:LogCorner.EduSync.Command\src\CICD\BuilTask.yml

运行单元测试任务

对于运行单元测试任务,我使用docker-compose任务,我必须使用文件运行Docker-compose up命令:

  • docker-compose.yml

  • docker-compose.override.yml

  • docker-compose-unit-tests.yml

  • docker-compose.override-unit-tests.yml

    af109f7544f2e124b554c2250e69d8c3.png

这是运行单元测试任务的yaml代码

LogCorner.EduSync.Command\src\CICD\PublishTestResultTask.yml

我使用一个docker-compose任务来运行4个项目的单元测试,因此一个项目单元测试可能失败而其他项目成功。

我发现的最简单的方法是即使测试失败也让任务通过,然后如果测试失败则发布测试结果任务失败。

另一种解决方案是为每个项目创建一个运行单元测试任务,并使用运行特定服务镜像操作而不是运行docker-compose命令

be1f07f1a913aa67127b48f2dc289d1d.png

此任务的yaml文件位于此处:LogCorner.EduSync.Command\src\CICD\RunUnitTestTask.yml

发布测试结果任务

b7a172a4b00cd9b83d1c2861174b9d2b.png

这是发布测试结果任务的yaml文件

06c652db1a659b4b95657c4aa7521001.png

此任务的yaml文件位于此处:LogCorner.EduSync.Command\src\CICD\PublishTestResultTask.yml

运行构建

为了测试构建配置,我可以触发一个新的构建

17d50eac95616854dd8038c511c7b0f8.png

构建日志

7d94f4819981b6499e1658069b04ca76.png

测试结果

290670e6c0677c9ad7bd12a40433415d.png

代码源可在此处获得:https://github.com/logcorner/LogCorner.EduSync.Speech.Command/tree/Feature/DevOps

azure devops项目在这里 https://logcorner.visualstudio.com/LogCorner.EduSync.Speech.Command

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

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

相关文章

使用Visual Studio 创建可视Web Part部件

使用Visual Studio 创建可视Web Part部件 可视Web Part部件是很强大的Web 部件。它提供内置设计器创建你的用户界面。本文主要解说怎样使用Visual Studio 创建可视Web Part部件.准备,创建一个自己定义列表Stats,加入某些栏目,填充部分数据。当…

如果在我爸的朋友圈当杠精,会挨揍吗?

1 这位爷爷推这么大力是想换老伴了吧?▼2 撞玻璃门撞出心理阴影的狗子▼3 她和她爸交朋友的方式就是以爸的口吻评论她爸的朋友圈▼4 你们还记得那个学鸭子嘟嘴的小可爱吗?▼5 看看狗子委屈的......▼6 去游个泳,结果收获了一群小鸭子▼…

Git的理解和使用

Git介绍 Git(the stupid content tracker)是一个源自Linux内核项目的源码管理工具。和传统的CVS、SVN不同,git是一个分布式源码管理工具。 Git命令简单说明git init初始化一个本地的代码仓库。git clone从远程复制一个代码仓库。git configgi…

【v3.6.2】iNeuOS工业互联网操作系统,发布实时存储方式:实时存储、变化存储、定时存储,设备振动状态和电能状态监测驱动...

目 录1. 概述... 12. 平台演示... 23. 存储方式... 24. 设备状态和用电状态监控驱动... 31. 概述本次升级主要增加了对设备实时数据的存储方式、设备振动状态驱动和用电状态监控的驱动,并且优化了部分核心代码。2. 平台演示在线演示&…

查询子串_SQL视图、子查询和常见函数的应用

一、视图含义:虚拟表,和普通表一样使用,通过表动态生成的数据。创建语法的关键字是否实际占用物理空间使用视图CREATE VIEW没有(只保存了SQL逻辑)增删改查,一般不能增删改表CREATE TABLE占用(保…

The application could not be verified

2019独角兽企业重金招聘Python工程师标准>>> //调试的时候出现 The application could not be verified删除已安装的app,再Run 转载于:https://my.oschina.net/liuchuanfeng/blog/550025

git之you can‘t overwrite the remote branch问题解决

今天使用smartGit提交代码的时候出现这个错误,如图, remote是远程的意思,branch是分支的意思,you cant overwrite the remote branch英文的意思是我的remote branch被移动位置了,应该选中edit下面的prefrences下面的al…

数据分析和数据挖掘的理论研究必要性

2019独角兽企业重金招聘Python工程师标准>>> 数据分析,并不抽象,传统的数据分析,包括很多。例如信号处理中的DCT,滤波,IDCT变换。由于确定了滤波窗口的特性,使得对一个时间轴上的数据进行了频谱…

这个国家太奇怪了!全球最落后的国家之一,却又是世界上最幸福的国家!

全世界只有3.14 % 的人关注了爆炸吧知识中国和印度之间喜马拉雅山脉附近存在着一个弹丸小国国家人口仅有75万左右国土面积不足4万平方公里这里没有军队只有人们彼此诚挚的信任这里是最快乐的国度也是世间最神秘纯净的世外桃源这里是徒步天堂没有车水马龙的街道和红绿灯没有高楼…

嵌套饼图_旭日图的效率,高到饼图都羡慕

在展示占比情况时,饼图是我们最常用的选择。但是,饼图只能展示单层数据的占比情况,在面对多层级数据时,我们真的要用10个饼图进行可视化吗?不用挠头苦思,今天我们就来看看多个饼图的组合升级版——旭日图是…

Android之BaseAdapter—convertView回收机制与动态控件响应

前言:对于listView的BaseAdapter的派生,难度比较大。最难理解的莫过于getView(int position, View convertView, ViewGroup parent)这个函数是如何产生每条记录的,有些博客中利用holderView,有些博客却没有用,种种方法…

刚刚还在做菜,瞬间人就没了!厨房里一定不要再做这些事

全世界只有3.14 % 的人关注了爆炸吧知识厨房是一个家最有生活气息的地方,即使在外面,只要闻到别人家厨房飘出的饭菜香味,就很让人想家。但是,如果不注意细节,厨房也容易酿成悲剧!今天,给大家看几…

poj 3125 Printer Queue(STL注意事项)

http://poj.org/problem?id3125 这道题没什么突出的地方,是一道很水的题,可以用list,也可以用queue来解决。(用list解决的代码我就不写了)把它写上来,只是因为我在使用STL的时候犯了一个小错误&#xff0c…

TCTDB存储结构

TCTDB是tokyo cabinet家族中的表格数据库(如上图),其实现基于TCHDB(hash database)和TCBDB(B-tree database)。TCHDB参考:http://blog.chinaunix.net/space.php?uid20196318&doblog&id327754 TCBD…

Android之px 与 dp, sp换算公式

px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。 pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用; sp: scaled pi…

05Prism WPF 入门实战 - Navigation

1.概要源码及PPT地址:https://github.com/JusterZhu/wemail视频地址:https://www.bilibili.com/video/BV1KQ4y1C7tg?share\sourcecopy\web本章分为以下三个部分来了解:Part1 视图导航、参数传递Part2 确认导航Part3 导航日志2.详细内容Part1…

明明没PS,看起来却像PS过的32张照片

全世界只有3.14 % 的人关注了爆炸吧知识现在PS太普遍,以至于人们看到不同寻常的东西,第一时间会怀疑经过技术处理。但也有一些照片,真的没有PS过!1、这些轮胎痕迹令人产生了3D的错觉:2、截然分开的几种景观&#xff0c…

没有什么是日本牛郎店做不到的......

1 第一眼你看见了啥?▼2 确实很悲伤(dy:李逍遥)▼3 貌似真是这样▼4 我不爱打麻将咋办?▼5 短短十几个字,满满的江湖纷争▼6 少了男主的朋友不要轻易尝试▼7 哦吼▼8 双十一如你所愿,哈哈…

持续集成、持续交付(CI/CD)开篇,先来唠唠嗑

前言现在稍微有点规模的系统,很多都是采用分布式/微服务架构,将一个大系统拆分为很多个功能模块进行开发、测试、发布、管理等,如果全部流程都采用人工的形式进行的话,效率肯定是超级不高效滴。而且现在很多项目都采用极限编程的模…

100例经典炒菜_Python3经典100例(②)

实例6题目:斐波那契数列;分析:利用递归计算斐波那契数列,输入斐波那契数列的n位,调用递归计算出第n位的数列值;代码:#!/usr/bin/python3 # -*- coding: utf-8 -*- # Time : 2018-10-3 21:10 …