2016-08-05 45 views
4

以下原因使得travis根本無法構建。當我嘗試驗證travis.yml文件時,它抱怨if語句上方的行在第3列缺少-字符,但該錯誤與下面的if語句有關。有條件的運行腳本在travis.yml中不起作用,爲什麼?

我是否必須將if語句移出到腳本中?

# Deploy 
after_success: 
    - ./tools/docker-push-container.sh 
    - if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then 
     ./.travis/success_message.sh 
    fi 

回答

9

您對YAML語法做出了一些假設,導致了您的問題。如果「exend」通過縮進以後的行,其YAML的,就像這樣:

- The quick brown fox 
    jumped over the 
    lazy dog. 

正是像你,而不是寫這個:

- The quick brown fox jumped over the lazy dog. 

這意味着你的彈片,你」 VE寫成:

- if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then 
     ./.travis/success_message.sh 
    fi 

實際上就變成了:

if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then ./.travis/success_message.sh fi 

如果你嘗試運行shell那行,你會得到:

sh: -c: line 1: syntax error: unexpected end of file 

如果你希望在你的YAML文檔中的多行shell腳本,你最好的選擇可能是使用逐字塊運營商,|,像這樣:

- | 
    if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then 
     ./.travis/success_message.sh 
    fi 

這將導致,如預期,在:

if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then 
    ./.travis/success_message.sh 
fi 

或者,你可以強制牛逼正確使用分號:

- if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then 
     ./.travis/success_message.sh; 
    fi 

注意終端fi前新;。這導致:

if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then ./.travis/success_message.sh; fi 

...這是完全有效的shell語法。

0

我試圖通過上述溶液larsks但是,它並沒有爲我工作,可能是因爲在bash當您使用&&||你需要單獨的條件。

我有如下所示(按照上述溶液)

- if [ $TRAVIS_PULL_REQUEST == false && $TRAVIS_BRANCH == "development" ]; then 
     echo "# Bump version and flyway migrate db"; 
    else 
     echo "Skip version increment!"; 
    fi 

我在Travis Lint還檢查.travis.yml,它顯示了作爲有效的,但是,根據打壞上述可以分離以下,也提到在這個SO Question,我改爲以下

- if [ $TRAVIS_PULL_REQUEST == false ] && [ $TRAVIS_BRANCH == "development" ]; then 
      echo "# Bump version and flyway migrate db"; 
     else 
      echo "Skip version increment!"; 
     fi 

而且特拉維斯建立工作。這樣的意義,因爲上面是使用& &有效方式||在bash。公正地分享萬一別人遇到類似的問題。

0

沒有建議的解決方法爲我工作,我用這個來代替:

  • 如果[[( 「$ TRAVIS_OS_NAME」 == 「OSX」)& &( 「$ TOXENV」 == 「py36」 )]];然後沖泡更新;科幻
相關問題