YAML检查param是否存在

时间:2016-12-13 17:16:19

标签: python yaml travis-ci

我在Python应用程序测试中有一个travis-ci的.yml文件:

...
matrix:
 include:
  - env: BUILD_DOCS=true
    python: '2.7'
before_install:
- test -z "$BUILD_DOCS" || openssl aes-256-cbc -K $encrypted_key -iv $encrypted_iv
  -in keypair.enc -out ~/.ssh/id_rsa -d
- test -z "$BUILD_DOCS" || chmod 600 ~/.ssh/id_rsa

这在原始存储库中的GitHub上触发构建时有效。但是,当我从我的fork发出一个pull请求时,由于我的fork无法访问那些加密的params,它会中断。

我需要做的就是添加一个检查是否存在,如果它们不存在则跳过该部分。但我不知道怎么做,这是我第一次打开YAML文件。我试过谷歌搜索,但没有找到解决方案。

这是错误:

$ test -z "$BUILD_DOCS" || openssl aes-256-cbc -K $encrypted_key -iv $encrypted_iv -in keypair.enc -out ~/.ssh/id_rsa -d
iv undefined

The command "test -z "$BUILD_DOCS" || openssl aes-256-cbc -K $encrypted_key -iv $encrypted_iv -in keypair.enc -out ~/.ssh/id_rsa -d" failed and exited with 1 during .

从我到目前为止所听到的内容来看,这应该很容易解决,但我不知道语法。有人有这方面的经验吗?

1 个答案:

答案 0 :(得分:0)

如果一个不同的困扰的灵魂在将来遇到这个问题,我今天设法解决了。

Travis有一个方便变量,可以帮助:

TRAVIS_PULL_REQUEST is set to the pull request number if the current job is a pull request build, or false if it’s not.

所以,我已将其与ifyml文件中使用的if语法一起使用。我不知道这是否是最佳解决方案,但它对我有用。

这是我更改的代码:

matrix:
  include:
   - env: BUILD_DOCS=true
     python: '2.7'
 before_install:
- if [ $TRAVIS_PULL_REQUEST == 'false' ]; then
    test -z "$BUILD_DOCS" || openssl aes-256-cbc -K $encrypted_key -iv $encrypted_iv -in keypair.enc -out ~/.ssh/id_rsa -d;
    test -z "$BUILD_DOCS" || chmod 600 ~/.ssh/id_rsa;
  fi