24

I would like to know how to run an after_success script only for a specific branch.

I am using a custom script to deploy the app after build passes. I would only like to run this when on prod branch.

So far, I have tried the following:

#1

after_success:
  - # some deployment script
  on: prod

#2

branches:
  only:
    - prod
    after_success:
      - # some deployment script
#3

after_success:
  branches:
    only:
      - prod
  - # some deployment script

Any suggestions?

mc9
  • 6,121
  • 13
  • 49
  • 87

2 Answers2

32

I solved it by writing a simple script using TRAVIS_BRANCH environment variable and executed the script in after_success

.travis.yml

after_success:
- ./deploy.sh

deploy.sh

#!/bin/bash
if [ "$TRAVIS_BRANCH" == "prod" ]; then
  // do the deploy
fi
mc9
  • 6,121
  • 13
  • 49
  • 87
  • 2
    Notice that during your deploy.sh script, if a command returns a non zero code, the build will still be marked as a success – Laurent Rivard Sep 13 '16 at 18:01
  • 5
    Remember to make the script executable before_install: - chmod +x deploy.sh – DauleDK Oct 04 '16 at 14:23
  • 6
    **Notice** that this also triggers on pull requests targeting that branch. You may also want to use `TRAVIS_PULL_REQUEST` – zurfyx Jul 13 '17 at 18:28
18

You can also do this by using the script provider in the deploy phase of your build. This approach is a bit cleaner but only allows one command, unlike after_success.

deploy:
  provider: script
  script: # some deployment script
  on:
    branch: prod
ProjectFrank
  • 622
  • 1
  • 6
  • 11