首页 > 解决方案 > 未在 Travis CI 上使用 Matrix 时“未设置环境变量”

问题描述

我们正在削减对在 Travis CI 上测试 ARM64的支持。我们也停止使用标准 Matrix 并转而专门使用include:以减少不需要的工作。避免matrix:和使用include:可以节省 25 到 50 个不需要的工作。

更改的测试结果可在此处获得。大约 8 个作业在配置中失败,并出现错误“未设置环境变量”

在此处输入图像描述

我们认为这些工作来自osx_image: xcode10.1. .travis.yml看来不需要的工作是osx_image应用到的结果{Linux,OS X} x {GCC,Clang} x {amd64,arm64}

我们不知道如何停止这些工作或如何解决它们。

我们如何修复“未设置环境变量”失败的作业?


这里是相关的部分.travis.yml

language: cpp

arch:
  - amd64
  - arm64

os:
  - linux
  - osx

osx_image:
  - xcode10.1

dist: xenial
sudo: required

git:
  depth: 5

compiler:
  - clang
  - gcc

env:
  global:
    - BUILD_JOBS=2
    - ANDROID_HOME="$HOME/android-sdk"
    - ANDROID_SDK="$HOME/android-sdk"
    - ANDROID_NDK="$HOME/android-ndk"

jobs:
  include:
    - os: linux
      name: Linux with GCC (all)
      arch: amd64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=all
    - os: linux
      name: Linux with GCC (native)
      arch: amd64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=native
    - os: linux
      name: Linux with GCC (no-asm)
      arch: amd64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=no-asm
    - os: linux
      name: Linux with GCC (debug)
      arch: amd64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=debug
    - os: linux
      name: Linux with GCC (asan)
      arch: amd64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=asan
    - os: linux
      name: Linux with GCC (ubsan)
      arch: amd64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=ubsan
    - os: linux
      name: Linux with GCC (pem)
      arch: amd64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=pem
    - os: linux
      name: Linux with GCC (autotools)
      arch: amd64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=autotools
    - os: linux
      name: Linux with GCC (cmake)
      arch: amd64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=cmake
    - os: linux
      name: Linux with Clang (all)
      arch: amd64
      compiler: clang
      env:
        - BUILD_OS=linux
        - BUILD_MODE=all
    - os: linux
      name: Linux with Clang (native)
      arch: amd64
      compiler: clang
      env:
        - BUILD_OS=linux
        - BUILD_MODE=native
    - os: linux
      name: Linux with Clang (no-asm)
      arch: amd64
      compiler: clang
      env:
        - BUILD_OS=linux
        - BUILD_MODE=no-asm
    - os: linux
      name: Linux with Clang (debug)
      arch: amd64
      compiler: clang
      env:
        - BUILD_OS=linux
        - BUILD_MODE=debug
    - os: linux
      name: Linux with Clang (asan)
      arch: amd64
      compiler: clang
      env:
        - BUILD_OS=linux
        - BUILD_MODE=asan
    - os: linux
      name: Linux with Clang (ubsan)
      arch: amd64
      compiler: clang
      env:
        - BUILD_OS=linux
        - BUILD_MODE=ubsan
    - os: linux
      name: Linux with Clang (pem)
      arch: amd64
      compiler: clang
      env:
        - BUILD_OS=linux
        - BUILD_MODE=pem
    - os: linux
      name: Linux with Clang (autotools)
      arch: amd64
      compiler: clang
      env:
        - BUILD_OS=linux
        - BUILD_MODE=autotools
    - os: linux
      name: Linux with Clang (cmake)
      arch: amd64
      compiler: clang
      env:
        - BUILD_OS=linux
        - BUILD_MODE=cmake
    - os: osx
      name: OS X with Clang (all)
      arch: amd64
      compiler: clang
      env:
        - BUILD_OS=osx
        - BUILD_MODE=all
    - os: osx
      name: OS X with Clang (native)
      arch: amd64
      compiler: clang
      env:
        - BUILD_OS=osx
        - BUILD_MODE=native
    - os: osx
      name: OS X with Clang (no-asm)
      arch: amd64
      compiler: clang
      env:
        - BUILD_OS=osx
        - BUILD_MODE=no-asm
    - os: osx
      name: OS X with Clang (debug)
      arch: amd64
      compiler: clang
      env:
        - BUILD_OS=osx
        - BUILD_MODE=debug
    - os: osx
      name: OS X with Clang (asan)
      arch: amd64
      compiler: clang
      env:
        - BUILD_OS=osx
        - BUILD_MODE=asan
    - os: osx
      name: OS X with Clang (ubsan)
      arch: amd64
      compiler: clang
      env:
        - BUILD_OS=osx
        - BUILD_MODE=ubsan
    - os: osx
      name: OS X with Clang (pem)
      arch: amd64
      compiler: clang
      env:
        - BUILD_OS=osx
        - BUILD_MODE=pem
    - os: osx
      name: OS X with Clang (autotools)
      arch: amd64
      compiler: clang
      env:
        - BUILD_OS=osx
        - BUILD_MODE=autotools
    - os: osx
      name: OS X with Clang (cmake)
      arch: amd64
      compiler: clang
      env:
        - BUILD_OS=osx
        - BUILD_MODE=cmake
    - os: linux
      name: Linux with GCC (all)
      arch: arm64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=all
    - os: linux
      name: Linux with GCC (native)
      arch: arm64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=native
    - os: linux
      name: Linux with GCC (no-asm)
      arch: arm64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=no-asm
    - os: linux
      name: Linux with GCC (debug)
      arch: arm64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=debug
    - os: linux
      name: Linux with GCC (asan)
      arch: arm64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=asan
    - os: linux
      name: Linux with GCC (ubsan)
      arch: arm64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=ubsan
    - os: linux
      name: Linux with GCC (pem)
      arch: arm64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=pem
    - os: linux
      name: Linux with GCC (autotools)
      arch: arm64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=autotools
    - os: linux
      name: Linux with GCC (cmake)
      arch: arm64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=cmake
    - os: linux
      name: Linux with Clang (all)
      arch: arm64
      compiler: clang
      env:
        - BUILD_OS=linux
        - BUILD_MODE=all
    - os: linux
      name: Linux with Clang (native)
      arch: arm64
      compiler: clang
      env:
        - BUILD_OS=linux
        - BUILD_MODE=native
    - os: linux
      name: Linux with Clang (no-asm)
      arch: arm64
      compiler: clang
      env:
        - BUILD_OS=linux
        - BUILD_MODE=no-asm
    - os: linux
      name: Linux with Clang (debug)
      arch: arm64
      compiler: clang
      env:
        - BUILD_OS=linux
        - BUILD_MODE=debug
    - os: linux
      name: Linux with Clang (asan)
      arch: arm64
      compiler: clang
      env:
        - BUILD_OS=linux
        - BUILD_MODE=asan
    - os: linux
      name: Linux with Clang (ubsan)
      arch: arm64
      compiler: clang
      env:
        - BUILD_OS=linux
        - BUILD_MODE=ubsan
    - os: linux
      name: Linux with Clang (pem)
      arch: arm64
      compiler: clang
      env:
        - BUILD_OS=linux
        - BUILD_MODE=pem
    - os: linux
      name: Linux with Clang (autotools)
      arch: arm64
      compiler: clang
      env:
        - BUILD_OS=linux
        - BUILD_MODE=autotools
    - os: linux
      name: Linux with Clang (cmake)
      arch: arm64
      compiler: clang
      env:
        - BUILD_OS=linux
        - BUILD_MODE=cmake
    - os: linux
      name: Android on Linux (armeabi-v7a)
      arch: amd64
      env:
        - BUILD_OS=linux
        - BUILD_MODE=android
        - PLATFORM=armeabi-v7a
    - os: linux
      name: Android on Linux (aarch64)
      arch: amd64
      env:
        - BUILD_OS=linux
        - BUILD_MODE=android
        - PLATFORM=aarch64
    - os: linux
      name: Android on Linux (x86)
      arch: amd64
      env:
        - BUILD_OS=linux
        - BUILD_MODE=android
        - PLATFORM=x86
    - os: linux
      name: Android on Linux (x86_64)
      arch: amd64
      env:
        - BUILD_OS=linux
        - BUILD_MODE=android
        - PLATFORM=x86_64
    - os: osx
      name: iOS on OS X (iPhoneOS)
      arch: amd64
      env:
        - BUILD_OS=osx
        - BUILD_MODE=ios
        - PLATFORM=iPhoneOS
    - os: osx
      name: iOS on OS X (Arm64)
      arch: amd64
      env:
        - BUILD_OS=osx
        - BUILD_MODE=ios
        - PLATFORM=Arm64
    - os: osx
      name: iOS on OS X (WatchOS)
      arch: amd64
      env:
        - BUILD_OS=osx
        - BUILD_MODE=ios
        - PLATFORM=WatchOS
    - os: osx
      name: iOS on OS X (AppleTVOS)
      arch: amd64
      env:
        - BUILD_OS=osx
        - BUILD_MODE=ios
        - PLATFORM=AppleTVOS
    - os: osx
      name: iOS on OS X (iPhoneSimulator)
      arch: amd64
      env:
        - BUILD_OS=osx
        - BUILD_MODE=ios
        - PLATFORM=iPhoneSimulator
    - os: osx
      name: iOS on OS X (WatchSimulator)
      arch: amd64
      env:
        - BUILD_OS=osx
        - BUILD_MODE=ios
        - PLATFORM=WatchSimulator
    - os: osx
      name: iOS on OS X (AppleTVSimulator)
      arch: amd64
      env:
        - BUILD_OS=osx
        - BUILD_MODE=ios
        - PLATFORM=AppleTVSimulator

  allow_failures:
    - os: osx
      name: iOS on OS X (WatchOS)
      env:
        - BUILD_OS=osx
        - BUILD_MODE=ios
        - PLATFORM=WatchOS
    - os: osx
      name: iOS on OS X (iPhoneSimulator)
      env:
        - BUILD_OS=osx
        - BUILD_MODE=ios
        - PLATFORM=iPhoneSimulator

