-
使用github账号在travis-ci.com进行注册
-
接受TravisCI授权。
-
单击Travis仪表板右上方的个人资料图片,单击“设置”,然后单击绿色的“激活”按钮,然后选择要用于Travis CI的存储库。
-
在你的代码仓库中添加 .travis.yml文件以告知travis要做什么,以下示例指定了应使用Ruby 2.2和最新版本的JRuby构建的Ruby项目:
# .travis.yml language: ruby rvm: - 2.2 - jruby
-
添加该文件到git,提交并push到你的远程仓库触发travis构建
-
通过访问Travis CI并选择您的存储库,检查构建状态页面,以根据构建命令的返回状态查看您的构建是否通过或失败。
此示例存储库运行从同一映像构建的两个Docker容器:
#.travis.yml language: ruby
services: - docker
before_install: - docker pull carlad/sinatra - docker run -d -p 127.0.0.1:80:4567 carlad/sinatra /bin/sh -c "cd /root/sinatra; bundle exec foreman start;" - docker ps -a - docker run carlad/sinatra /bin/sh -c "cd /root/sinatra; bundle exec rake test"
script: - bundle exec rake test
#.travis.yml language: ruby services: - docker
before_install: - docker build -t carlad/sinatra . - docker run -d -p 127.0.0.1:80:4567 carlad/sinatra /bin/sh -c "cd /root/sinatra; bundle exec foreman start;" - docker ps -a - docker run carlad/sinatra /bin/sh -c "cd /root/sinatra; bundle exec rake test"
script: - bundle exec rake test
推送到镜像仓首先要通过 docker login 进行身份验证,用于登录的电子邮件,用户名和密码应存储在存储库设置环境变量中,该变量可以通过存储库设置网页设置,也可以通过Travis CLI在本地设置,例如:
travis env set DOCKER_USERNAME myusername
travis env set DOCKER_PASSWORD secretsecret
确保您已经使用 travis gem 加密环境变量。
要将存储库的特定分支推送到远程注册表,请使用.travis.yml的定制部署部分:
#.travis.yaml
deploy:
provider: script
script: bash docker_push
on:
branch: master
其中docker_push是存储库中的脚本:
#!/bin/bash
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
docker push USER/REPO
当推送到私有注册表时,请确保在docker login命令中指定主机名,例如:
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin registry.example.com
PR构建是Travis CI的重要组成部分。每当在GitHub上打开PR时,Travis CI都会构建该请求并更新拉取请求页面上的状态图标。
travis ci 收到PR通知并运行构建。在构建期间会更新PR状态为以下状态之一:
- 构建正在运行的警告
- 构建失败PR不应该被合并的通知
- 构建成功PR可以被合入
首次打开Travis CI时,只要将提交添加到该PR中,它就会构建一个PR。我们构建源分支和上游分支之间的合并,而不是构建已被推送到PR所来自的分支的提交。
要仅在推送事件上构建而不在拉取请求上构建,请在存储库设置中禁用“在PR上构建”。
要仅在特定分支上构建PR可以使用 branchs: only: 键来指定
因一个从上游仓库fork的仓库提交的PR可以操纵暴露环境变量,而上游仓库维护者无法抵御这种攻击。travis CI 设定为外部PR(fork 仓提交的PR)无法访问环境变量和加密数据。即使这些已在派生源项目中定义。
要解决此问题,请将这些测试仅限制在环境变量可用的情况下:
script:
- 'if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then bash ./travis/run_on_pull_requests; fi'
- 'if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then bash ./travis/run_on_non_pull_requests; fi'
Travis CI cron作业的工作方式与cron实用程序相似,它们以固定的预定时间间隔运行构建,而与是否将任何提交推送到存储库无关。Cron作业始终获取特定分支上的最新提交,并在该状态下构建项目。Cron作业可以每天,每周或每月运行,这实际上意味着在选定的时间跨度后最多一个小时,您不能将其设置为在特定时间运行。
请通过Travis CI网页上的“ Cron Jobs”设置选项卡配置cron作业。
Travis CI为每种编程语言提供了默认的构建环境和默认的阶段集。将使用您的工作的构建环境创建一个虚拟机,将您的存储库克隆到其中,安装可选的附加组件,然后运行构建阶段。
每个作业都是一个阶段序列。主要阶段是:
- install 安装所需的任何依赖项
- script 运行构建脚本
Travis CI可以在以下阶段中运行自定义命令:
- befor_install 在安装阶段之前
- befor_script 在运行脚本之前
- after_script 在运行脚本之后
- after_success 当构建成功时(比如: 构建文档)结果在TRAVIS_TEST_RESULT环境变量中
- after_failure 当构建失败时 (比如:更新log文件) 结果在TRAVIS_TEST_RESULT环境变量中
有三个可选的部署阶段。
其完整的构建阶段(生命周期):
- 可选安装 apt addons
- 可选安装 cache components
- befor install
- install
- before_script
- script
- 可选 befor_cache(当且仅当缓存有效时)
- after_success or after_failure
- 可选 before_depoly
- 可选depoly
- 可选after_depoly
- after_script
NOTE: 一个构建可以包含许多工作。
一个构建矩阵由几个并行运行的多个作业组成。
在许多情况下这可能很有用,但是使用构建矩阵的两个主要原因是:
- 减少整体的构建时间
- 针对不同版本的运行时或依赖项运行测试
此页面上的示例着重于后一种用例。
有两种方法可以在.travis.yml文件中定义矩阵,这两个功能可以组合使用:
- 使用矩阵扩展功能
- 列出单个作业配置
某些键定义为采用值数组的矩阵扩展键,从而为每个值创建一个额外的作业。如果提供了几个矩阵扩展键,则它将乘以创建的作业数量。
例如,以下配置生成一个构建矩阵,该矩阵扩展为8个单独的(2 * 2 * 2)作业,将来自三个矩阵扩展键rvm,gemfile和env的每个值组合在一起。
rvm:
- 2.5
- 2.2
gemfile:
- gemfiles/Gemfile.rails-3.2.x
- gemfiles/Gemfile.rails-3.0.x
env:
- ISOLATED=true
- ISOLATED=false
另外,可以通过将条目添加到关键作业.include中来指定作业。例如,如果上面矩阵扩展的所有组合都不是全部相关,则可以像下面这样单独指定作业:
jobs:
include:
- rvm: 2.5
gemfile: gemfiles/Gemfile.rails-3.2.x
env: ISOLATED=false
- rvm: 2.2
gemfile: gemfiles/Gemfile.rails-3.0.x
env: ISOLATED=true
NOTE: 对于私有和公共存储库,当前构建矩阵的最大限制为200个JOBS。如果您采用开源计划,请记住Travis CI向社区免费提供此服务。因此,请仅指定您实际需要的矩阵。
构建矩阵扩展有时会产生不需要的组合。在这种情况下,使用键jobs.exclude排除某些组合会比较方便,而不是单独列出所有作业。例如,这将从构建矩阵中排除两个作业:
jobs:
exclude:
- rvm: 1.9.3
gemfile: gemfiles/Gemfile.rails-2.3.x
env: ISOLATED=true
- rvm: jruby
gemfile: gemfiles/Gemfile.rails-2.3.x
env: ISOLATED=true
如果要从构建矩阵中排除的作业共享相同的矩阵参数,则可以仅指定那些参数,并忽略不同的部分。假设您有:
language: ruby
rvm:
- 1.9.3
- 2.0.0
- 2.1.0
env:
- DB=mongodb
- DB=redis
- DB=mysql
gemfile:
- Gemfile
- gemfiles/rails4.gemfile
- gemfiles/rails31.gemfile
- gemfiles/rails32.gemfile
这产生了一个3×3×4的构建矩阵。要排除所有具有rvm值2.0.0和gemfile值Gemfile的作业,您可以编写:
jobs:
exclude:
- rvm: 2.0.0
gemfile: Gemfile
等价于:
jobs:
exclude:
- rvm: 2.0.0
gemfile: Gemfile
env: DB=mongodb
- rvm: 2.0.0
gemfile: Gemfile
env: DB=redis
- rvm: 2.0.0
gemfile: Gemfile
env: DB=mysql
构建阶段是一种对作业进行分组的方法,可以在每个阶段并行运行作业,但是依次运行一个阶段,并且只有在上一个阶段的所有作业都成功通过后才能继续进行。
这是在.travis.yml文件中为此设置构建配置的方式:
jobs:
include:
- stage: test
script: ./test 1
- # stage name not required, will continue to use `test`
script: ./test 2
- stage: deploy
script: ./deploy
您还可以在构建阶段中命名特定作业。我们建议使用唯一的工作名称,但不要强制使用(尽管将来可能会更改)。可以为Jobs.include节中定义的作业指定名称属性,如下所示:
jobs:
include:
- stage: "Tests" # naming the Tests stage
name: "Unit Tests" # names the first Tests stage job
script: ./unit-tests
- script: ./integration-tests
name: "Integration Tests" # names the second Tests stage job
- stage: deploy
name: "Deploy to GCP"
script: ./deploy
您可以将Travis CI配置为仅在满足某些条件时运行构建
例如,这允许构建仅在master分支上运行:
# require the branch name to be master (note for PRs this is the base branch name)
if: branch = master
您可以将Travis CI配置为仅包含满足特定条件的阶段。不符合给定条件的阶段将被静默跳过。例如,这允许部署阶段仅在master分支上运行:
stages:
- name: deploy
# require the branch name to be master (note for PRs this is the base branch name)
if: branch = master
例如,这仅包括列出的作业以建立在master分支上:
jobs:
include:
- # require the branch name to be master (note for PRs this is the base branch name)
if: branch = master
env: FOO=foo
在Ubuntu上使用apt 安装软件包:
before_install:
- sudo apt-get -y install libxml2-dev
默认情况下,apt-get更新不会自动运行。如果要在每个版本上自动更新apt-get update,则有两种方法可以执行此操作。首先是通过在before_install步骤中显式运行apt-get update:
before_install:
- sudo apt-get update
- sudo apt-get -y install libxml2-dev
第二种方法是使用APT插件:
before_install:
- sudo apt-get -y install libxml2-dev
addons:
apt:
update: true
NOTE:不要在构建中运行apt-get升级,因为它会下载多达500MB的软件包,并且会大大延长构建时间。此外,某些软件包可能无法更新,这将导致构建失败。
before_install:
- sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
- sudo apt-get -q update
- sudo apt-get -y install gcc-4.8
对于不在Launchpad上托管的存储库,您还需要添加一个GnuPG密钥。如果您是以这种方式安装软件包,请确保下载适合您环境的正确版本。
本示例将适用于Ubuntu 12.04的Varnish 3.0的APT存储库添加到APT源的本地可用列表中,然后安装varnish软件包。
before_script:
- curl http://repo.varnish-cache.org/debian/GPG-key.txt | sudo apt-key add -
- echo "deb http://repo.varnish-cache.org/ubuntu/ precise varnish-3.0" | sudo tee -a /etc/apt/sources.list
- sudo apt-get -qq update
- sudo apt-get -y install varnish
before_install:
- wget http://pngquant.org/pngquant_1.7.1-1_i386.deb
- sudo dpkg -i pngquant_1.7.1-1_i386.deb
您也可以使用APT插件安装软件包和源,而无需在before_install脚本中运行apt-get命令。
要添加APT源,可以使用以下三种类型之一:
- aliases defined in source safelist
sourceline
key-value pairs which will be added to/etc/apt/sources.list
- when APT sources require GPG keys, you can specify this with
key_url
pairs in addition tosourceline
.
以下代码片段显示了这三种类型的APT来源
addons:
apt:
sources:
- deadsnakes
- sourceline: 'ppa:ubuntu-toolchain-r/test'
- sourceline: 'deb https://packagecloud.io/chef/stable/ubuntu/precise main'
key_url: 'https://packagecloud.io/gpg.key'
添加APT软件包
addons:
apt:
packages:
- cmake
- time
Note: When using APT sources and packages together, you need to make sure they are under the same key space in the YAML file. e.g.
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- gcc-4.8
- g++-4.8
略…
Travis CI可以缓存不经常更改的内容,以加快构建过程。要使用缓存功能,请在存储库设置中将“构建推送的分支”设置为“开”。
Enabling Bundler caching 点击查看更多
To enable Bundler caching in your .travis.yml
:
language: ruby
cache: bundler
每个构建都在以下虚拟环境之一中运行。
Travis CI支持两种用于Linux构建的虚拟化类型:“完整VM”和“ LXD”。最重要的是,Linux构建可以在多种CPU架构上运行。
-
full VM
This is sudo enabled, full virtual machine per build, that runs Linux
-
LXD 容器
这是启用了sudo的LXD容器构建环境,您可以在容器世界中尽可能接近虚拟机。 Linux环境在无特权的LXD容器中运行。
适用于Objective-C和其他macOS特定项目的macOS环境
运行Windows Server版本1803的Windows环境。
虚拟化环境与操作系统 点击查看更多
-
使用 ubutun Xenial (可供选择的版本请点击查看更多)
dist: xenial
-
使用macos
os: osx
-
使用windows
os: windows
-
多操作系统使用(支持 linux和macos)
os: - linux - osx
要忽略一个操作系统上作业的结果,请将以下内容添加到您的.travis.yml中:
jobs: allow_failures: - os: osx
-
在不同的CPU架构上构建
arch: - amd64 - ppc64le - s390x - arm64 # please note arm64-graviton2 requires explicit virt: [lxd|vm] tag so it's recommended for jobs.include, see below os: linux # different CPU architectures are only supported on Linux