前言
偶然在一个github开源项目中发现了.travis.yml这货,然后一发不可收拾,翻了翻之前看的几个开源库都有这个文件,并且最近经常看到它,这被称为“巴德尔-迈因霍夫现象”,是一种认知偏见,即在第一次注意到某一事物后,有一种更频繁地注意到它的倾向,导致某人相信它有很高的频率,既然这样索性就深入研究了一下这个文件,发现它原来是用于持续集成的。
持续集成
持续集成是一种 DevOps(Development和Operations的组合词)软件开发实践。采用持续集成时,开发人员会定期将代码变更合并到一个中央存储库中,之后系统会自动运行构建和测试操作。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来进行验证,从而尽早地发现集成错误,提高软件质量,并减少验证和发布新软件更新所需的时间。
持续集成是将构建并测试的过程自动化,在你提交代码时,持续集成服务能够自动触发构建与测试过程,并反馈结果,加快开发周期,同时减少脏代码的引入,而持续集成工具有很多,常见的包括 Jenkins 、Gitlab-CI 、Travis CI 和 AppVeyor ,github上项目的持续集成可以选择使用 Travis CI ,也有项目使用 AppVeyor ,它们都是开源持续集成云服务。
YAML
.travis.yml 是 github 用于说明持续集成步骤配置文件,使用的语言是 YAML 。它是一种可读性非常高,与程序语言数据结构非常接近,同时具备丰富的表达能力和可扩展性,并且易于使用的数据标记语言。经常会拿它和 XML 和 JSON 进行对比,YAML 比 XML 语法简洁得多,但是没有 XML 的标签概念,而 JSON 语法是 YAML 1.2 的子集,非常接近 YAML1.0 与 YAML1.1 的子集。
YAML 可以简单表达清单、散列表,标量等数据结构。它使用空白符号缩进,适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲等,配置文件后缀为通常为 .yml ,比如:.travis.yml 。
关于具体的语法本文就不展开说了,网上自行搜索一下,不同类型的项目的配置通常有自己的规范,可以参照 travis官方 配置说明,下面展示一个 .travis.yml 文件
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账号,自动获取你的仓库信息。
登陆之后,点击settings,然后激活 Travis CI 勾选需要持续集成的仓库。
编写代码
为了方便测试,我们只编写一个简单的 HelloWolrd.cpp 测试文件好了
#include <iostream>
int main() {
std::cout << "Hello World!" << std::endl;
return 0;
}
编写.travis.yml
我只写了一个文件,要求只要编译 gcc 通过就行了,暂时也不需要邮件通知
language: cpp
sudo: false
os:
- linux
compiler:
- gcc
script:
- $CXX wolrd/code/c++/HelloWorld.cpp -o a.out && ./a.out
推送代码启动Travis CI
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网站会自动启动,构建过程和结果如下:
第一次尝试失败,检查发现编译文件的路径写错了,修改后再次推送,成功构建的界面如下:
然后就可以在编译状态按钮后面领取这样一个标签,它可以根据项目构建状态实时变化,快把它加到项目的README文件里吧。
[![Build Status](https://app.travis-ci.com/AlbertGithubHome/HelloWorld.svg?branch=master)](https://app.travis-ci.com/AlbertGithubHome/HelloWorld)
总结
.travis.yml 是使用 Travis CI 持续集成服务的配置文件,使用 YAML 语言编写YAML 比 XML 语法简洁得多,但是没有 XML 的标签概念,而 JSON 语法是 YAML 1.2 的子集GitHub 和 Travis CI 是一对好基友,几乎不用额外的配置,只要按照官方语法写好 .travis.yml 文件即可- 可以把
Travis CI 看成一个机器人,每当我们 push 代码时,这个机器人会按照既定流程帮我们自动构建和检测
==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==
卅是一个阶段,更是一个开始~
|