2016-06-24 9 views
19

Ich benutze GitLab CI, um eine C# -Lösung zu erstellen und versuche, einige Buildartefakte von einer Buildstufe zur nächsten zu übertragen.Wie Sie Unterordner für Platzhalterartefakte in .gitlab-ci.yml angeben?

Das Problem ist, dass die Artefakte nicht in einem einzigen Verzeichnis, sondern in verschiedenen Unterverzeichnissen liegen, die jedoch alle die gleichen Namen haben bin/ oder obj/.

Mein .gitlab-ci.yml sieht wie folgt aus:

... 
stages: 
    - build 
    - test 

build: 
    stage: build 
    script: 
    CALL %MSBuild% ... 
    artifacts: 
    paths: 
     - /**/bin/ 
     - /**/obj/ 
    expire_in: 6 hrs 

test: 
    stage: test 
    dependencies: 
    - build 
    ... 

Ich habe versucht, die Artefakte mit unterschiedlicher Weise zu erfassen, z.B.

**/bin/ 
**/obj/ 

(ungültige Syntax) oder

.*/bin/ 
.*/obj/ 

aber, dass man keine Artefakte gefunden haben, ebenso wie /**/bin/ und /**/obj/, mir geben folgende Fehler:

Uploading artifacts... 
WARNING: /**/bin/: no matching files 
WARNING: /**/obj/: no matching files 

Wie kann Ich spezifiziere ein Unterverzeichnismuster, das nach Artefakten durchsucht werden soll? Oder ist das überhaupt möglich?

einfach

artifacts: 
    untracked: true 

verwendet, ist keine Option, weil ein riesigen untracked packages/ Unterverzeichnis, das wegen eines zu großen Archiv Artefakte laden scheitern Ursachen:

Uploading artifacts... 
untracked: found 4513 files       
ERROR: Uploading artifacts to coordinator... too large archive id=36 responseStatus=413 Request Entity Too Large token=... 
FATAL: Too large 

Antwort

24

Die gitlab-ci-multi-runner build Runner wird unter Verwendung von Go erstellt und verwendet derzeit filepath.Glob(), um nach bestimmten Artefakten in file_archiver.go zu suchen.

Go scheint die Doppelstern-Glob-Expression nicht zu unterstützen, wie in einer anderen Frage here bei SO diskutiert. So scheint es keine Möglichkeit zu geben, einen voll ausgestatteten **/bin Ausdruck im Moment zu verwenden.

Weil aber alle meine Projekte auf dem gleichen Niveau unterhalb der Lösung Wurzel befinden, ist es noch möglich, etwas zu verwenden, wie

artifacts: 
    paths: 
    - "*/bin" 
    - "*/obj" 

Beachten Sie, dass die Anführungszeichen (") scheinen erforderlich zu sein, sowie nein Nachlaufweg Trennzeichen am Ende.

Es soll auch möglich sein, explizit mehr Ebene hinzufügen, indem mehr Globbing Ausdrücke Hinzufügen (wie here beschrieben):

paths: 
    ... 
    - "*/obj" 
    - "*/*/bin" 
    - "*/*/obj" 
    ... 
+0

ich um den Weg kein Glück mit den doppelten Anführungszeichen hatte. Es funktionierte ohne sie. Auch die [doc] (https://docs.gitlab.com/ce/ci/yaml/README.html#artifacts) erwähnt nur Beispiele ohne Anführungszeichen. – TmTron

+1

Ich habe festgestellt, dass die Anführungszeichen notwendig sind. – griest

+0

Seltsam, dass Zitate wichtig sind. Aber soweit ich weiß, ist das Zitieren Teil der YAML-Syntax, also bezweifle ich, dass der Läufer es mit den Zitaten sieht. Ich frage mich, warum für eine Person Zitate gebraucht wurden und für eine andere keine Anführungszeichen. – nafg

Verwandte Themen