草庐IT

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

AlbertS 2023-08-04 原文

文章目录

前言

偶然在一个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 文件

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

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

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

有关偶然在github开源项目中发现了.travis.yml这货的更多相关文章

  1. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  2. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  3. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  4. Ruby 从大范围中获取第 n 个项目 - 2

    假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

  5. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

  6. ruby - 如何在 Ruby 字符串中插入项目符号字符? - 2

    我正在尝试创建一个带有项目符号字符的Ruby1.9.3字符串。str="•"+"helloworld"但是,当我输入它时,我收到有关非ASCII字符的语法错误。我该怎么做? 最佳答案 你可以把Unicode字符放在那里。str="\u2022"+"helloworld" 关于ruby-如何在Ruby字符串中插入项目符号字符?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1195

  7. 语法类似于 GitHub Flavored Markdown 的 Ruby markdown 解释器? - 2

    我使用Jekyll运行博客,并认为我会解决RedcarpetMarkdown解释器,因为它是developedandusedbyGitHub.好吧,我只是碰巧遇到了一个错误,去检查问题,然后foundthis.Maintainersays,"Asyouprobablyhavenoticed(harharharhar)Idon'thavetimetomaintainRedcarpetanymore.It'snotapriorityforme(IfindMarkdownthoroughlyboring)andit'snotapriorityforGitHub,becausewenolong

  8. ruby - 在 Rails 项目中测试本地版本的 gem - 2

    我的Rails站点使用了一个确实不是很好的gem。每次我需要做一些新的事情时,我最终不得不花费与向实际Rails项目添加代码一样多的时间来为gem添加功能。但我不介意,我将我的Gemfile设置为指向我的gem的GitHub分支(我尝试提交PR,但维护者似乎已经下台)。问题是我真的没有找到一种合理的方法来测试我添加到gem的新东西。在railsc中测试它会特别好,但我能想到的唯一方法是a)更改~/.rvm/gems/.../foo。rb,这看起来不对或者b)升级版本,推送到Github,然后运行​​bundleup,这除了耗时之外显然是一场灾难,因为我不确定我所做的promise是否正

  9. ruby - vagrant 从 github 安装插件 - 2

    我们正在使用Vagrant进行部署,我们最终希望将此集群部署在Rackspace上。vagrant-rackspace插件是一个自然的选择,但它有一些错误,这些错误未包含在最新的0.1.1版本中(notablythatvagrantprovisiondoesn'twork)。我已经在我的personalfork中解决了这个问题通过合并其他人的工作来对存储库进行改造。是否可以从github安装vagrant插件?显而易见的事情没有奏效:[unix]$vagrantplugininstallvagrant-rackspace--plugin-sourcehttps://github.com

  10. ruby - 合并 nanoc 中的项目 - 2

    我一直在尝试使用nanoc用于生成静态网站。我需要组织一个复杂的排列页面,我想让我的内容保持干燥。包含或合并的概念在nanoc系统中如何运作?我已阅读文档,但似乎找不到我想要的内容。例如:我如何获取两个部分内容项并将它们合并到一个新的内容项中。在staticmatic您可以在您的页面中执行以下操作。=partial('partials/shared/navigation')类似的约定在nanoc中如何运作? 最佳答案 这里是nanoc的作者。在nanoc中,部分是布局。因此,您可以拥有layouts/partials/shared/

随机推荐