在安装travis之前无法获得env变量值

问题描述:

我在不同版本的travis中有一个矩阵。这个想法是使用一个CLANG_SRC_VER变量。这个变量是通过一个travis矩阵设置的,并且在before_install部分中,我启动一个基于变量CLANG_SRC_VER的值来安装软件包的脚本。在安装travis之前无法获得env变量值

的travis.yml看起来是这样的:

matrix: 
    include: 
    - os: linux 
     dist: trusty 
     sudo: required 
     rvm: 2.1 
     env: 
     - CLANG_SRC_VER='35' 

... 

    - os: linux 
     dist: trusty 
     sudo: required 
     rvm: ruby-head 
     env: 
     - CLANG_SRC_VER='35' 

    - os: linux 
     dist: trusty 
     sudo: required 
     rvm: 2.1 
     env: 
     - CLANG_SRC_VER='37' 

    - os: linux 
     dist: trusty 
     sudo: required 
     rvm: 2.2 
     env: 
     - CLANG_SRC_VER='37' 
... 

    - os: linux 
     dist: trusty 
     sudo: required 
     rvm: 2.1 
     env: 
     - CLANG_SRC_VER='36' 

    - os: linux 
     dist: trusty 
     sudo: required 
     rvm: 2.2 
     env: 
     - CLANG_SRC_VER='36' 
... 
before_install: 
    - sudo ./tools/travis_before_install.sh 
    - gem install bundler 

script: 
    - bundle exec tools/travis_build_gem.sh 
    - bundle exec gem install --debug --verbose --local clangc-0.0.1.gem 
    - ./tools/travis_run_tests.sh 

而且travis_before_install.sh看起来像这样:

#!/bin/bash 

case $CLANG_SRC_VER in 
    35) 
    echo "$CLANG_SRC_VER" 
    apt-get update -qq 
    echo "install the libs for $CLANG_SRC_VER" 
    apt-get install -qq llvm-dev libclang-3.5-dev libclang1-3.5 libclang-common-3.5-dev build-essential ruby-dev 
    echo "add symbolic link for $CLANG_SRC_VER" 
    ln -s /usr/lib/x86_64-linux-gnu/libclang-3.5.so /usr/lib/x86_64-linux-gnu/libclang.so;; 
    36) 
    echo "${CLANG_SRC_VER}" 
    apt-get update -qq 
    echo "install the libs for $CLANG_SRC_VER" 
    apt-get install -qq llvm-dev libclang-3.6-dev libclang1-3.6 libclang-common-3.6-dev build-essential ruby-dev 
    echo "add symbolic link for $CLANG_SRC_VER" 
    ln -s /usr/lib/x86_64-linux-gnu/libclang-3.6.so /usr/lib/x86_64-linux-gnu/libclang.so;; 
    37) 
    echo "$CLANG_SRC_VER" 
    apt-get update -qq 
    echo "install the libs for $CLANG_SRC_VER" 
    apt-get install -qq llvm-dev libclang-3.7-dev libclang1-3.7 libclang-common-3.7-dev build-essential ruby-dev 
    echo "add symbolic link for $CLANG_SRC_VER" 
    ln -s /usr/lib/x86_64-linux-gnu/libclang-3.7.so /usr/lib/x86_64-linux-gnu/libclang.so;; 
    38) 
    echo "$CLANG_SRC_VER" 
    apt-get update -qq 
    echo "install the libs for $CLANG_SRC_VER" 
    apt-get install -qq llvm-dev libclang-3.8-dev libclang1-3.8 libclang-common-3.8-dev build-essential ruby-dev 
    echo "add symbolic link for $CLANG_SRC_VER" 
    ln -s /usr/lib/x86_64-linux-gnu/libclang-3.8.so /usr/lib/x86_64-linux-gnu/libclang.so;; 
    *) 
    echo "$CLANG_SRC_VER" 
    apt-get update -qq 
    echo "install the libs for $CLANG_SRC_VER" 
    apt-get install -qq llvm-dev libclang-3.5-dev libclang1-3.5 libclang-common-3.5-dev build-essential ruby-dev 
    echo "add symbolic link for $CLANG_SRC_VER" 
    ln -s /usr/lib/x86_64-linux-gnu/libclang-3.5.so /usr/lib/x86_64-linux-gnu/libclang.so;; 
esac 

的问题是,在基体中的每种情况下,CLANG_SRC_VER是空的。 我检查了特拉维斯输出中,我有这条线表明这些变量被设置和导出:

Setting environment variables from .travis.yml 
$ export CLANG_SRC_VER='37' 

很容易,在travis.yml我只是改变这一行:

sudo ./tools/travis_before_install.sh 

sudo CLANG_SRC_VER=$CLANG_SRC_VER ./tools/travis_before_install.sh 

为了在sudo环境中定义变量。