【Travis CI使用教程】如何让定制你的travis.yml配置文件
Travis CI为每一种语言提供了一个默认的构建环境和一个默认的阶段集合。它能够为项目job的构建活动创建虚拟机,并将项目仓库在虚拟机中克隆,安装可选的插件,并运行构建过程的各个阶段。
构建:.travis.yml文件描述了构建的整个过程。在TravisCI中的每一个构建都是由一系列阶段(stage)所组成的。而这些阶段又被分成了不同的并行的job来运行。
job的生命周期:job的生命周期也是由多个阶段(phase)组成的。主要的阶段包括:
- Install - 安装所需的依赖
- Script - 执行构建脚本
除此之外,还可以选择以下的命令定制自己的构建过程:
- Before-install - 在安装阶段之前所需要做的步骤
- Before-script - 在执行脚本之前所需要做的步骤
- After-script - 在执行脚本之后所需要做的步骤
- After-success - 当构建成功时(比如生成构建文档),在travis_test_result环境变量下的结果
- After-failure - 当构建失败时(比如上传日志文件),在travis_test_result环境变量下的结果
除此之外,还有三种可选的部署阶段命令。
一个完整的job生命周期所包含的步骤如下所示:
- 可选安装 apt addons
- 可选安装 cache components
- Before_install
- install
- Before_script
- Script
- 可选 before_cache(只有当缓存生效的时候)
- after_success或者after_failure
- 可选 before_deploy(只有当deploy被激活时)
- 可选deploy
- 可选after_deploy(只有当deploy被激活时)
- After_script
定制你的安装(install)阶段
默认的依赖安装命令取决于项目所使用的语言。比如Java构建通常会使用maven或者gradle,这取决于仓库中的构建文件。使用Ruby的项目如果在仓库中存在Gemfile,会配置Bundler安装命令。
你可以定制自己的脚本去安装项目依赖:
install: ./install_dependencies.sh
当使用自定义的脚本时,脚本的权限需要设置为可执行(比如使用chmod +x命令),并且需要包含一个有效的事务行比如:/usr/bin/env sh, /usr/bin/env ruby, 或者/usr/bin/env python。
除此之外,你还可以提供多个步骤,比如可以安装ruby和node两种依赖:
install:bundle install -- path vendor/bundlenpm install
如果设置了多种安装依赖,当其中一个安装失败时,整个构建过程就会立即终止并且被标记为errored。
除此之外,你还可以使用Apt-get或者snap去安装依赖。
跳过安装(install)阶段
通过向travis.yml中添加命令来跳过整个安装阶段:
install: skip
定制你的构建(build)阶段
默认的构建命令取决于项目所使用的语言。比如Ruby语言使用的构建命令是rake,这是大多数Ruby语言最常见的命令方式。
你可以在配置文件travis.yml中重写默认构建:
script: bundle exec thor build
你可以使用命令规定多个构建脚本:
script:- bundle exec rake build- bundle exec rake builddoc
如果这些构建命令的其中一个返回非0的结果,travis CI构建机制会自动运行接下来的命令并且累计构建结果。
比如上面的例子,命令bundle exec rake build命令返回的状态码为1,环境仍然会继续运行bundle exec rake builddoc命令,但是最后的构建结果仍然是失败(failure)。
这种机制适用于一些场景。比如,你的第一步想执行单元测试,第二步想执行集成测试,如果第一步单元测试失败了,你仍然想知道集成测试是否能够成功。
当然你也可以通过修改命令去改变这种机制:
script:- bundle exec rake build && bundle exec rake builddoc
通过这种写法,如果bundle exec rake build返回非0的结果,那么整个构建就会立即失败。
复杂的构建命令
如果你的构建环境过于复杂以致于很难在travis.yml配置文件中进行配置,可以考虑写一个独立的shell脚本。可以将脚本放在你的项目的仓库中,使它能够轻易地被配置文件travis.yml调用。
比如这样一个场景。你想执行更多更复杂的测试场景,但是想排除来自于pull request的构建,那么你可以建立这样一个shell文件:
#!/bin/bash set -ev bundle exec rake:units if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; thenbundle exec rake test:integration fi
如何在travis.yml中调用这个shell文件呢?
- 将shell文件在项目仓库中存为scripts/run_tests.sh
- 运行命令chmod ugo+x scripts/run_tests.sh为文件添加可执行权限
- 提交到仓库中
- 添加到travis.yml文件中(代码如下)
script: ./scripts/run-tests.sh
中断构建
如果job的生命周期的前四个步骤返回非0的状态吗,那么本次构建就会被中断。可以分成以下两种情况:
- 如果before_install, install, 和before_script三个阶段返回非0状态码,本次构建为errored并且立即终止
- 如果script阶段返回非0状态码,本次构建为失败failed,但是直到被标记为failed之前仍然在运行
阶段after_success, after_failure, after_script, 以及after_deploy以及其后续的阶段都不对最后的构建结果产生影响。但是如果这些阶段的其中一个发生了超时,那么构建结果会被标识为failed。
部署代码
在job的生命周期中部署是可选步骤。这个步骤被定义为使用一种持续部署工具将代码部署到Heroku, Amazon或者其他的不同的平台上。如果构建步骤中断了,那么部署阶段就不会被执行。
配置代码如下:
deploy:skip_cleanup: true
你也可以在执行deploy命令之前执行before_deploy命令。如果这个阶段的返回状态是非0,那么整个构建为errored。
如果你在部署之后需要做一些事情,也可以通过after_deploy命令来配置。
但是after_deploy命令的返回结果是不影响整个构建的结果的。
【Travis CI使用教程】如何让定制你的travis.yml配置文件相关推荐
- Travis CI mysql_DevOps工具介绍连载(34)——Travis CI
原标题:DevOps工具介绍连载(34)--Travis CI Travis CI 持续集成 Travis CI 是在线托管的持续集成服务,绑定Github项目,抓取新的代码自动进行测试构建,甚至自动 ...
- flutter ios打包_使用 Travis CI 为 Flutter 项目打包 Android/iOS 应用
Travis CI 构建 Building Flutter APKs and IPAs on Travis 这篇文章详细介绍了如何在 Travis CI 上为 Flutter 项目打包 Android ...
- iOS中 为 iOS 建立 Travis CI 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang新浪微博! 你是否曾经试着为 iOS 项目搭建一台支持持续集成的服务器,从我的个人经验而言,这可不是一个轻松的活.首先需要准备一台 ...
- 基于Travis CI实现 Hexo 在 Github 和 Coding 的同步部署
各位朋友,大家好,我是Payne,欢迎大家关注我的博客,我的博客地址是 https://qinyuanpei.github.io .在曾经的一篇博客:<持续集成在Hexo自动化部署上的实践& ...
- 持续集成服务 Travis CI 教程
编写代码只是软件开发的一小部分,更多的时间往往花在构建(build)和测试(test). 为了提高软件开发的效率,构建和测试的自动化工具层出不穷.Travis CI 就是这类工具之中,市场份额最大的一 ...
- django 集成个推_持续集成CircleCI vs Travis CI vs Jenkins
Continuous Integration. CircleCI vs Travis CI vs Jenkinshackernoon.com 持续集成(CI)的定义及其主要目标 持续集成(CI)是一 ...
- travis-ci自动部署_如何使用Travis CI设置高级自动部署
travis-ci自动部署 by Amir Off 由Amir Off 如何使用Travis CI设置高级自动部署 (How to set up advanced automatic deployme ...
- 构建指定仓库_使用Travis CI自动构建和部署你的GitBook
本文,博主将会介绍利用Travis CI持续集成服务自动化构建和部署GitBook. 首先介绍一下TravisCI,下文摘自维基百科-Travis CI Travis CI是在软件开发领域中的一个在线 ...
- 持续集成与持续部署(五)01-TravisCI——使用简介-Travis CI 只支持 Github,提供的是持续集成服务 配置项目的.travis.yml文件
持续集成与持续部署(五)01-TravisCI--使用简介-Travis CI 只支持 Github,提供的是持续集成服务 & 配置项目的.travis.yml文件 TravisCI 使用简介 ...
- Vite(三)部署静态站点(wordpress与hugo与Vercel、CI/CD、Travis CI、GitLab CI)、环境变量与模式、服务端渲染(SSR)
Vite(三)部署静态站点(wordpress与hugo与Vercel.CI/CD.Travis CI.GitLab CI).环境变量与模式.服务端渲染(SSR) 文章目录 Vite(三)部署静态站点 ...
最新文章
- tensorflow对应的python版本清单
- 5G风起,四大IoT迎风爆发!智能家居与电表高速增长
- 手机端自适应字体大小和元素宽度自适应
- ABAP和XML数据格式互相转换的两种方式
- python head 函数_python爬虫中header是什么?怎么用?
- FreeModbus TCP传输
- python函数应用(2)
- nndl学习笔记(二)反向传播公式推导与详解
- python拼写错误20几分钟怎么办_Python | 21行轻松搞定拼写检查器
- 使用Idea添加PYTHONPATH的一种方案
- 相机快门、 光圈有啥区别?
- 清华北大领跑亚洲,泰晤士高等教育2020世界大学排名发布!
- 2018乌镇峰会 -- 完美世界萧泓论道互联网与文化交流
- 海信85U7G和海信85U7G-PRO有什么区别 哪个好详细性能配置对比
- 基于改进层次凝聚聚类算法的垃圾收运跨区域调度策略
- Redis 之BIO与RIO
- 用python写一个ip查询工具库
- 绿氢、蓝氢、灰氢,原来氢也可以这么出彩
- 使用容联云通讯实现电话云呼叫功能
- 解决labelimg闪退