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

问题描述 投票:9回答:1

我正在使用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配置中为多个存储库定义安全的环境变量,而又不引起额外的构建?

environment-variables travis-ci
1个回答
12
投票
导致额外的构建

the matrix key, which defines multiple variations of a build相反,我需要在matrix密钥下指定安全凭据,以便将它们全部应用于每个构建:

效果很好

env: matrix: - secure: "TcOCPDytGQpQgiP4w4LRdLXn+pUvhf5SjJF4J3TXjaPUCfomNfod2WTZn3v4WBR2kg3UCaeqFo2BmGUdwCdPbrAZ3cF2W749HLNU0Z2zxFWru5W+GAGgUi2FXIzzjF+U8Hb/2fLZ6GoUiSlNzVHKo/+kvLDAyuGnGFwfH7dpEb8=" - secure: "av9hxTZp/Dhe9xAOq6WlhTNDoWjjczN3lFanG6h/3h4kW7DsxhfXMRA96z6MambbC6c9ARFiwsQ24NeCAfPQ1m6r9uZwNkusqnRDOwZQeVQcmopnoNNG4Kd/9oclIVgsAlSG6WfhkyQPUG2p7PkOvxFV4/YjDSViYDR3eoih3JA="

Travis将尝试在单个构建中使用每个安全变量。它只能解码和使用适合于存储库和构建条件的一个(或不使用)。这样,您就可以为单个Travis配置为任意数量的存储库添加安全的环境变量。
© www.soinside.com 2019 - 2024. All rights reserved.