置換

Updated 2 years ago by Admin

Droneは、動的なパイプライン構成を容易にするために、メタデータを拡張または置換、構築する機能を提供します。

  • コミット置換の例:
    kind: pipeline
    type: docker
    name: default

    steps:
    - name: publish
    image: plugins/docker
    settings:
    tags: ${DRONE_COMMIT}
    repo: octocat/hello-world
  • タグ置換の例:
    steps:
    - name: publish
    image: plugins/docker
    settings:
    tags: ${DRONE_TAG}
    repo: octocat/hello-world

置換に使用できるパラメータのリストについては、環境リファレンスを参照してください。このリストの一部のパラメータ(ステップ名、ステップ番号、ステータスとタイムスタンプを格納するパラメータなど)は置換に使用できないことに注意してください。


文字列操作

Droneは、bash文字列操作の部分的なエミュレーションを提供します。これは、置換前に文字列値を操作するために使用できます。

  • 部分文字列による変数置換の例:
    steps:
    - name: publish
    image: plugins/docker
    settings:
    tags: ${DRONE_COMMIT_SHA:0:8}
    repo: octocat/hello-world
  • 変数置換でv1.0.0からvプレフィックスを取り除く例:
    steps:
    - name: publish
    image: plugins/docker
    settings:
    tags: ${DRONE_TAG##v}
    repo: octocat/hello-world

Droneは、以下の文字列操作をエミュレートします。Droneはこれらの操作をエミュレートするために最善を尽くしますが、完全なエミュレーションを約束するものではありません。

${parameter^}
${parameter^^}
${parameter,}
${parameter,,}
${parameter:position}
${parameter:position:length}
${parameter#substring}
${parameter##substring}
${parameter%substring}
${parameter%%substring}
${parameter/substring/replacement}
${parameter//substring/replacement}
${parameter/#substring/replacement}
${parameter/%substring/replacement}
${#parameter}
${parameter=default}
${parameter:=default}
${parameter:-default}

エスケープ

パラメータ式は、yamlが解析される前に評価されます。システムに式を評価させたくない場合は、エスケープする必要があります。

1  kind: pipeline
2 type: docker
3 name: default
4
5 steps:
6 - name: build
7 commands:
8 - echo $GOOS
9 - echo $${GOARCH}
10 - go build
11 - go test

一般的な問題

パラメータの置換は、yamlが解析される前に行われます。置換によって無効なyamlファイルが生成された場合、解析エラーが発生します。

yaml: unmarshal errors:
cannot unmarshal !!map into string

これは、パラメータを引用して、特殊/予約文字を確実にエスケープすることで解決できます。

1  kind: pipeline
2 type: docker
3 name: default
4
5 steps:
6 - name: notify
7 image: plugins/slack
8 settings:
9 channel: team
10 message: "${DRONE_COMMIT}"


How did we do?