我正在使用Travis CI的项目中工作。我们的某些测试要求在环境变量中定义安全凭据,否则将被跳过。我们正在使用the encrypt
command of the Travis CLI gem为我们的主存储库encrypt
定义一个secure environment variable。此变量包含在我们的owner/Project
文件中,如下所示:
.travis.yml
[env:
secure: "av9hxTZp/Dhe9xAOq6WlhTNDoWjjczN3lFanG6h/3h4kW7DsxhfXMRA96z6MambbC6c9ARFiwsQ24NeCAfPQ1m6r9uZwNkusqnRDOwZQeVQcmopnoNNG4Kd/9oclIVgsAlSG6WfhkyQPUG2p7PkOvxFV4/YjDSViYDR3eoih3JA="
已使用我们的travis encrypt
的私钥对这些变量进行了加密,并且Travis为该存储库成功运行了凭据测试。
但是我们还有另一个存储库owner/Project
,它也用于开发。当Travis在该存储库中运行时,安全环境变量不可用,并且凭证测试将被跳过。
我用contributor/Project
加密了travis encrypt
的一组凭据,并试图像这样将其添加到contributor/Project
:
.travis.yml
这导致Travis运行了两个不同版本的构建。一个尝试使用每组安全凭证。由于对于给定的存储库只有一组有效,因此这将导致测试套件运行两次,一次使用凭据,一次不使用。 env:
- secure: "av9hxTZp/Dhe9xAOq6WlhTNDoWjjczN3lFanG6h/3h4kW7DsxhfXMRA96z6MambbC6c9ARFiwsQ24NeCAfPQ1m6r9uZwNkusqnRDOwZQeVQcmopnoNNG4Kd/9oclIVgsAlSG6WfhkyQPUG2p7PkOvxFV4/YjDSViYDR3eoih3JA="
- secure: "TcOCPDytGQpQgiP4w4LRdLXn+pUvhf5SjJF4J3TXjaPUCfomNfod2WTZn3v4WBR2kg3UCaeqFo2BmGUdwCdPbrAZ3cF2W749HLNU0Z2zxFWru5W+GAGgUi2FXIzzjF+U8Hb/2fLZ6GoUiSlNzVHKo/+kvLDAyuGnGFwfH7dpEb8="
。
此额外的版本既浪费又不必要。如果测试在没有安全凭证集可用的环境中运行(例如来自分叉的拉取请求),则测试套件将在没有凭证的情况下运行两次。添加更多的凭据集将更加糟糕。您将为每个凭证版本拥有多个冗余的非凭证版本。
如何在单个Travis配置中为多个存储库定义安全的环境变量,而又不引起额外的构建?
the matrix
key, which defines multiple variations of a build相反,我需要在matrix
密钥下指定安全凭据,以便将它们全部应用于每个构建:
效果很好Travis将尝试在单个构建中使用每个安全变量。它只能解码和使用适合于存储库和构建条件的一个(或不使用)。这样,您就可以为单个Travis配置为任意数量的存储库添加安全的环境变量。
env: matrix: - secure: "TcOCPDytGQpQgiP4w4LRdLXn+pUvhf5SjJF4J3TXjaPUCfomNfod2WTZn3v4WBR2kg3UCaeqFo2BmGUdwCdPbrAZ3cF2W749HLNU0Z2zxFWru5W+GAGgUi2FXIzzjF+U8Hb/2fLZ6GoUiSlNzVHKo/+kvLDAyuGnGFwfH7dpEb8=" - secure: "av9hxTZp/Dhe9xAOq6WlhTNDoWjjczN3lFanG6h/3h4kW7DsxhfXMRA96z6MambbC6c9ARFiwsQ24NeCAfPQ1m6r9uZwNkusqnRDOwZQeVQcmopnoNNG4Kd/9oclIVgsAlSG6WfhkyQPUG2p7PkOvxFV4/YjDSViYDR3eoih3JA="