2017-11-07 28 views
0

重複部分を含むgitlab-ci yamlファイルがあります。YAMLマージレベル

test:client: 
    before_script: 
    - node -v 
    - yarn install 
    cache: 
    untracked: true 
    key: client 
    paths: 
     - node_modules/ 
    script: 
    - npm test 

build:client: 
    before_script: 
    - node -v 
    - yarn install 
    cache: 
    untracked: true 
    key: client 
    paths: 
     - node_modules/ 
    policy: pull 
    script: 
    - npm build 

私は共通部分を抽出して、これら2つの部分のコンテキストで効率的に再利用できるかどうかを知りたいと思います。

.node_install_common: &node_install_common 
    before_script: 
    - node -v 
    - yarn install 
    cache: 
    untracked: true 
    key: client 
    paths: 
     - node_modules/ 

しかし、本当の問題は:私は、ポリシーを確実にするためにブロックをマージしなければならないのインデントどのレベルで:プルは、キャッシュ部に適用されます。私はそうしようとしました:

test:client: 
    <<: *node_install_common 
    script: 
    - npm test 

test:build: 
    <<: *node_install_common 
    policy: pull 
    script: 
    - npm build 

しかし、私は無効なyamlエラーが発生します。どのように正しいマージの動作を取得するにはインデント?

答えて

1

マージキーはYAML仕様の一部ではないため、動作することは保証されません。これらは、廃止されたYAML 1.1バージョンにも指定されており、現在のYAML 1.2バージョンでは更新されていません。私たちは今後のYAML 1.3で明示的にマージキーを削除するつもりです。

言い換えれば、マージ構文はありません。マージキー<<は、マッピングの通常のキーのように配置する必要があります。つまり、キーには他のキーと同じインデントが必要です。だから、これは有効になります:

test:client: 
    <<: *node_install_common 
    script: 
    - npm test 

、これはありませんが:

test:build: 
    <<: *node_install_common 
    policy: pull 
    script: 
    - npm build 

注あなたのコードに比べて、私はtest:clienttest:buildラインに:を追加しました。

は今マージは、彼らはすでにそれに存在しない場合は、現在のマッピングへの参照マッピングのすべてのキーと値のペアを配置するように指定されています。つまり、サブツリー内のより深い値を置換することはできません。マージはサブツリーの部分置換をサポートしていません。ただし、複数回マージすることもできます。

.node_install_common: &node_install_common 
    before_script: 
    - node -v 
    - yarn install 
    cache: &cache_common 
    untracked: true 
    key: client 
    paths: 
     - node_modules/ 

test:client: 
    <<: *node_install_common 
    script: 
    - npm test 

test:build: 
    <<: *node_install_common 
    cache: # define an own cache mapping instead of letting merge place 
     # its version here (which could not be modified) 
    <<: *cache_common # load the common cache content 
    policy: pull  # ... and place your additional key-value pair 
    script: 
    - npm build 
+0

ありがとうございます!私は 'cache_common'の値を分けるためにあなたの助言に従うことになりました。 – BlackHoleGalaxy