KeyEnvKeyEnv

Travis CI

Load KeyEnv secrets in Travis CI builds.

Travis CI Integration

Load KeyEnv secrets in your Travis CI builds.

Prerequisites

  • Travis CI account connected to your repository
  • KeyEnv service token with read access

Setup

1. Add Your Token

  1. Go to your repository settings in Travis CI
  2. Navigate to Environment Variables
  3. Add KEYENV_TOKEN with your service token
  4. Ensure Display value in build log is OFF

2. Configure .travis.yml

language: node_js
node_js:
  - "20"

before_install:
  - curl -fsSL https://keyenv.dev/install.sh | bash
  - export PATH="$HOME/.keyenv/bin:$PATH"

script:
  - keyenv run -p YOUR_PROJECT_ID -e $TRAVIS_BRANCH -- npm ci
  - keyenv run -p YOUR_PROJECT_ID -e $TRAVIS_BRANCH -- npm test

deploy:
  provider: script
  script: keyenv run -p YOUR_PROJECT_ID -e production -- npm run deploy
  on:
    branch: main

Environment Mapping

Map Travis CI branches to KeyEnv environments:

env:
  global:
    - KEYENV_PROJECT=your-project-id

before_script:
  - |
    case "$TRAVIS_BRANCH" in
      main)
        export KEYENV_ENV=production
        ;;
      staging)
        export KEYENV_ENV=staging
        ;;
      *)
        export KEYENV_ENV=development
        ;;
    esac

script:
  - keyenv run -p $KEYENV_PROJECT -e $KEYENV_ENV -- npm test

Build Stages

stages:
  - test
  - name: deploy
    if: branch = main

jobs:
  include:
    - stage: test
      script:
        - keyenv run -p YOUR_PROJECT_ID -e development -- npm test

    - stage: deploy
      script:
        - keyenv run -p YOUR_PROJECT_ID -e production -- npm run deploy

Pull Secrets to .env File

before_script:
  - keyenv pull -p YOUR_PROJECT_ID -e $KEYENV_ENV -o .env

script:
  - source .env
  - npm test

Matrix Builds

Test across multiple environments:

jobs:
  include:
    - name: "Test Development"
      env: KEYENV_ENV=development
    - name: "Test Staging"
      env: KEYENV_ENV=staging

script:
  - keyenv run -p YOUR_PROJECT_ID -e $KEYENV_ENV -- npm test

Docker Builds

services:
  - docker

script:
  - |
    eval $(keyenv export -p YOUR_PROJECT_ID -e production --format shell)
    docker build \
      --build-arg DATABASE_URL=$DATABASE_URL \
      --build-arg API_KEY=$API_KEY \
      -t myapp:$TRAVIS_COMMIT .

Caching CLI Installation

Speed up builds by caching the CLI:

cache:
  directories:
    - $HOME/.keyenv

before_install:
  - |
    if [ ! -f "$HOME/.keyenv/bin/keyenv" ]; then
      curl -fsSL https://keyenv.dev/install.sh | bash
    fi
  - export PATH="$HOME/.keyenv/bin:$PATH"

Pull Requests

For PR builds, use a development environment:

script:
  - |
    if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
      KEYENV_ENV=development
    else
      KEYENV_ENV=$TRAVIS_BRANCH
    fi
    keyenv run -p YOUR_PROJECT_ID -e $KEYENV_ENV -- npm test

Encrypted Environment Variables

If you prefer to encrypt your token in .travis.yml:

# Install Travis CLI
gem install travis

# Encrypt your token
travis encrypt KEYENV_TOKEN=your-token --add

This adds to your .travis.yml:

env:
  global:
    secure: "encrypted-string..."

Full Example

language: node_js
node_js:
  - "20"

cache:
  directories:
    - node_modules
    - $HOME/.keyenv

env:
  global:
    - KEYENV_PROJECT=your-project-id

before_install:
  - |
    if [ ! -f "$HOME/.keyenv/bin/keyenv" ]; then
      curl -fsSL https://keyenv.dev/install.sh | bash
    fi
  - export PATH="$HOME/.keyenv/bin:$PATH"

before_script:
  - |
    case "$TRAVIS_BRANCH" in
      main) KEYENV_ENV=production ;;
      staging) KEYENV_ENV=staging ;;
      *) KEYENV_ENV=development ;;
    esac
    echo "Using KeyEnv environment: $KEYENV_ENV"

script:
  - keyenv run -p $KEYENV_PROJECT -e $KEYENV_ENV -- npm ci
  - keyenv run -p $KEYENV_PROJECT -e $KEYENV_ENV -- npm test
  - keyenv run -p $KEYENV_PROJECT -e $KEYENV_ENV -- npm run build

deploy:
  provider: script
  script: keyenv run -p $KEYENV_PROJECT -e production -- npm run deploy
  on:
    branch: main
  skip_cleanup: true

Troubleshooting

Token Not Found

Ensure the variable is set in Travis CI settings and is accessible:

script:
  - echo "Token set: $([ -n "$KEYENV_TOKEN" ] && echo 'yes' || echo 'no')"

CLI Installation Fails

Try an alternative installation method:

before_install:
  - npm install -g @keyenv/cli

Secrets Not Loading

Verify the project and environment exist:

script:
  - keyenv whoami
  - keyenv projects list

On this page