2014-04-30 7 views
7

ich an einem Projekt arbeite, die Travis CI verwendet. Bei einigen unserer Tests müssen sichere Anmeldeinformationen in Umgebungsvariablen definiert sein, andernfalls werden sie übersprungen. Wir verwenden the encrypt command of the Travis CLI gem ein secure environment variable für unsere primäre Repository zu definieren, owner/Project. Diese Variable wird in unserer .travis.yml-Datei enthalten wie folgt:definiert sichere Umgebungsvariablen für mehrere Repositories in einem einzigen .travis.yml

Einzel-Repository-Konfiguration
env: 
    secure: "av9hxTZp/Dhe9xAOq6WlhTNDoWjjczN3lFanG6h/3h4kW7DsxhfXMRA96z6MambbC6c9ARFiwsQ24NeCAfPQ1m6r9uZwNkusqnRDOwZQeVQcmopnoNNG4Kd/9oclIVgsAlSG6WfhkyQPUG2p7PkOvxFV4/YjDSViYDR3eoih3JA=" 

travis encrypt diese Variablen den privaten Schlüssel für unsere owner/Project verwenden, und Travis führt die Berechtigungsnachweis-Tests für das Repository erfolgreich verschlüsselt.

Allerdings haben wir ein anderes Repository, contributor/Project, die auch für die Entwicklung verwendet wird. Wenn Travis in diesem Repository ausgeführt wird, sind die sicheren Umgebungsvariablen nicht verfügbar, und die zertifizierten Tests werden übersprungen.

I verwendet travis encrypt einen Satz von Anmeldeinformationen für contributor/Project zu verschlüsseln, und versuchte, es zu dem .travis.yml wie folgt hinzuzufügen:

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

Das in Travis führte laufen zwei verschiedene Versionen von der Bau. Man versuchte, jeden Satz sicherer Anmeldeinformationen zu verwenden. Da nur ein Satz für ein gegebenes Repository gültig ist, würde dies dazu führen, dass die Testsuite zweimal ausgeführt wird, einmal mit Anmeldeinformationen und einmal ohne. You can see an example build here.

Diese zusätzliche Build ist verschwenderisch und unnötig. Wenn der Test in einer Umgebung ausgeführt wird, in der keine sicheren Anmeldeinformationen verfügbar sind (z. B. eine Pullanforderung von einer Verzweigung), wird die Testsuite zweimal ohne Anmeldeinformationen ausgeführt. Das Hinzufügen weiterer Sätze von Anmeldeinformationen wäre noch schlimmer; Sie haben mehrere redundante, nicht-berechtigte Builds für jeden Credential-Build.

Wie kann ich definieren sichere Umgebungsvariablen für mehrere Repositories in einer einzigen Travis Konfiguration, ohne dass zusätzliche auftreten baut?

Antwort

9

Als ich mehrere sichere Werte direkt unter env definierte, schienen sie so behandelt zu werden, als ob ich the matrix key, which defines multiple variations of a build verwendet hätte. Es war, als ob ich geschrieben hatte:

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

Stattdessen habe ich die sicheren Anmeldeinformationen unter der global Schlüssel angeben müssen, so dass sie alle auf jedem Build angewendet wird:

Works Schön
env: 
    global: 
    - secure: "TcOCPDytGQpQgiP4w4LRdLXn+pUvhf5SjJF4J3TXjaPUCfomNfod2WTZn3v4WBR2kg3UCaeqFo2BmGUdwCdPbrAZ3cF2W749HLNU0Z2zxFWru5W+GAGgUi2FXIzzjF+U8Hb/2fLZ6GoUiSlNzVHKo/+kvLDAyuGnGFwfH7dpEb8=" 
    - secure: "av9hxTZp/Dhe9xAOq6WlhTNDoWjjczN3lFanG6h/3h4kW7DsxhfXMRA96z6MambbC6c9ARFiwsQ24NeCAfPQ1m6r9uZwNkusqnRDOwZQeVQcmopnoNNG4Kd/9oclIVgsAlSG6WfhkyQPUG2p7PkOvxFV4/YjDSViYDR3eoih3JA=" 

Travis versucht jeder der sicheren Variablen in einem einzigen Build zu verwenden. Es kann nur den einen (oder keinen) Code entschlüsseln, der für das Repository und die Build-Bedingungen geeignet ist. You can see an example build here. Auf diese Weise können Sie sichere Umgebungsvariablen für beliebig viele Repositorys zu einer Travis-Konfiguration hinzufügen.

+0

Vielen Dank für diesen einen zu teilen. Ich fühlte mich verzweifelt! – ratiaris

Verwandte Themen