2017-04-01 3 views
0

Wenn ich versuche, die Vorlagenvariable zu verwenden, z. {{hostname}} als Teil des Werts, wird es mit doppelten Anführungszeichen umhüllt.So verwenden Sie die YAML-Vorlagenvariable als Teil des Werts im Concourse-CI

Wie füge ich eine Variable ohne Anführungszeichen hinzu?

Beispiel:

--- 
resource_types: 
    - name: maven 
    type: docker-image 
    source: 
     repository: patrickcrocker/maven-resource 
     tag: latest 

resources: 
    - name: maven-snapshot 
    type: maven 
    source: 
     url: http://{{hostname}}:8081/repository/maven-snapshots/ 

    - name: repo 
    type: git 
    source: 
     uri: "[email protected]:foo/bar.git" 
     branch: master{{hostname}} 

Und das Ergebnis für den Befehl fly -t ci set-pipeline --pipeline test --config test.yml --var="hostname=localhost" wie folgt (siehe "localhost"):

resources: 
    resource maven-snapshot has been added: 
    name: maven-snapshot 
    type: maven 
    source: 
     url: http://"localhost":8081/repository/maven-snapshots/ 

    resource repo has been added: 
    name: repo 
    type: git 
    source: 
     branch: master"localhost" 
     uri: [email protected]:foo/bar.git 

resource types: 
    resource type maven has been added: 
    name: maven 
    type: docker-image 
    source: 
     repository: patrickcrocker/maven-resource 
     tag: latest 

Der Grund, warum ich eine 3rd-Party-Maven Ressource enthalten habe ist, dass git resource erlaubt {{}} in der uri nicht, was zu dem Fehler führt:

failed to unmarshal configStructure: yaml: line 17: did not find expected key 

Antwort

1

UPDATE

Ab concourse v3.2.0{{someValue}} Syntax für ((someValue)) veraltet. Neue Syntax wird verstehen, dass Sie versuchen, die Zeichenfolge zu interpolieren und den Wert entsprechend zu platzieren.

Ersetzen {{hostname}} mit ((hostname)) wird Ihr Problem lösen:

resources: 
    - name: maven-snapshot 
    type: maven 
    source: 
     url: http://((hostname)):8081/repository/maven-snapshots/ 

Concourse dies nicht unterstützt. Das Concamre yaml Templating ist sehr primitiv und Sie können keine Variablen in die Mitte von Strings einfügen. Sie müssen Ihren url Parameter als http://localhost:8081/repository/maven-snapshots/ und Ihren Verzweigungsparameter als localmaster oder was auch immer es sein sollte.

Wir wissen, dass dies ein Problem ist und wir arbeiten daran, aber im Moment können Sie Variablen nicht so setzen, wie Sie möchten.

1

Während für diese Funktion von concourse Team warten, habe ich diese kleine ausführbare Datei geschrieben, um das Problem in diesem GitHub Repo zu arbeiten:

https://github.com/sercant/inline-yaml

Ich bereite meine config.yml wie folgt aus:

ftp-username: username 
ftp-password: password 
ftp-uri: 192.168.1.2 
ftp-dir: home/ftp/ 

ftp-uri-combined: ftp://{{ftp-username}}:{{ftp-password}}@{{ftp-uri}}/{{ftp-dir}} 

ftp-uri-combined-html5: {{ftp-uri-combined}}html5 
ftp-uri-combined-android: {{ftp-uri-combined}}android 

und bereitete ein create-pipeline.sh:

#!/usr/bin/env sh 
TEMP=$(mktemp) 

java -jar inline-yaml.jar $3 ${TEMP}; 
fly -t lite set-pipeline -p $2 -c $1 --load-vars-from ${TEMP}; 

rm ${TEMP}; 

Immer, wenn ich eine Pipeline erstellen müssen, ich lief:

./create-pipeline.sh build-plan.yml build-plan-name config.yml 
Verwandte Themen