【Travis CI使用教程】如何让定制你的travis.yml配置文件

本文介绍了TravisCI自动化构建工具的基本使用方法,包括构建环境、job生命周期、自定义构建阶段等关键概念,并提供了配置.travis.yml文件的具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Travis CI为每一种语言提供了一个默认的构建环境和一个默认的阶段集合。它能够为项目job的构建活动创建虚拟机,并将项目仓库在虚拟机中克隆,安装可选的插件,并运行构建过程的各个阶段。

  1. 构建:.travis.yml文件描述了构建的整个过程。在TravisCI中的每一个构建都是由一系列阶段(stage)所组成的。而这些阶段又被分成了不同的并行的job来运行。

  2. job的生命周期:job的生命周期也是由多个阶段(phase)组成的。主要的阶段包括:

    1. Install - 安装所需的依赖
    2. Script - 执行构建脚本

    除此之外,还可以选择以下的命令定制自己的构建过程:

    1. Before-install - 在安装阶段之前所需要做的步骤
    2. Before-script - 在执行脚本之前所需要做的步骤
    3. After-script - 在执行脚本之后所需要做的步骤
    4. After-success - 当构建成功时(比如生成构建文档),在travis_test_result环境变量下的结果
    5. After-failure - 当构建失败时(比如上传日志文件),在travis_test_result环境变量下的结果

    除此之外,还有三种可选的部署阶段命令。

    一个完整的job生命周期所包含的步骤如下所示:

    1. 可选安装 apt addons
    2. 可选安装 cache components
    3. Before_install
    4. install
    5. Before_script
    6. Script
    7. 可选 before_cache(只有当缓存生效的时候)
    8. after_success或者after_failure
    9. 可选 before_deploy(只有当deploy被激活时)
    10. 可选deploy
    11. 可选after_deploy(只有当deploy被激活时)
    12. After_script
  3. 定制你的安装(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/bundle
      npm install
    

    如果设置了多种安装依赖,当其中一个安装失败时,整个构建过程就会立即终止并且被标记为errored。

    除此之外,你还可以使用Apt-get或者snap去安装依赖。

  4. 跳过安装(install)阶段

    通过向travis.yml中添加命令来跳过整个安装阶段:

    install: skip
    
  5. 定制你的构建(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的结果,那么整个构建就会立即失败。

  6. 复杂的构建命令

    如果你的构建环境过于复杂以致于很难在travis.yml配置文件中进行配置,可以考虑写一个独立的shell脚本。可以将脚本放在你的项目的仓库中,使它能够轻易地被配置文件travis.yml调用。

    比如这样一个场景。你想执行更多更复杂的测试场景,但是想排除来自于pull request的构建,那么你可以建立这样一个shell文件:

    #!/bin/bash
    set -ev
    bundle exec rake:units
    if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then
      bundle exec rake test:integration
    fi
    

    如何在travis.yml中调用这个shell文件呢?

    1. 将shell文件在项目仓库中存为scripts/run_tests.sh
    2. 运行命令chmod ugo+x scripts/run_tests.sh为文件添加可执行权限
    3. 提交到仓库中
    4. 添加到travis.yml文件中(代码如下)
    script: ./scripts/run-tests.sh
    
  7. 中断构建

    如果job的生命周期的前四个步骤返回非0的状态吗,那么本次构建就会被中断。可以分成以下两种情况:

    1. 如果before_install, install, 和before_script三个阶段返回非0状态码,本次构建为errored并且立即终止
    2. 如果script阶段返回非0状态码,本次构建为失败failed,但是直到被标记为failed之前仍然在运行

    阶段after_success, after_failure, after_script, 以及after_deploy以及其后续的阶段都不对最后的构建结果产生影响。但是如果这些阶段的其中一个发生了超时,那么构建结果会被标识为failed。

  8. 部署代码

    在job的生命周期中部署是可选步骤。这个步骤被定义为使用一种持续部署工具将代码部署到Heroku, Amazon或者其他的不同的平台上。如果构建步骤中断了,那么部署阶段就不会被执行。

    配置代码如下:

    deploy:
      skip_cleanup: true
    

    你也可以在执行deploy命令之前执行before_deploy命令。如果这个阶段的返回状态是非0,那么整个构建为errored。

    如果你在部署之后需要做一些事情,也可以通过after_deploy命令来配置。

    但是after_deploy命令的返回结果是不影响整个构建的结果的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值