🏳️Simple, Flexible, Trustworthy CI/CD Tools - Travis CI

Website favicontravis-ci.org

Travis CI is the most simple and flexible ci/cd tool available today. Find out how Travis CI can help with continuous integration and continuous delivery.

[](/)

[Sign Up](https://app.travis-ci.com/signup?selectedPlanId=monthly_usage_plan_35k_credits)

[Sign In](https://app.travis-ci.com/signin)

[](https://www.travis-ci.com/)

[Get Free Trial](https://app.travis-ci.com/signup?selectedPlanId=starter_plan)

[Sign In](https://app.travis-ci.com/signin)

How developers build simple, trustworthy CI/CD pipelines

========================================================

Join hundreds of thousands who define tests and deployments in minutes, then scale up simply with parallel or multi-environment builds using Travis CI’s precision syntax—all designed with the developer experience in mind.

[Sign Up](https://app.travis-ci.com/signup?selectedPlanId=monthly_usage_plan_35k_credits)

[Contact Sales](/talk-to-sales/)

Where developers trust Travis CI with testing and automation

------------------------------------------------------------

Build your new CI/CD pipeline in 20 minutes or less

---------------------------------------------------

Whether starting from scratch or rebuilding a rich ecosystem, get pipelines flowing with preconfigured environments for your language and a minimal syntax with up to 50% less YAML or JSON.

Python JavaScript (Node.js) Java C/C++ PHP Rust Go C# Ruby 30+ Others Supported

Python JavaScript (Node.js) Java C/C++ PHP Rust Go C# Ruby 30+ Others Supported

language: python  

python:  

  - "3.7"  

  - "3.8"  

  - "3.9"  

\# Command to install dependencies  

install:  

  - pip install -r requirements.txt  

  - pip install pytest pytest-cov  

\# Command to run tests  

script:  

  - pytest --cov=./ tests/  

\# Specify branches to build  

branches:  

  only:  

    - main  

    - develop  

\# Cache pip dependencies  

cache: pip  

\# Run jobs in parallel  

jobs:  

  include:  

    - name: "Lint"  

      python: "3.9"  

      before\_script:  

        - pip install flake8  

      script:  

        - flake8 .  

    - name: "Docs"  

      python: "3.9"  

      before\_script:  

        - pip install sphinx  

      script:  

        - sphinx-build -b html docs docs/\_build  

after\_success:  

  - pip install coveralls  

  - coveralls  

notifications:  

  email:  

    on\_success: never  

    on\_failure: always

language: node\_js  

node\_js:  

  - "12"  

  - "14"  

  - "16"  

\# Specify the operating system  

os:  

  - linux  

  - osx  

\# Cache dependencies  

cache:  

  directories:  

    - node\_modules  

\# Install dependencies  

install:  

  - npm ci  

\# Run tests  

script:  

  - npm run test  

  - npm run build  

\# Run jobs in parallel  

jobs:  

  include:  

    - stage: lint  

      node\_js: "16"  

      script: npm run lint  

    - stage: coverage  

      node\_js: "16"  

      script: npm run test:coverage  

\# Deploy to npm  

deploy:  

  provider: npm  

  email: "[email protected]"  

  api\_key: $NPM\_TOKEN  

  on:  

    tags: true  

    branch: main  

\# Notifications  

notifications:  

  email:  

    on\_success: never  

    on\_failure: always  

  slack:  

    rooms:  

      - secure: "encrypted-slack-webhook-url"

language: java  

jdk:  

  - openjdk11  

  - openjdk14  

\# Cache dependencies  

cache:  

  directories:  

    - $HOME/.m2  

\# Build stages  

stages:  

  - test  

  - name: deploy  

    if: branch = main  

jobs:  

  include:  

    - stage: test  

      name: "Unit Tests"  

      script: mvn test  

    - stage: test  

      name: "Integration Tests"  

      script: mvn verify -Pintegration-tests  

    - stage: deploy  

      name: "Deploy to Staging"  

      script: mvn deploy -Pstaging  

\# Notifications  

notifications:  

  email:  

    recipients:  

      - [email protected]  

    on\_success: change  

    on\_failure: always  

\# Before install steps  

before\_install:  

  - chmod +x mvnw  

\# Main build script  

script:  

  - ./mvnw clean install  

\# After success steps  

after\_success:  

  - bash <(curl -s https://codecov.io/bash)  

\# Only build these branches  

branches:  

  only:  

    - main  

    - develop

language: cpp  

compiler:  

  - gcc  

  - clang  

before\_install:  

  - sudo apt-get update  

  - sudo apt-get install -y cmake  

script:  

  - mkdir build  

  - cd build  

  - cmake ..  

  - make  

  - make test  

notifications:  

  email: false

language: php  

php:  

  - 7.4  

  - 8.0  

  - 8.1  

before\_script:  

  - composer self-update  

  - composer install --no-interaction  

script:  

  - vendor/bin/phpunit  

  - vendor/bin/phpcs  

cache:  

  directories:  

    - $HOME/.composer/cache  

notifications:  

  email: false

language: rust  

rust:  

  - stable  

  - beta  

  - nightly  

matrix:  

  allow\_failures:  

    - rust: nightly  

  fast\_finish: true  

cache: cargo  

before\_script:  

  - rustup component add clippy  

script:  

  - cargo build --verbose  

  - cargo test --verbose  

  - cargo clippy -- -D warnings  

notifications:  

  email: false

language: go  

go:  

  - 1.16.x  

  - 1.17.x  

  - 1.18.x  

  - tip  

matrix:  

  allow\_failures:  

    - go: tip  

  fast\_finish: true  

before\_install:  

  - go get -t -v ./...  

script:  

  - go test -race -coverprofile=coverage.txt -covermode=atomic  

  - go vet ./...  

  - diff -u <(echo -n) <(gofmt -d .)  

after\_success:  

  - bash <(curl -s https://codecov.io/bash)  

notifications:  

  email: false

language: csharp  

mono: none  

dotnet: 6.0.100  

install:  

  - dotnet restore  

script:  

  - dotnet build  

  - dotnet test  

notifications:  

  email: false  

branches:  

  only:  

    - main  

    - develop  

cache:  

  directories:  

    - $HOME/.nuget/packages  

language: ruby  

rvm:  

  - 2.6  

  - 2.7  

  - 3.0  

install:  

  - bundle install  

script:  

  - bundle exec rake test  

after\_success:  

  - bundle exec rake coveralls:push  

notifications:  

  email:  

    recipients:  

      - [email protected]  

    on\_success: always  

    on\_failure: always

### Explore more with [Travis CI's Quickstart](/quickstart/) 

A precision tool for every CI/CD demand

---------------------------------------

Travis CI elegantly compacts all your testing automation into one minimal Configuration as Code file for a true developer experience. Simple syntax and effortless extensibility.

Build matrix Parallel builds Integrations Notifications Build Stages and Conditionals Multiple OSs and Architectures

Build matrix Parallel builds Integrations Notifications Build Stages and Conditionals Multiple OSs and Architectures

language: python  

python:  

  - "3.7"  

  - "3.8"  

  - "3.9"  

env:  

  - DJANGO\_VERSION=2.2  

  - DJANGO\_VERSION=3.0  

  - DJANGO\_VERSION=3.1  

matrix:  

  include:  

    - python: "3.9"  

      env: DJANGO\_VERSION=3.2  

  exclude:  

    - python: "3.7"  

      env: DJANGO\_VERSION=3.1  

  allow\_failures:  

    - python: "3.9"  

      env: DJANGO\_VERSION=3.2  

before\_install:  

  - pip install -U pip  

  - pip install -U setuptools  

  - pip install -q Django==$DJANGO\_VERSION  

install:  

  - pip install -r requirements.txt  

script:  

  - python manage.py test  

after\_success:  

  - coveralls  

notifications:  

  email: false

Run tests against different versions of your runtimes or dependencies—or even multiple languages—for comprehensive automation and absolute quality guarantees on your way to production.

[Learn more](https://config.travis-ci.com/explore)

language: python  

python:  

  - "3.8"  

services:  

  - mongodb  

  - redis  

  - mysql  

env:  

  - DB=mongodb  

  - DB=redis  

  - DB=mysql  

before\_script:  

  - if \[\[ "$DB" == "mongodb" \]\]; then mongo mydb\_test   

\--eval 'db.createUser({user:"travis",pwd:"test",roles:  

\["readWrite"\]});'; fi - if \[\[ "$DB" == "mysql" \]\];   

then mysql -e 'CREATE DATABASE IF NOT EXISTS mydb\_test;  

'; fi  

script:  

  - if \[\[ "$DB" == "mongodb" \]\]; then python   

test\_mongodb.py; fi  

  - if \[\[ "$DB" == "redis" \]\]; then python   

test\_redis.py; fi  

  - if \[\[ "$DB" == "mysql" \]\]; then python   

test\_mysql.py; fi

Quickly split complex operations, like unit and integration tests, into multiple jobs that give you faster visual feedback on code quality and results—stop waiting on your pipeline to finish and get back to your IDE.

[Learn more](https://docs.travis-ci.com/user/speeding-up-the-build)

language: python  

python:  

  - "3.8"  

\# Install dependencies  

install:  

  - pip install -r requirements.txt  

\# Run tests  

script:  

  - pytest  

\# Integration with Slack for notifications  

notifications:  

  slack: your-slack-workspace:your-slack-token  

\# Integration with Codecov for code coverage reports  

after\_success:  

  - pip install codecov  

  - codecov  

\# Integration with GitHub Pages for documentation deployment  

deploy:  

  provider: pages  

  skip\_cleanup: true  

  github\_token: $GITHUB\_TOKEN  

  on:  

    branch: main

Enable the must-haves, like build status images, static code analysis, and key management without wasting time on needlessly complex glue. For everything else, the Travis CI API has your back.

[Learn more](https://docs.travis-ci.com/user/notifications/)

language: python  

python:  

  - "3.8"  

script:  

  - python -m pytest tests/  

notifications:  

  email:  

    recipients:  

      - [email protected]  

    on\_success: change  

    on\_failure: always  

  slack:  

    rooms:  

      - secure: "encrypted-slack-webhook-url"  

    on\_success: always  

    on\_failure: always  

    template:  

      - "Build <%{build\_url}|#%{build\_number}>  

 (<%{compare\_url}|%{commit}>) of %{repository\_slug}  

@%{branch} by %{author} %{result} in %{duration}"  

  webhooks:  

    urls:  

      - https://webhook.site/your-unique-id  

    on\_success: change  

    on\_failure: always  

  irc:  

    channels:  

      - "irc.freenode.org#myproject"  

    template:  

      - "%{repository} (%{commit}) : %{message}"  

      - "Build details: %{build\_url}"  

  pushover:  

    api\_key: "pushover-api-key"  

    users:  

      - "pushover-user-key"  

    template: "%{repository} (%{commit}) :   

%{message} - %{duration}"  

after\_failure:  

  - cat /home/travis/build/your-github-username/  

your-repo-name/tests/test-suite.log

Switch on highly customizable notifications to email, Slack, Opsgenie, any webhook destination, and many more. All you need to bring is your API token and as little as two fresh lines of YAML.

[Learn more](https://docs.travis-ci.com/user/notifications/)

language: python  

python:  

  - "3.8"  

stages:  

  - test  

  - name: deploy  

    if: branch = main  

jobs:  

  include:  

    - stage: test  

      name: "Unit Tests"  

      script: python -m unittest discover tests/unit  

    - stage: test  

      name: "Integration Tests"  

      script: python -m unittest discover tests/integration  

    - stage: deploy  

      name: "Deploy to Production"  

      script:   

        - pip install awscli  

        - aws s3 sync . s3://my-bucket/ --delete  

env:  

  global:  

    - PYTHONPATH=$PYTHONPATH:$TRAVIS\_BUILD\_DIR  

before\_install:  

  - pip install -r requirements.txt  

branches:  

  only:  

    - main  

    - develop  

notifications:  

  email:  

    on\_success: never  

    on\_failure: always

Infinitely organize complex CI/CD pipelines into groups that only run if other parallel jobs have been completed successfully. Catch failures faster or layer in smart conditionals to catch edge cases other CI/CD tools lose track of.

[Learn more](https://docs.travis-ci.com/user/build-stages)

language: generic  

jobs:  

  include:  

    # Linux builds  

    - os: linux  

      arch: amd64  

    - os: linux  

      arch: arm64  

    # macOS builds  

    - os: osx  

      osx\_image: xcode12.5  

    # Windows builds  

    - os: windows  

script:  

  - echo "Running tests on $TRAVIS\_OS\_NAME $TRAVIS\_CPU\_ARCH"  

  - # Add your build and test commands here  

notifications:  

  email: false

Test your code in parallel on more flexible combinations than any other CI/CD tool. Mix-and-match  amd64, ppc64le, s390x, arm64, and arm64-graviton2 CPUs with Linux, macOS, and Windows environments to make your builds edge case-free.

[Learn more](https://docs.travis-ci.com/user/multi-os/)

.travis.yaml  

language: python  

python:  

\- "3.8"  

install:  

\- pip install -r requirements.txt  

script:  

\- python3 pytest.py

.travis.yaml  

language: python  

python:  

\- "3.8"  

install:  

\- pip install -r requirements.txt  

script:  

\- python3 pytest.py

.travis.yaml  

language: python  

python:  

\- "3.8"  

install:  

\- pip install -r requirements.txt  

script:  

\- python3 pytest.py

.travis.yaml  

language: python  

python:  

\- "3.8"  

install:  

\- pip install -r requirements.txt  

script:  

\- python3 pytest.py

The most resilient name in CI/CD  

-----------------------------------

Others commodify CI/CD, building overly complex DevSecOps Platforms. We remain steadfast in our original mission to help developers conquer their CI/CD pipelines faster, more fluently, and, dare we say… with more fun?

### **Why pay for CI/CD**

That’s a tough but fair question. We’re still delivering the simplest and most extensible CI/CD for developers who want precision tools, not bloated platforms. 

Travis CI uniquely helps you take ownership of code quality, collaborate better with your peers, and take ownership of the results you create together.

[Why Travis CI](/why-travis-ci/)

### **Our security-forward promises**

GDPR and PrivacyShield compliance. Build isolation to prevent interference. Clean VMs with _every_ build. 

Plus, easy extensibility for you to protect your software supply chain with our HashiCorp Vault integration, collaborator management, scoped credentials, signed artifacts, and much more.

[Read On](/security/)

### **Engineering-driven customer support**

Our CI/CD experts are here to help. Have a question before you jump in, or want to hear about Travis CI Enterprise?

[Contact Sales](/talk-to-sales/)

### **A genuine community**

Whether you need tips on extending your pipeline or code examples building a custom integration with the API, our community of CI/CD experts always steps up.

[Join Your Peers](https://travis-ci.community/)

### Simple to start. Intuitive to extend.  

Developed upon by hundreds of thousands

[Sign Up](https://app.travis-ci.com/signup?selectedPlanId=monthly_usage_plan_35k_credits)

[Contact Sales](/talk-to-sales/)

[Product](/product/) [Why Travis CI](/why-travis-ci/) [Server](/enterprise/)

[Pricing](/pricing/)

Tips, Promotions and Exclusive Offers: Get the Travis CI Newsletter

Subscribe  

[Developers](/quickstart/) [Security](/security/) [Documentation](https://docs.travis-ci.com/) [API Reference](https://developer.travis-ci.com) [Changelog](https://changelog.travis-ci.com/) [Build Explorer](https://config.travis-ci.com/)

[Resources](/resources/) [Quickstart](/quickstart/) [Support](/resources/) [Blog](/blog/) [FAQ](/faq/) [Education](/education/) [Travis CI vs Jenkins](/travis-ci-vs-jenkins/)

[Company](/about-us/) [About Us](/about-us/) [Contact Sales](/talk-to-sales/) [Terms & Conditions](https://www.ideracorp.com/Legal/Terms-of-Use) [Privacy](https://www.ideracorp.com/Legal/PrivacyPolicy)

© Copyright 2024, All Rights Reserved

[Product](/product/) [Why Travis CI](/why-travis-ci/) [Server](/enterprise/) [Pricing](/pricing/)

[Developers](/quickstart/) [Security](/security/) [Documentation](https://docs.travis-ci.com/) [API Reference](https://developer.travis-ci.com) [Changelog](https://changelog.travis-ci.com/) [Build Explorer](https://config.travis-ci.com/)

[Resources](/resources/) [Quickstart](/quickstart/) [Support](/resources/) [Blog](/blog/) [FAQ](/faq/) [Education](/education/) [Travis CI vs Jenkins](/travis-ci-vs-jenkins/)

[Company](/about-us/) [About Us](/about-us/) [Contact Sales](/talk-to-sales/) [Terms & Conditions](https://www.ideracorp.com/Legal/Terms-of-Use) [Privacy](https://www.ideracorp.com/Legal/PrivacyPolicy)

Travis CI Newsletter

Get Tips, Promotions and Exclusive Offers

Subscribe  

© Copyright 2024, All Rights Reserved

[Product](/product/) [Why Travis](/why-travis-ci/) [Self-Hosted](/enterprise/)

[Pricing](/pricing/)

[Developers](/quickstart/) [Documentation](https://docs.travis-ci.com/) [API Reference](https://developer.travis-ci.com) [Changelog](https://changelog.travis-ci.com/) [Build Explorer](https://config.travis-ci.com/)

[Resources](/resources/) [Quickstart](/quickstart/) [Support](/resources/) [Blog](/blog/) [FAQ](/faq/) [Education](/education/) [Travis CI vs Jenkins](/travis-ci-vs-jenkins/)

[Company](/about-us/) [About Us](/about-us/) [Contact Sales](/talk-to-sale/) [Terms & Conditions](https://www.ideracorp.com/Legal/Terms-of-Use) [Privacy](https://www.ideracorp.com/Legal/PrivacyPolicy)

Tips, Promotions and Exclusive Offers: Get the Travis CI Newsletter

Subscribe  

© Copyright 2024, All Rights Reserved