偶然在github开源项目中发现了.travis.yml这货

前言

偶然在一个github开源项目中发现了.travis.yml这货,然后一发不可收拾,翻了翻之前看的几个开源库都有这个文件,并且最近经常看到它,这被称为“巴德尔-迈因霍夫现象”,是一种认知偏见,即在第一次注意到某一事物后,有一种更频繁地注意到它的倾向,导致某人相信它有很高的频率,既然这样索性就深入研究了一下这个文件,发现它原来是用于持续集成的。

持续集成

持续集成是一种 DevOps(Development和Operations的组合词)软件开发实践。采用持续集成时,开发人员会定期将代码变更合并到一个中央存储库中,之后系统会自动运行构建和测试操作。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来进行验证,从而尽早地发现集成错误,提高软件质量,并减少验证和发布新软件更新所需的时间。

持续集成是将构建并测试的过程自动化,在你提交代码时,持续集成服务能够自动触发构建与测试过程,并反馈结果,加快开发周期,同时减少脏代码的引入,而持续集成工具有很多,常见的包括 JenkinsGitlab-CITravis CIAppVeyor,github上项目的持续集成可以选择使用 Travis CI,也有项目使用 AppVeyor,它们都是开源持续集成云服务。

YAML

.travis.yml 是 github 用于说明持续集成步骤配置文件,使用的语言是 YAML。它是一种可读性非常高,与程序语言数据结构非常接近,同时具备丰富的表达能力和可扩展性,并且易于使用的数据标记语言。经常会拿它和 XMLJSON 进行对比,YAMLXML 语法简洁得多,但是没有 XML 的标签概念,而 JSON 语法是 YAML 1.2 的子集,非常接近 YAML1.0YAML1.1 的子集。

YAML 可以简单表达清单、散列表,标量等数据结构。它使用空白符号缩进,适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲等,配置文件后缀为通常为 .yml,比如:.travis.yml

关于具体的语法本文就不展开说了,网上自行搜索一下,不同类型的项目的配置通常有自己的规范,可以参照travis官方配置说明,下面展示一个 .travis.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
language: cpp

sudo: false

os:
- linux
- osx

compiler:
- gcc
- clang

script:
- $CC ccronexpr.c ccronexpr_test.c -I. -Wall -Wextra -std=c89 -DCRON_TEST_MALLOC -o a.out && ./a.out
- $CXX ccronexpr.c ccronexpr_test.c -I. -Wall -Wextra -std=c++11 -DCRON_TEST_MALLOC -o a.out && ./a.out

notifications:
email:
on_success: always

第一次使用 .travis.yml

要想学会一件事必须反复强化记忆,所以我决定自己写个.travis.yml来使用一次,刚开始语法还不太熟悉,所以我打算在一些开源项目的文件基础上来修改,需求也比较简单,只要能实现我上传到github的代码能自动编译就可以了。

注册登录travis

登陆 travis 官网,直接用github账号登陆即可,这样 travis 可以直接关联登录的github账号,自动获取你的仓库信息。

travis-ci-1

登陆之后,点击settings,然后激活 Travis CI 勾选需要持续集成的仓库。

travis-ci2

编写代码

为了方便测试,我们只编写一个简单的 HelloWolrd.cpp 测试文件好了

1
2
3
4
5
6
7
#include <iostream>

int main() {

std::cout << "Hello World!" << std::endl;
return 0;
}

编写.travis.yml

我只写了一个文件,要求只要编译 gcc 通过就行了,暂时也不需要邮件通知

1
2
3
4
5
6
7
8
9
10
11
12
language: cpp

sudo: false

os:
- linux

compiler:
- gcc

script:
- $CXX wolrd/code/c++/HelloWorld.cpp -o a.out && ./a.out

推送代码启动Travis CI

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Albert@home-pc MINGW64 /d/data/maingit/HelloWorld (master)
$ git add .

Albert@home-pc MINGW64 /d/data/maingit/HelloWorld (master)
$ git commit -m"test travis ci"
[master 8e92384] test travis ci
2 files changed, 2 insertions(+), 2 deletions(-)
Albert@home-pc MINGW64 /d/data/maingit/HelloWorld (master)
$ git push
Enumerating objects: 13, done.
Counting objects: 100% (13/13), done.
Delta compression using up to 4 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (7/7), 604 bytes | 302.00 KiB/s, done.
Total 7 (delta 3), reused 0 (delta 0)
remote: Resolving deltas: 100% (3/3), completed with 3 local objects.
To github.com:AlbertGithubHome/HelloWorld.git
af45c67..8e92384 master -> master

推送之后travis-ci网站会自动启动,构建过程和结果如下:

travis-ci-3

第一次尝试失败,检查发现编译文件的路径写错了,修改后再次推送,成功构建的界面如下:

travis-ci4

然后就可以在编译状态按钮后面领取这样一个标签,它可以根据项目构建状态实时变化,快把它加到项目的README文件里吧。

[![Build Status](https://app.travis-ci.com/AlbertGithubHome/HelloWorld.svg?branch=master)](https://app.travis-ci.com/AlbertGithubHome/HelloWorld)

travis-ci5

总结

  • .travis.yml 是使用 Travis CI 持续集成服务的配置文件,使用 YAML 语言编写
  • YAMLXML 语法简洁得多,但是没有 XML 的标签概念,而 JSON 语法是 YAML 1.2 的子集
  • GitHubTravis CI 是一对好基友,几乎不用额外的配置,只要按照官方语法写好 .travis.yml 文件即可
  • 可以把Travis CI 看成一个机器人,每当我们 push 代码时,这个机器人会按照既定流程帮我们自动构建和检测

==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

卅是一个阶段,更是一个开始~

2022-7-3 01:08:33

Albert Shi wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客