置換
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}"