before_install:
  - |
    ...

script:
  - |
    ...

branches:
  ...

notifications:
  ...

标签: travis-ci

解决方案


我们认为这些工作来自 osx_image: xcode10.1 in .travis.yml

这是不正确的。我们删除了全局密钥osx_image,但问题仍然存在。

但是我们仍然不太了解这些工作来自哪里,除了它是matrix:我们试图避免的扩张的副产品。


我们如何修复“未设置环境变量”失败的作业?

修复是摆脱matrix:扩展,但它不是现成的信息。文档中当然没有说明。或者我们在文档中找不到它。

为了避免matrix:扩展,请去掉 , env, arch,os的所有全局键compiler。洞察力是,全局键触发矩阵扩展。矩阵扩展依赖于matrix:jobs:键的存在。

我们生成的 yml 文件如下所示。我们必须手动构建{env} x {arch} x {os} x {compiler}(我们已经在做的)的叉积。

language: cpp
dist: xenial
sudo: required

git:
  depth: 5

jobs:
  include:
    - os: linux
      name: Linux with GCC (all)
      arch: amd64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=all
        - BUILD_JOBS=2
    - os: linux
      name: Linux with GCC (native)
      arch: amd64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=native
        - BUILD_JOBS=2
    - os: linux
      name: Linux with GCC (no-asm)
      arch: amd64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=no-asm
        - BUILD_JOBS=2
    - os: linux
      name: Linux with GCC (debug)
      arch: amd64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=debug
        - BUILD_JOBS=2
    - os: linux
      name: Linux with GCC (asan)
      arch: amd64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=asan
        - BUILD_JOBS=2
    - os: linux
      name: Linux with GCC (ubsan)
      arch: amd64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=ubsan
        - BUILD_JOBS=2
    - os: linux
      name: Linux with GCC (pem)
      arch: amd64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=pem
        - BUILD_JOBS=2
    - os: linux
      name: Linux with GCC (autotools)
      arch: amd64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=autotools
        - BUILD_JOBS=2
    - os: linux
      name: Linux with GCC (cmake)
      arch: amd64
      compiler: gcc
      env:
        - BUILD_OS=linux
        - BUILD_MODE=cmake
        - BUILD_JOBS=2

    ...

jobs:是 的别名matrix:,因此使用jobs.include而不是matrix.include没有预期的效果。另请参阅Travis YML 模式


推荐阅读