Environment variables 在单个.travis.yml中为多个存储库定义安全环境变量

Environment variables 在单个.travis.yml中为多个存储库定义安全环境变量,environment-variables,travis-ci,Environment Variables,Travis Ci,我正在从事一个使用Travis CI的项目。我们的一些测试要求在环境变量中定义安全凭据,否则将跳过它们。我们正在使用为主存储库定义一个名为所有者/Project。此变量包含在我们的.travis.yml文件中,如下所示: 单个存储库配置 env: 安全:“av9hxTZp/Dhe9xAOq6WlhTNDoWjjczN3lFanG6h/3H4KW7DSXHFXMRA96Z6MAMBBC6C9ARFIWSQ24NECAFPQ1M6R9UZWNKUQNRDOWQEVQCMOPNNG4KD/9oclIV

我正在从事一个使用Travis CI的项目。我们的一些测试要求在环境变量中定义安全凭据,否则将跳过它们。我们正在使用为主存储库定义一个名为
所有者/Project
。此变量包含在我们的
.travis.yml
文件中,如下所示:

单个存储库配置
env:
安全:“av9hxTZp/Dhe9xAOq6WlhTNDoWjjczN3lFanG6h/3H4KW7DSXHFXMRA96Z6MAMBBC6C9ARFIWSQ24NECAFPQ1M6R9UZWNKUQNRDOWQEVQCMOPNNG4KD/9oclIVgsAlSG6WfhkyQPUG2p7PkOvxFV4/YjDSViYDR3eoih3JA=”
travis encrypt
已经使用我们的
所有者/项目的私钥对这些变量进行了加密,并且travis成功地为该存储库运行了认证测试

然而,我们还有另一个存储库,
contributor/Project
,它也用于开发。当Travis在该存储库中运行时,安全环境变量不可用,并且跳过经过认证的测试

我使用
travis encrypt
contributor/Project
的一组凭据进行加密,并尝试将其添加到
.travis.yml
中,如下所示:

导致额外构建
env:
-安全:“av9hxTZp/Dhe9xAOq6WlhTNDoWjjczN3lFanG6h/3H4KW7DSXHFXMRA96Z6MAMBBC6C9ARFIWSQ24NECAFPQ1M6R9UZWNKUQNRDOWQEVQCMOPNNG4KD/9oclIVgsAlSG6WfhkyQPUG2p7PkOvxFV4/YjDSViYDR3eoih3JA=”
-安全:“TcOCPDytGQpQgiP4w4LRdLXn+PUVHF5SJF4J3TXJAPUCFOMNFOD2WTZN3V4WBR2kg3UCAEQFO2BMGudWCDPBrazz3CF2W749HLNU0Z2ZXFWRU5W+GAGgUi2FXIzzjF+U8Hb/2fLZ6GoUiSlNzVHKo/+KVLDAYUGNGFW7DPEB8=”
这导致Travis运行两个不同版本的构建。一个试图使用每组安全凭据。由于只有一个集合对给定的存储库有效,这将导致测试套件运行两次,一次使用凭据,一次不使用凭据

这个额外的构建是浪费和不必要的。如果测试在两组安全凭据都不可用的环境中运行(例如来自fork的pull请求),那么测试套件将在没有凭据的情况下运行两次。添加更多的凭证集会更糟糕;对于每个认证的构建,您将有多个冗余的未经认证的构建


如何在单个Travis配置中为多个存储库定义安全环境变量而不导致额外生成?

当我直接在
env
下定义多个安全值时,它们似乎被视为我使用过的。就好像我写过:

导致额外构建
env:
矩阵:
-安全:“TcOCPDytGQpQgiP4w4LRdLXn+PUVHF5SJF4J3TXJAPUCFOMNFOD2WTZN3V4WBR2kg3UCAEQFO2BMGudWCDPBrazz3CF2W749HLNU0Z2ZXFWRU5W+GAGgUi2FXIzzjF+U8Hb/2fLZ6GoUiSlNzVHKo/+KVLDAYUGNGFW7DPEB8=”
-安全:“av9hxTZp/Dhe9xAOq6WlhTNDoWjjczN3lFanG6h/3H4KW7DSXHFXMRA96Z6MAMBBC6C9ARFIWSQ24NECAFPQ1M6R9UZWNKUQNRDOWQEVQCMOPNNG4KD/9oclIVgsAlSG6WfhkyQPUG2p7PkOvxFV4/YjDSViYDR3eoih3JA=”
相反,我需要在
global
键下指定安全凭据,以便它们都将应用于每个生成:

运行良好
env:
全球的:
-安全:“TcOCPDytGQpQgiP4w4LRdLXn+PUVHF5SJF4J3TXJAPUCFOMNFOD2WTZN3V4WBR2kg3UCAEQFO2BMGudWCDPBrazz3CF2W749HLNU0Z2ZXFWRU5W+GAGgUi2FXIzzjF+U8Hb/2fLZ6GoUiSlNzVHKo/+KVLDAYUGNGFW7DPEB8=”
-安全:“av9hxTZp/Dhe9xAOq6WlhTNDoWjjczN3lFanG6h/3H4KW7DSXHFXMRA96Z6MAMBBC6C9ARFIWSQ24NECAFPQ1M6R9UZWNKUQNRDOWQEVQCMOPNNG4KD/9oclIVgsAlSG6WfhkyQPUG2p7PkOvxFV4/YjDSViYDR3eoih3JA=”

Travis将尝试在单个构建中使用每个安全变量。它将只能解码并使用适合存储库和构建条件的一个(或没有)。通过这种方式,您可以为单个Travis配置添加任意多个存储库的安全环境变量。

感谢您共享此配置。我开始感到绝望了!