热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Blueprint+Dredd+Gitlab-CI实现持续集成

0前言Blueprint+Dredd+Gitlab-CI这一套工具链用于完成WebAPI的编写、上传、测试、集成。Blueprint的概念和语法另一篇博客已经有说明了,Dredd的

0 前言

Blueprint+Dredd+Gitlab-CI这一套工具链用于完成Web API的编写、上传、测试、集成。Blueprint的概念和语法另一篇博客已经有说明了,Dredd的使用我也写了一篇博客,所以这一篇主要讲Gitlab-CI的搭建过程以及如何将三者贯通使用。


1 基本概念

Gitlab-CI,意为GItlab Continuous Integration(持续集成),在工程的根目录加入配置文件.gitlab-ci.yml,并配置好Gitlab-Runner之后,可以在每次上传(push)或合并(merge)时触发pipeline测试提交的代码是否正确。

Gitlab-Runner,可以把它理解为一个虚拟机,用于运行.gitlab-ci.yml中的script

pipeline,可以理解成检测工序链,通过.gitlab-ci.yml设置的多个stage,在runner运行的时候逐个阶段的执行定义好的job,检测通过之后才可以上传或合并。


2 搭建过程

这个过程,我参考了apiary的官方文档,下面的步骤(2.0 – 2.6)是按照官网走的,但我实际使用没有完全按照这个步骤走,大家可以参考一下,我自己具体的实现在第三节,会详细描述。


2.0 创建repository

既然要用到Gitlab,肯定需要先创建一个repository。


2.1 获取subdomain

首先需要一个Blueprint工程,没有的话新建一个,创建好之后在SettingsAPI Domain项中即可找到subdomain,之后的配置需要用到。


2.2 生成token

通过访问 https://login.apiary.io/tokens 可以获取token值,可以将这个值保存成环境变量

export APIARY_API_KEY=""

这个值之后会在配置GItlab项目的时候用到。


2.3 将工程commit到Gitlab上

将写好的blueprint文件提交到事先创建好的repository。


2.4 配置token

在工程的主页右上角,下拉菜单可以找到Variables,将之前获得的token作为APIARY_API_KEY变量的值写入。


2.5安装配置Gitlab-Runner

yml配置文件需要在runner中运行,所以先要安装并配置好runner。
安装过程:

curl -s https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash

sudo apt-get install gitlab-ci-multi-runner

安装完成之后,就是配置了,直接使用下面的命令,可以交互式的配置相关参数

sudo gitlab-ci-multi-runner register

2.6 编写配置文件

相关的语法,官方文档写得很详细。

这个文件主要是定义了一系列的job,job下编写一些要执行的脚本。并且还有一些需要用到的docker容器等,这一部分比较复杂,我打算单独写一篇总结。


3 综合使用

这一部分,我写了一个最简单的例子,实现了每次push都会触发CI检测,CI通过使用Dredd工具测试当前版本的API文档和具体实现是否吻合。

下面简单介绍一下整个实现过程。


3.1 建立repository

这一步比较简单,但也很重要,要使用Gitlab-CI肯定得要建一个Gitlab的代码仓库,而且后续的一些Runner配置,Pipelines的查看都需要用到。


3.2 写程序

毫无疑问,测试之前首先得有代码呀,

  • 写API文档(api.apib)
  • 实现API(app.js)
  • 写Gitlab-CI的配置文件(.gitlab-ci.yml)
  • 写Dredd的配置文件(dredd.yml,这一步可以省略)

因为还在测试功能,所以只是写了一个helloworld,发出来给大家参考一下。
api.apib:

FORMAT: 1A

# GET /
+ Response 200 (application/json; charset=utf-8)

{"message": "Hello World!"}

app.js:

var app = require('express')();

app.get('/', function(req, res) {
res.json({message: 'Hello World!'});
})

app.listen(3000);

.gitlab-ci.yml:
关键:Dredd工具需要应用先运行后再检测,所以在运行app.js时,使用nohup node app.js&指令,让其后台运行,防止阻塞后续指令的执行。

image: node:6

before_script:
- npm install
- npm install -g dredd
- nohup node app.js&

test:
script:
- dredd ./api.apib http://localhost:3000

3.3 配置Runner

这一步和2.5一样,可以参考那一步的配置,为该repository建立Runner。

curl -s https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash

sudo apt-get install gitlab-ci-multi-runner

安装完成之后,就是配置了,直接使用下面的命令,可以交互式的配置相关参数

sudo gitlab-ci-multi-runner register

配置之后选择启用即可。


3.4 开始使用

将代码push到repository,Gitlab会自动启动Runner,并运行.gitlab-ci.yml中设定好的指令。

经过大约4-5分钟的运行环境搭建,相关模块下载之后,就会开始检测,若通过,则会显示绿色的passed,没有通过则会显示红色的failed

效果


推荐阅读
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • python中安装并使用redis相关的知识
    本文介绍了在python中安装并使用redis的相关知识,包括redis的数据缓存系统和支持的数据类型,以及在pycharm中安装redis模块和常用的字符串操作。 ... [详细]
author-avatar
眾于-晴
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有